Spring Cloud通过Ribbon实现客户端负载均衡

Spring Cloud生态中,通过Eureka可以实现微服务的注册发现,但是生产环境想要实现高可用,就要部署集群,这种情况下,微服务的负载均衡就非常有必要了。
在SpringCloud生态中,Ribbon是专门提供客户端,也就是服务调用方的负载均衡。

原理

  • 为Ribbon配置服务提供者的地址列表,与Eureka结合可自动实现
  • Ribbon基于负载均衡算法,可以控制HTTP、TCP客户端行为
    Ribbon提供了轮询、随机等算法,我们也可以自己实现负载均衡算法。

步骤

  • 添加依赖,当引入了spring-cloud-starter-eureka,以下依赖可省略
    
      org.springframework.cloud
      spring-cloud-starter-ribbon
    
  • 创建RestTemplate对象
  @Bean
  @LoadBalanced
  public RestTemplate restTemplate() {
    return new RestTemplate();
  }

此处添加了@LoadBalanced就可为RestTemplate整合Ribbon,使其具备负载均衡能力

  • Controller中编写实现接口方法
  @GetMapping("/ribbon/{id}")
  public User findById(@PathVariable Long id) {
    return this.restTemplate.getForObject("http://microservice-provider/" + id, User.class);
  }

此处使用微服务id作为接口地址,是因为使用了负载均衡,microservice-provider指的是微服务的虚拟主机名,当Ribbon和Eureka配合时,会将主机名换成网络地址然后发起网络请求。
当启动了多个provider实例后,调用客户端http接口,发现两个服务端接替提供服务,是因为Ribbon默认使用轮询方式的负载均衡方法。

你可能感兴趣的:(Spring Cloud通过Ribbon实现客户端负载均衡)