Spring Cloud Netflix—自定義Ribbon客戶端

blingbling1發表於2018-03-07

使用屬性自定義Ribbon客戶端

從版本1.2.0開始,Spring Cloud Netflix現在支援使用屬性與Ribbon文件相容來自定義Ribbon客戶端。

這允許您在不同環境中更改啟動時的行為。

支援的屬性如下所示,應以.ribbon.為字首:

NFLoadBalancerClassName:應實施ILoadBalancer

NFLoadBalancerRuleClassName:應實施IRule

NFLoadBalancerPingClassName:應實施IPing

NIWSServerListClassName:應實施ServerList

NIWSServerListFilterClassName應實施ServerListFilter

注意 在這些屬性中定義的類優先於使用@RibbonClient(configuration=MyRibbonConfig.class)定義的bean和由Spring Cloud Netflix提供的預設值。 要設定服務名稱users的IRule,您可以設定以下內容:

application.yml users: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule 有關Ribbon提供的實現,請參閱Ribbon文件。

在Eureka中使用Ribbon

當Eureka與Ribbon結合使用(即兩者都在類路徑上)時,ribbonServerList將被擴充套件為DiscoveryEnabledNIWSServerList,副檔名為Eureka的伺服器列表。它還用NIWSDiscoveryPing替換IPing介面,代理到Eureka以確定伺服器是否啟動。預設情況下安裝的ServerList是一個DomainExtractingServerList,其目的是使物理後設資料可用於負載平衡器,而不使用AWS AMI後設資料(這是Netflix依賴的)。預設情況下,伺服器列表將使用例項後設資料(如遠端客戶端集合eureka.instance.metadataMap.zone)中提供的“區域”資訊構建,如果缺少,則可以使用伺服器主機名中的域名作為代理用於區域(如果設定了標誌approximateZoneFromHostname)。一旦區域資訊可用,它可以在ServerListFilter中使用。預設情況下,它將用於定位與客戶端相同區域的伺服器,因為預設值為ZonePreferenceServerListFilter。預設情況下,客戶端的區域與遠端例項的方式相同,即通過eureka.instance.metadataMap.zone。

注意 設定客戶端區域的正統“archaius”方式是通過一個名為“@zone”的配置屬性,如果可用,Spring Cloud將優先使用所有其他設定(請注意,該鍵必須被引用)在YAML配置中)。 注意 如果沒有其他的區域資料來源,則基於客戶端配置(與例項配置相反)進行猜測。我們將eureka.client.availabilityZones(從區域名稱對映到區域列表),並將例項自己的區域的第一個區域(即eureka.client.region,其預設為“us-east-1”為與本機Netflix的相容性)。

Spring Cloud Netflix—自定義Ribbon客戶端
原始碼來源:http://minglisoft.cn/honghu/technology.html

相關文章