Spring Cloud(Greenwich版)-05-Spring Cloud集成Ribbon(客户端负载均衡组件)

禅あ思 2019-08-15 15:59:20 ⋅ 955 阅读

前言

前面完成了商品和用户微服务的注册发现,是基于点对点的微服务之间的调用,那么在实际场景中微服务都是集群部署的,调用关系如下图所示:




看到这里大家会想到不就是负载均衡嘛!项目中经常用Nginx来解决图中的服务集群问题,那如果有1000+甚至10000+的服务呢?每增加一个服务要去Nginx里面配置一下,然后重启?额......想想都头皮发麻!并且Nginx的负载均衡模式和本文将要讲的是有区别的。

那么本章将会用到Ribbon组件来解决上述问题。

Ribbon简介及使用场景

Ribbon通俗来讲就是一个负载均衡器,用来控制HTTP和TCP客户端行为,Ribbon从配置服务提供者列表库(例如:Eureka、Zookeeper)去获取服务配置信息,基于负载均衡算法计算出要请求的目标服务地址。

在Spring Cloud中Ribbon通常配合Eureka使用,Ribbon可以自动从Eureka Server获取服务提供者地址列表,并基于负载均衡算法,选择其中一个服务提供者实例。下图展示了Ribbon与Eureka配合使用时的大致架构。




Spring Cloud集成Ribbon

第一步:复制商品和用户微服务项目

复制项目microservice-consumer-goods,将pom.xml文件中ArtifactId内容修改为 microservice-consumer-goods-ribbon 。如下图所示:


复制商品微服务

复制项目microservice-provider-user,将pom.xml文件中ArtifactId 内容修改为microservice-provider-user-ribbon。如下图所示:



备注:记得修改端口,不然启动会出现端口冲突问题。

第二步:添加Ribbon依赖

由于 spring-cloud-starter-netflix-eureka-client 已经包含 spring-cloud-starter-netfilx-ribbon ,这一步可以省略。

第三步:在RestTemplate上增加@LoadBalanced注解支持
MicroserviceConsumerGoodsRibbonApplication.java
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
};

对的,你没看错,到这里就结束了!只需要添加LoadBalanced注解就可以让RestTemplate整合Ribbon。

第四步:修改调用用户微服务
GoodsController.java
@GetMapping("/goods/{id}")
public User findById(@PathVariable Long id){
return this.restTemplate.getForObject("http://microservice-provider-user/simple/"+id,User.class);
}

前面我们在调用用户微服务的时候采用的是IP+端口+目标服务端点的方式,这里将请求目标改为http://{目标服务名称}/{目标服务端点} 的形式。这样的话Ribbon会自动在实际调用时,将目标服务名替换为该服务的IP和端口

第五步:启动测试
  • 启动microservice-discovery-eureka

  • 启动microservice-provider-user

  • 启动microservice-provider-user-ribbon

  • 启动microservice-consumer-goods-ribbon


微服务注册情况

如上图所示,2个用户微服务和1个商品微服务都注册到了Eureka Server,由于2个用户微服务的名称都是microservice-provider-user那么会自动识别为同一个集群服务,也就是上面商品微服务调用用户微服务的目标服务名称。

访问http://127.0.0.1:8091/goods/2
10次,会发现两个用户微服务示例都会打印日志并且是每个被请求5次。

配套代码

主代码库:https://github.com/yundianzixun/spring-cloud-study

商品微服务:https://github.com/yundianzixun/spring-cloud-study/tree/master/microservice-consumer-goods-ribbon

Eureka Server:https://github.com/yundianzixun/spring-cloud-study/tree/master/microservice-discovery-eureka

用户微服务1:https://github.com/yundianzixun/spring-cloud-study/tree/master/microservice-provider-user

用户微服务2:https://github.com/yundianzixun/spring-cloud-study/tree/master/microservice-provider-user-ribbon



全部评论: 0

    我有话说:

    Spring CloudGreenwich)-06-Spring Cloud集成Feign

    Spring Cloud系列教程第6节-Spring Cloud集成Feign

    Spring CloudGreenwich)-03-编写高可用Eureka Server(集群)

    前言 上一章Spring CloudGreenwich)-02-服务注册与服务发现-Eureka入门,我们实现了将User和Goods微服务都注册到了Eureka上,那么在生产环境中为了达到高

    深入理解 Spring Cloud 核心组件 底层原理

    搜云库技术团队:https://mp.weixin.qq.com/s/_KCBWTPvFQ2QsM4P8-gqTQ 之前一直在看 Spring Cloud 及微服务架构 对 Spring Cloud

    构建数据集成和实时数据处理流水线工具Spring Cloud Data Flow

    Spring Cloud Data Flow 是基于原生云对 Spring XD 的重新设计

    Spring Cloud快速搭建开放平台解决方案

    基于Spring Cloud开放平台解决方案 SOP

    Spring Cloud Alibaba 发布毕业后的首个版本

    方剑,花名洛夜,GitHub ID @fangjian0423,开源爱好者,阿里巴巴高级开发工程师,阿里云产品 EDAS 开发,Spring Cloud Alibaba 开源项目负责人。

    码云推荐:一个优秀的分布式spring boot/Spring Cloud API限流框架,特别适合微服务架构

    一个优秀的分布式spring boot/Spring Cloud API限流框架,特别适合微服务架构.

    Spring Cloud Data Flow 2.7.1 发布

    Spring Cloud Data Flow 2.7.1 发布了。Spring Cloud Data Flow 是构建数据集成和实时数据处理流水线的工具包。 主要更新内容 UI 错误修复

    【轻阅读】基于 Java Spring cloud的开源在线教育系统调试实战

    转载自:https://www.toutiao.com/i6759167063090004483开篇之前分享

    Redisson 3.13.6 发布,官方推荐的 Redis 客户

    Redisson 3.13.6 已发布,这是一个 Java 编写的 Redis 客户,具备驻内存数据网格(In-Memory Data Grid)功能,并获得了 Redis 的官方推荐

    【开源资讯】WinSCP 5.17.8 发布,Windows 图形化 SFTP 客户

    WinSCP 是一个 Windows 环境下使用的 SSH 的开源图形化 SFTP 客户,同时支持 SCP 协议,它的主要功能是在本地与

    MateCloud 3.2.8 版本发布,基于 Spring Cloud Alibaba 的微服务平台

    软件简介 MateCloud 是一款基于Spring Cloud Alibaba的微服务架构。目前已经整合 Spring Cloud Gateway、Spring Security

    微服务架构学习笔记:gRPC Spring Boot Starter 2.2.0 发布,及使用步骤

    gRPC Spring Boot Starter 项目是一个 gRPC 的 Spring Boot 模块。内嵌一个 gRPC Server 对外提供服务,并支持 Spring Cloud 的服务发现

    Spring Cloud 2020.0.1 BUG 修复版本发布

    2021 首发, Spring Cloud 2020.0.1 (代号"Ilford",伊尔福德)版本发布,此版本 BUG 修复版本,可从 2020.0.0 版本平滑升级。目前已可以从 maven

    架构实战篇(六):Spring Boot RestTemplate的使用

    RestTemplate是Spring提供的用于访问Rest服务的客户,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户的编写效率。

    【SpringCloud实战】一次开发中使用Feign添加动态Header问题思考

    踩了一个Spring Cloud Feign添加自定义Header的坑,分享给大家