客户端侧负载均衡,Ribbon的使用

它主要提供负载均衡的能力,在Spring Cloud 中,使用最多的是将RestTemplate和Ribbon相结合,Feign中默认使用Ribbon。

一、基础应用

消费者整合Ribbon

1.为项目引用Ribbon依赖

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
    </dependency>
  1. 结和RestTemplate
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

给RestTemplate bean 加一个@LoadBalanced注解,就能让这个RestTemplate在请求时拥有客户端负载均衡的能力

  1. 测试
    启动提供者服务,服务名provider-user ,端口分别为90049005
    代码如下:
    @Resource
    private RestTemplate restTemplate;
    @Resource
    private LoadBalancerClient loadBalancerClient;

    @PostMapping("/")
    public String find() {
        ServiceInstance serviceInstance = this.loadBalancerClient.choose("provider-user");
        return serviceInstance.getServiceId() + "  " + serviceInstance.getHost() + "  ";
    }

多次请求结果如下:

provider-user  xxx  9005
provider-user  xxx  9004
provider-user  xxx  9004
provider-user  xxx  9005
provider-user  xxx  9004
provider-user  xxx  9005
provider-user  xxx  9005

说明已经实现负载均衡

Ribbon配置

  1. 比如修改Ribbon负载均衡的规则
  @Configuration
  public class RibbonConfing {

      @Bean
      public IRule RibbonRule() {
          // 轮询
          return new RoundRobinRule();
          // 随机
          return new RandomRule();
      }

  }

还有种方式是属性配置

provider-user:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule

两种效果一样,可以根据实际情况使用。

Ribbon的github:https://github.com/Netflix/ribbon

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容