1. 程式人生 > >SpringCloud微服務 之Ribbon(二-Customize)

SpringCloud微服務 之Ribbon(二-Customize)

前言

上一節中我們學習瞭如何使用Ribbon做服務例項的負載均衡,並演示了使用Ribbon預設的輪詢策略實現了Eureka服務負載均衡。本節學習一些如何自定義Ribbon的負載均衡策略。

在微服務的一些場景中我們可能會遇到如下需求:A服務消費B服務時我們需要使用Ribbon的輪詢策略來實現負載均衡,當A消費C服務時我們需要使用Ribbon的隨機策略來實現負載均衡,當A消費D服務時我們需要使用Ribbon的IPPrefer策略來實現均衡負載…。即A服務消費不同的服務時使用的均衡負載策略是不一樣的,我們知道Ribbon預設使用的負載均衡策略是輪詢,此時我們就需要自定義不同負載均衡策略來滿足不同的業務需求。

  • Ribbon提供的負載均衡策略:
    在這裡插入圖片描述

案例

  • Eureka Server端編寫:((參考前例))

  • Eureka Client端服務提供方編寫(參考前例)

    • 專案結構
      在這裡插入圖片描述

    • CoreCode

      @Configuration
      public class RibbonConfig {
      	
      	@Autowired
      	IClientConfig config;
      	
      	@Bean
      	public IRule ribbonRule(IClientConfig config) {
      		return new RandomRule();
      	}
      }
      
      
      @SpringBootApplication
      @EnableDiscoveryClient
      @RibbonClients(value = {
      		@RibbonClient(name = "microservice-deal-cloud", configuration = RibbonConfig.class)
      })  //可以新增多個自定義@RibbonClient用於對不同的服務做不同成都的負責均衡策略
      
      public class MicroserviceDealBrokerRibbonCustomizedApplication {
      
      	@Bean
      	@LoadBalanced
      	/**
      	 * 新增 @LoadBalanced 使該RestTemplate具備Ribbon均衡負載演算法功能
      	 * @return
      	 */
      	public RestTemplate restTemplate() {
      		return new RestTemplate();
      	}
      
      	public static void main(String[] args) {
      		SpringApplication.run(MicroserviceDealBrokerRibbonCustomizedApplication.class, args);
      	}
      }
      
  • Eureka Client端服務提消費編寫(多例項) 在多個埠啟動多個例項 (參考前例)
    開啟3個例項(8081、8083、8084)

  • Eureka DashBoard
    在這裡插入圖片描述

  • 持續訪問:http://localhost:8082/deal/2
    Ribbon會使用隨機策略隨機定位到不同的例項:
    圖片靜態展示無說服力就不貼圖了 - -!。

小結

  • 自定義Ribbon的負載均衡策略時需要特別注意一下幾點:
    • Ribbon預設的負載均衡策略時輪詢策略。
    • 自定義Ribbon負載均衡策略時配置類不能與主類同包,否則RibbonClient會覆蓋所有自定義策略,如本案例所示將主類與配置類分開。
    • 使用@RibbonClients可以實現對不同服務節點使用不同的負載均衡策略,如本案例主類註解所示。
    • 可以在配置檔案中設定Ribbon的負載均衡策略:ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule
      使用這種方式配置的是全域性負載均衡策略,無法實現對不同節點使用不同負載均衡策略,慎用!!!
    • RibbonClient負載均衡父類:org.springframework.cloud.netflix.ribbon.RibbonClientConfiguration。
    • 用到的案例:microservice-deal-eureka、microservice-deal-cloud、microservice-deal-broker-cloud-ribbon-customized。