Spring Cloud 负载均衡 - Ribbon

Spring Cloud 负载均衡 - Ribbon

4.1-Ribbon概述

Ribbon是Netflix提供的一个基于HTTP和TCP的客户端负载均衡工具。

  • 主要作用

    1、简化远程调用

    2、负载均衡

    • 服务端负载均衡

      负载均衡算法在服务器

      由负载均衡器维护服务地址列表

    • 客户端负载均衡

      负载均衡算法在客户端

      客户端维护服务地址列表

4.2-Ribbon简化远程调用

​ Ribbon可以与简化RestTemplate的远程调用。

实现步骤1-在consumer项目RestTemplateConfig中新增@LoadBalanced注解:

@Configuration
public class RestTemplateConfig {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

实现步骤2-在consumer项目OrderController中新增findGoodsById2方法:

    /*
    * 使用Ribbon简化RestTemplate远程调用
    * 1、在声明restTemplate的bean时候,添加@LoadBalanced注解
    * 2、在使用restTemplate发起请求时,需要定义url时,host:port可以替换成"应用名称"
    * */
    @GetMapping("/goods2/{id}")
    public Goods findGoodsById2(@PathVariable("id") int id){
        System.out.println("findGoodsById..."+id);
        String url = "http://eureka-provider/goods/findOne/"+id;
        // 3. 调用方法
        Goods goods = restTemplate.getForObject(url, Goods.class);
        return goods;
    }

实现步骤3-在provider项目GoodController中修改findOne方法

    @Value("${server.port}")
    private String port;

    @GetMapping("/findOne/{id}")
    public Goods findOne(@PathVariable("id") int id){

        Goods goods = goodsService.findOne(id);
        goods.setTitle(goods.getTitle()+":"+port);//将端口号设置到上屏的title上,便于分辨
        return goods;
    }

4.3-负载均衡

  • Ribbon负载均衡策略

    • 随机:RandomRule
    • 轮询:RoundRobinRule
    • 最小并发:BestAvailabelRule
    • 过滤:AvailabilityFilteringRule
    • 响应时间:WeightedResponseTimeRule
    • 轮询重试:RetryRule
    • 性能可用性:ZoneAvoidanceRule
  • 设置负载均衡策略

    • 编码

      1.创建MyRule

      package com.itheima.consumer.config;
      
      import com.netflix.loadbalancer.IRule;
      import com.netflix.loadbalancer.RandomRule;
      import org.springframework.context.annotation.Bean;
      import org.springframework.context.annotation.Configuration;
      
      @Configuration
      public class MyRule {
      
          @Bean
          public IRule getRule(){
              return new RandomRule();
          }
      }
      
    • 配置

      • 代码的方式配置负载均衡策略
      /**
       *
       * 配置ribbon的策略
       * name:设置应用的名称
       * configuration:设置负载均衡策略
       * */
      @RibbonClient(name = "eureka-provider",configuration = MyRule.class)
      @EnableDiscoveryClient // 激活DiscoveryClient
      @EnableEurekaClient
      @SpringBootApplication
      public class ConsumerApp {
      
          public static void main(String[] args) {
              SpringApplication.run(ConsumerApp.class,args);
          }
      }
      
      • 配置文件配置负载均衡策略
      eureka-provider:
        ribbon:
          NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
      
posted @ 2021-01-25 17:10  60kmph  阅读(123)  评论(0编辑  收藏  举报