1. 程式人生 > >Spring Cloud - Ribbon客戶端的使用

Spring Cloud - Ribbon客戶端的使用

direct lock 更改 format something git 代理 hostname som

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

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

支持的屬性如下所示,應以<clientName>.ribbon.為前綴:

  • NFLoadBalancerClassName:應實施ILoadBalancer

  • NFLoadBalancerRuleClassName:應實施IRule

  • NFLoadBalancerPingClassName:應實施IPing

  • NIWSServerListClassName:應實施ServerList

  • NIWSServerListFilterClassName

    應實施ServerListFilter

    要設置服務名稱usersIRule,您可以設置以下內容:

    application.yml
    users:
      ribbon:
        NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule

    當Eureka與Ribbon結合使用(即兩者都在類路徑上)時,ribbonServerList將被擴展為DiscoveryEnabledNIWSServerList,擴展名為Eureka的服務器列表。它還用NIWSDiscoveryPing替換IPing接口,代理到Eureka以確定服務器是否啟動。

    默認情況下安裝的ServerList是一個DomainExtractingServerList,其目的是使物理元數據可用於負載平衡器,而不使用AWS AMI元數據(這是Netflix依賴的)。默認情況下,服務器列表將使用實例元數據(如遠程客戶端集合eureka.instance.metadataMap.zone)中提供的“區域”信息構建,如果缺少,則可以使用服務器主機名中的域名作為代理用於區域(如果設置了標誌approximateZoneFromHostname)。一旦區域信息可用,它可以在ServerListFilter中使用。默認情況下,它將用於定位與客戶端相同區域的服務器,因為默認值為ZonePreferenceServerListFilter
    默認情況下,客戶端的區域與遠程實例的方式相同,即通過eureka.instance.metadataMap.zone

    Eureka是一種方便的方式來抽象遠程服務器的發現,因此您不必在客戶端中對其URL進行硬編碼,但如果您不想使用它,Ribbon和Feign仍然是適用的。假設您已經為“商店”申請了@RibbonClient,並且Eureka未被使用(甚至不在類路徑上)。Ribbon客戶端默認為已配置的服務器列表,您可以提供這樣的配置

    application.yml
    stores:
      ribbon:
        listOfServers: example.com,google.com

    設置屬性ribbon.eureka.enabled = false將明確禁用在Ribbon中使用Eureka。

    application.yml
    ribbon:
      eureka:
       enabled: false

    直接使用Ribbon API

    您也可以直接使用LoadBalancerClient例:

    public class MyClass {
        @Autowired
        private LoadBalancerClient loadBalancer;
    
        public void doStuff() {
            ServiceInstance instance = loadBalancer.choose("stores");
            URI storesUri = URI.create(String.format("http://%s:%s", instance.getHost(), instance.getPort()));
            // ... do something with the URI
        }
    }

Spring Cloud - Ribbon客戶端的使用