Spring Cloud-05使用配置檔案自定義Ribbon Client
文章目錄
概述
Finchley.SR2版本的官方文件:
https://cloud.spring.io/spring-cloud-static/Finchley.SR2/single/spring-cloud.html#spring-cloud-ribbon
示例
新建子模組
父模組microservice-spring-cloud,右鍵新建Maven Module : micorservice-consumer-movie-ribbon-customrule-properties
檢視父模組的pom.xml
子模組工程結構
子模組加入依賴
micorservice-consumer-movie-ribbon-customrule-properties子模組的pom.xml加入spring-cloud-starter-netflix-eureka-client依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client< /artifactId>
</dependency>
配置檔案增加配置
根據官網的指導可知,如果我們希望在該微服務中設定請求某個服務的規則,配置
application.yml中增加如下配置
#使用屬性自定義Ribbon配置
MICROSERVICE-PROVIDER-USER:
ribbon:
NIWSServerListClassName: com.netflix.loadbalancer.ConfigurationBasedServerList
NFLoadBalancerRuleClassName: com.netflix. loadbalancer.WeightedResponseTimeRule
這裡我們使用隨機的方式,所以設定了 RandomRule 。
驗證
Step1:啟動Eureka Server微服務
Step2: 啟動兩個Provider微服務
Step3:啟動該微服務作為消費者,通過Eureka Server上的地址去呼叫註冊在Eureka上的兩個provider微服務,觀察負載均衡策略
經過測試,如果設定了NIWSServerListClassName,那麼呼叫的服務端的微服務的名字必須大寫,否則會找不到微服務。 No instances available for microservice-provider-user。 不過看官網的例子服務名也是小寫的,這裡還不是很清楚,請大家慎重看待我這裡的結論,不一定正確,歡迎指正
這樣設定,測試了下結果還是像輪詢的方式,先把 NIWSServerListClassName: com.netflix.loadbalancer.ConfigurationBasedServerList
配置項去掉,重新驗證下
在去掉NIWSServerListClassName的前提下
- 如果服務名還是大寫的話,看測試結果 還是輪詢的。
- 如果把服務名改成小寫,測試結果
看結果,是隨機分發的策略。
目前還搞不懂Spring Cloud 和Ribbon 是如何協調工作的,先記錄下結果,後續再研究。 如果有不對的地方,請指正,謝謝。
Spring Boot和Spring Cloud 的版本資訊