前言

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




看到这里大家会想到不就是负载均衡嘛!项目中经常用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


©著作权归作者所有:来自51CTO博客作者mob604756f23a7e的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. Spring Cloud(Greenwich版)-04-Spring Cloud集成Security
  2. 手把手从0开始教你搭建Jumpserver,为服务器安全保驾护航!
  3. 微服务设计模式(下)
  4. 微服务设计模式(上)
  5. 大规模分布式系统资源管理(一)
  6. 强大!Nginx 配置在线一键生成“神器”
  7. Ajax异步请求PHP服务器,如何做到无阻塞响应 原创 学习与分享 PH
  8. Exchange2016和2019的架构分享
  9. istio组件mixer初学篇

随机推荐

  1. Android layout xml总结
  2. Android SDK Tools Platform-tools Build
  3. 安卓相对布局
  4. android 4.4 下载文件
  5. EditText的一些使用注意点
  6. Android 的一些比较好的开源代码项目
  7. android中选中,获得焦点的,点击区别
  8. Android(安卓)和风天气SDK获取天气
  9. 2010.10.28———Android 02
  10. 【Android】FadingEdge