SpringCloud微服務 之Ribbon(二-Customize)
阿新 • • 發佈:2018-11-09
前言
上一節中我們學習瞭如何使用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。