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

Spring Cloud集成Ribbon

前言

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

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

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

Ribbon简介及使用场景

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

在Spring Cloud中Ribbon通常配合Eureka使用,Ribbon可以自动从Eureka Server获取服务提供者地址列表,并基于负载均衡算法,选择其中一个服务提供者实例。下图展示了Ribbon与Eureka配合使用时的大致架构。
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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值