1. 程式人生 > >Spring Cloud-05使用配置檔案自定義Ribbon Client

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 的版本資訊

在這裡插入圖片描述


原始碼

https://github.com/yangshangwei/SpringCloudMaster