Ribbon+LoadBalance

Ribbon+LoadBalance

ribbon是一套客户端的负载均衡工具。主要提供客户端的负载均衡算法和服务调用。当调用服务时ribbon会自动的帮助你基于某种规则(轮询、随机)去链接机器调用服务。我们也可以使用ribbon实现自定义的负载均衡算法。Ribbon是客户端的负载均衡,Nginx是服务器的负载均衡。

  1. pom依赖

    eureka自带了ribbon依赖,所以只需加入eureka客户端依赖。

  2. Ribbon要结合RestTemplate实现远程调用

    /**
     * 配置RestTemplate
     * 使用@LoadBalanced 默认轮询的负载均衡策略
     */
    @Configuration
    public class RestTemplateConfig {
    
        @Bean
        @LoadBalanced
        public RestTemplate getRestTemplate(){
            return new RestTemplate();
        }
    }
    
    @RestController
    public class OrderController {
        @Resource
        private RestTemplate restTemplate;
    
        public static final String PAYMENT_URL = "http://CLOUD-PAYMENT-SERVICE";
    
        @GetMapping("/login/{admin}/{password}")
        public Result<Users> orderLogin(@PathVariable String admin,@PathVariable String password){
            String login_url = PAYMENT_URL+"/sent/user/login/"+admin+"/"+password;
            //使用restTemplate实现远程调用服务
            Result<Users> result = restTemplate.getForObject(login_url,Result.class);
            return result;
        }
    }
    
  3. 自定义ribbon负载均衡算法

    自定义的ribbon负载规则不能放在@ComponentScan所扫描的包下以及子包下,也就是说不能放在主启动类所在的包内,要与主启动类所在包并列。利用IRule设置规则

    @Configuration
    public class MyRandomRule {
        @Bean
        public IRule myRule(){
            return new RandomRule();
        }
    }
    

    ,在主启动类加上

    @RibbonClient(name = "CLOUD-PAYMENT-SERVICE",configuration = MyRandomRule.class)
    

    以下为Ribbon均衡负载规则的类型。

    在这里插入图片描述

  4. 在spring-cloud2020后eureka移除了ribbon。需要使用LoadBalance来设置自定义的负载均衡。eureka自带了LoadBalance依赖,所以只需加入eureka客户端依赖。和ribbon一样需要配置RestTemplate实现远程调用。

    1. 自定义LoadBalance负载均衡策略

      /**
       * 自定义随机负载均衡策略
       */
      public class MyRandomRule {
          @Bean
          ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,
                                                                  LoadBalancerClientFactory loadBalancerClientFactory){
              String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
              return new RandomLoadBalancer(loadBalancerClientFactory
                      .getLazyProvider(name, ServiceInstanceListSupplier.class),name);
          }
      }
      
    2. 创建RestTemplate时加上自定义负载均衡策略

      /**
       * 配置RestTemplate
       * 使用@LoadBalanced 默认轮询的负载均衡策略
       */
      @Configuration
      @LoadBalancerClient(name = "CLOUD-PAYMENT-SERVICE",configuration = MyRandomRule.class)
      public class RestTemplateConfig {
      
          @Bean
          @LoadBalanced
          public RestTemplate getRestTemplate(){
              return new RestTemplate();
          }
      }
      
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值