美文网首页
Spring Cloud通过Ribbon实现客户端负载均衡

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

作者: 你慧快乐 | 来源:发表于2019-04-04 23:18 被阅读0次

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

    原理

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

    步骤

    • 添加依赖,当引入了spring-cloud-starter-eureka,以下依赖可省略
        <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-ribbon</artifactId>
        </dependency>
    
    • 创建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实现客户端负载均衡

          本文链接:https://www.haomeiwen.com/subject/kmmnbqtx.html