国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Spring Cloud 參考文檔(客戶端負(fù)載均衡器:Ribbon)

Songlcy / 3081人閱讀

摘要:客戶端負(fù)載均衡器是一個客戶端負(fù)載均衡器,可以讓你對和客戶端的行為進(jìn)行大量控制,已經(jīng)使用了,因此,如果你使用,此部分也適用。

客戶端負(fù)載均衡器:Ribbon

Ribbon是一個客戶端負(fù)載均衡器,可以讓你對HTTP和TCP客戶端的行為進(jìn)行大量控制,F(xiàn)eign已經(jīng)使用了Ribbon,因此,如果你使用@FeignClient,此部分也適用。

Ribbon中的一個核心概念是命名客戶端,每個負(fù)載均衡器都是一組組件的一部分,這些組件一起工作以按需聯(lián)系遠(yuǎn)程服務(wù)器,并且該集合具有你作為應(yīng)用程序開發(fā)人員提供的名稱(例如,通過使用@FeignClient注解)。根據(jù)需要,Spring Cloud通過使用RibbonClientConfiguration為每個命名客戶端創(chuàng)建一個新的集合作為ApplicationContext,這包含(除其他外)ILoadBalancerRestClientServerListFilter

如何包含Ribbon

要在項(xiàng)目中包含Ribbon,使用組ID為org.springframework.cloud和工件ID為spring-cloud-starter-netflix-ribbon

自定義Ribbon客戶端

你可以使用.ribbon.*中的外部屬性配置Ribbon客戶端的某些,這類似于使用原生Netflix API,但你可以使用Spring Boot配置文件,可以在CommonClientConfigKey(ribbon-core的一部分)中將原生選項(xiàng)作為靜態(tài)字段進(jìn)行檢查。

Spring Cloud還允許你通過使用@RibbonClient聲明其他配置(在RibbonClientConfiguration之上)來完全控制客戶端,如以下示例所示:

@Configuration
@RibbonClient(name = "custom", configuration = CustomConfiguration.class)
public class TestConfiguration {
}

在這種情況下,客戶端由RibbonClientConfiguration中已有的組件以及CustomConfiguration(后者通常覆蓋前者)中的任何組件組成。

CustomConfiguration類必須是@Configuration類,但要注意它不在@ComponentScan中用于主應(yīng)用程序上下文,否則,它由所有@RibbonClients共享。如果使用@ComponentScan(或@SpringBootApplication),則需要采取措施以避免包含它(例如,你可以將其放在多帶帶的非重疊包中,或指定要在@ComponentScan中顯式掃描的包)。

下表顯示了Spring Cloud Netflix默認(rèn)為Ribbon提供的bean:

Bean類型 Bean名稱 類名稱
IClientConfig ribbonClientConfig DefaultClientConfigImpl
IRule ribbonRule ZoneAvoidanceRule
IPing ribbonPing DummyPing
ServerList ribbonServerList ConfigurationBasedServerList
ServerListFilter ribbonServerListFilter ZonePreferenceServerListFilter
ILoadBalancer ribbonLoadBalancer ZoneAwareLoadBalancer
ServerListUpdater ribbonServerListUpdater PollingServerListUpdater

創(chuàng)建其中一種類型的bean并將其置于@RibbonClient配置(例如下面的FooConfiguration)中,可以覆蓋所描述的每個bean,如以下示例所示:

@Configuration
protected static class FooConfiguration {
    @Bean
    public ZonePreferenceServerListFilter serverListFilter() {
        ZonePreferenceServerListFilter filter = new ZonePreferenceServerListFilter();
        filter.setZone("myTestZone");
        return filter;
    }

    @Bean
    public IPing ribbonPing() {
        return new PingUrl();
    }
}

前面示例中的語句將NoOpPing替換為PingUrl,并提供自定義serverListFilter

自定義所有Ribbon客戶端的默認(rèn)值

可以使用@RibbonClients注解并注冊默認(rèn)配置為所有Ribbon客戶端提供默認(rèn)配置,如以下示例所示:

@RibbonClients(defaultConfiguration = DefaultRibbonConfig.class)
public class RibbonClientDefaultConfigurationTestsConfig {

    public static class BazServiceList extends ConfigurationBasedServerList {
        public BazServiceList(IClientConfig config) {
            super.initWithNiwsConfig(config);
        }
    }
}

@Configuration
class DefaultRibbonConfig {

    @Bean
    public IRule ribbonRule() {
        return new BestAvailableRule();
    }

    @Bean
    public IPing ribbonPing() {
        return new PingUrl();
    }

    @Bean
    public ServerList ribbonServerList(IClientConfig config) {
        return new RibbonClientDefaultConfigurationTestsConfig.BazServiceList(config);
    }

    @Bean
    public ServerListSubsetFilter serverListFilter() {
        ServerListSubsetFilter filter = new ServerListSubsetFilter();
        return filter;
    }

}
通過設(shè)置屬性自定義Ribbon客戶端

從版本1.2.0開始,Spring Cloud Netflix現(xiàn)在支持通過將屬性設(shè)置為與Ribbon文檔兼容來自定義Ribbon客戶端。

這使你可以在不同環(huán)境中啟動時更改行為。

以下列表顯示了支持的屬性:

.ribbon.NFLoadBalancerClassName:應(yīng)該實(shí)現(xiàn)ILoadBalancer

.ribbon.NFLoadBalancerRuleClassName:應(yīng)該實(shí)現(xiàn)IRule

.ribbon.NFLoadBalancerPingClassName:應(yīng)該實(shí)現(xiàn)IPing

.ribbon.NIWSServerListClassName:應(yīng)該實(shí)現(xiàn)ServerList

.ribbon.NIWSServerListFilterClassName:應(yīng)該實(shí)現(xiàn)ServerListFilter

這些屬性中定義的類優(yōu)先于使用@RibbonClient(configuration=MyRibbonConfig.class)定義的bean以及Spring Cloud Netflix提供的默認(rèn)值。

要為名為users的服務(wù)名稱設(shè)置IRule,你可以設(shè)置以下屬性:

application.yml

users:
  ribbon:
    NIWSServerListClassName: com.netflix.loadbalancer.ConfigurationBasedServerList
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule

有關(guān)Ribbon提供的實(shí)現(xiàn),請參閱Ribbon文檔。

使用Ribbon與Eureka

當(dāng)Eureka與Ribbon一起使用時(即兩者都在類路徑上),ribbonServerListDiscoveryEnabledNIWSServerList的擴(kuò)展覆蓋,該擴(kuò)展填充Eureka的服務(wù)器列表,它還用NIWSDiscoveryPing替換IPing接口,它委托Eureka確定服務(wù)器是否啟動,默認(rèn)情況下安裝的ServerListDomainExtractingServerList,其目的是在不使用AWS AMI元數(shù)據(jù)的情況下使負(fù)載均衡器可以使用元數(shù)據(jù)(這是Netflix所依賴的)。默認(rèn)情況下,服務(wù)器列表使用“zone”信息構(gòu)建,如實(shí)例元數(shù)據(jù)中所提供的(因此,在遠(yuǎn)程客戶端上,設(shè)置eureka.instance.metadataMap.zone)。如果缺少該標(biāo)志并且設(shè)置了approximateZoneFromHostname標(biāo)志,則可以使用服務(wù)器主機(jī)名中的域名作為區(qū)域的代理,區(qū)域信息可用后,可以在ServerListFilter中使用。默認(rèn)情況下,它用于在與客戶端相同的區(qū)域中查找服務(wù)器,因?yàn)槟J(rèn)值為ZonePreferenceServerListFilter,默認(rèn)情況下,客戶端區(qū)域的確定方式與遠(yuǎn)程實(shí)例相同(即通過eureka.instance.metadataMap.zone)。

設(shè)置客戶端區(qū)域的傳統(tǒng)“archaius”方法是通過名為“@zone”的配置屬性,如果可用,Spring Cloud優(yōu)先于所有其他設(shè)置使用它(請注意,必須在YAML配置中引用該鍵)。
如果沒有其他區(qū)域數(shù)據(jù)源,則根據(jù)客戶端配置進(jìn)行猜測(與實(shí)例配置相反),獲取eureka.client.availabilityZones,它是從region名稱到zone列表的映射,并為實(shí)例自己的region 拉出第一個zone(即eureka.client.region,默認(rèn)為“us-east-1”,以便與原生Netflix兼容)。
示例:如何在沒有Eureka的情況下使用Ribbon

Eureka是一種抽象遠(yuǎn)程服務(wù)器發(fā)現(xiàn)的便捷方式,因此你無需在客戶端中對其URL進(jìn)行硬編碼,但是,如果你不想使用Eureka,Ribbon和Feign也可以使用。假設(shè)你已為“stores”聲明了@RibbonClient,并且未使用Eureka(甚至在類路徑中也沒有),Ribbon客戶端默認(rèn)為已配置的服務(wù)器列表,你可以按如下方式提供配置:

application.yml

stores:
  ribbon:
    listOfServers: example.com,google.com
示例:禁用在Ribbon中使用Eureka

ribbon.eureka.enabled屬性設(shè)置為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
    }
}
Ribbon配置的緩存

每個Ribbon命名客戶端都有一個Spring Cloud維護(hù)的相應(yīng)子應(yīng)用程序上下文,在對命名客戶端的第一次請求上延遲加載此應(yīng)用程序上下文,通過指定Ribbon客戶端的名稱,可以將此延遲加載行為更改為在啟動時急切地加載這些子應(yīng)用程序上下文,如以下示例所示:

application.yml

ribbon:
  eager-load:
    enabled: true
    clients: client1, client2, client3
如何配置Hystrix線程池

如果將zuul.ribbonIsolationStrategy更改為THREAD,則Hystrix的線程隔離策略將用于所有路由,在這種情況下,HystrixThreadPoolKey設(shè)置為RibbonCommand作為默認(rèn)值,這意味著所有路由的HystrixCommands都在同一個Hystrix線程池中執(zhí)行,可以使用以下配置更改此行為:

application.yml

zuul:
  threadPool:
    useSeparateThreadPools: true

前面的示例導(dǎo)致每個路由都在Hystrix線程池中執(zhí)行HystrixCommands。

在這種情況下,默認(rèn)HystrixThreadPoolKey與每個路由的服務(wù)ID相同,要向HystrixThreadPoolKey添加前綴,請將zuul.threadPool.threadPoolKeyPrefix設(shè)置為要添加的值,如以下示例所示:

application.yml

zuul:
  threadPool:
    useSeparateThreadPools: true
    threadPoolKeyPrefix: zuulgw
如何為Ribbon的IRule提供一個鍵

如果你需要提供自己的IRule實(shí)現(xiàn)來處理特殊的路由要求,如“canary”測試,請將一些信息傳遞給IRulechoose方法。

com.netflix.loadbalancer.IRule.java

public interface IRule{
    public Server choose(Object key);
         :

你可以提供IRule實(shí)現(xiàn)用于選擇目標(biāo)服務(wù)器的一些信息,如以下示例所示:

RequestContext.getCurrentContext()
              .set(FilterConstants.LOAD_BALANCER_KEY, "canary-test");

如果使用FilterConstants.LOAD_BALANCER_KEY的鍵將任何對象放入RequestContext,則會將其傳遞給IRule實(shí)現(xiàn)的choose方法,必須在執(zhí)行RibbonRoutingFilter之前執(zhí)行前面示例中顯示的代碼,Zuul的預(yù)過濾器是最好的選擇。你可以通過預(yù)過濾器中的RequestContext訪問HTTP headers和查詢參數(shù),因此可以用它來確定傳遞給Ribbon的LOAD_BALANCER_KEY,如果未在RequestContext中為LOAD_BALANCER_KEY設(shè)置任何值,則將null作為choose方法的參數(shù)傳遞。

上一篇:Hystrix超時和Ribbon客戶端 下一篇:外部配置:Archaius

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/74273.html

相關(guān)文章

  • Spring Cloud實(shí)戰(zhàn)(三)-Spring Cloud Netflix Ribbon

    摘要:概要什么是實(shí)戰(zhàn)整合實(shí)現(xiàn)負(fù)載均衡是什么是一個客戶端負(fù)載均衡的組件什么是負(fù)載均衡負(fù)載均衡就是分發(fā)請求流量到不同的服務(wù)器目前的實(shí)現(xiàn)有軟件和硬件負(fù)載均衡分為兩種服務(wù)器端負(fù)載均衡如上圖所示服務(wù)器端負(fù)載均衡是對客戶透明的用戶請求到服務(wù)器真正的服務(wù)器是由 概要 什么是Spring Cloud Netflix Ribbon? 實(shí)戰(zhàn):整合Ribbon實(shí)現(xiàn)負(fù)載均衡 Spring Cloud Netfl...

    wangbinke 評論0 收藏0
  • Spring Cloud 參考文檔Spring Cloud Commons:通用的抽象)

    摘要:通用的抽象服務(wù)發(fā)現(xiàn)負(fù)載均衡和斷路器等模式適用于所有客戶端都可以使用的通用抽象層,獨(dú)立于實(shí)現(xiàn)例如,使用或發(fā)現(xiàn)。重試失敗的請求可以將負(fù)載均衡的配置為重試失敗的請求,默認(rèn)情況下,禁用此邏輯,你可以通過將添加到應(yīng)用程序的類路徑來啟用它。 Spring Cloud Commons:通用的抽象 服務(wù)發(fā)現(xiàn)、負(fù)載均衡和斷路器等模式適用于所有Spring Cloud客戶端都可以使用的通用抽象層,獨(dú)立于實(shí)...

    yangrd 評論0 收藏0
  • Spring Cloud 參考文檔(重試失敗的請求)

    摘要:當(dāng)存在時,負(fù)載均衡的和會自動重試任何失敗的請求假設(shè)你的配置允許這樣做。啟用包括重試請求,由于請求的緩沖,請求會對服務(wù)器的資源產(chǎn)生影響。 重試失敗的請求 Spring Cloud Netflix提供了多種方式來發(fā)出HTTP請求,你可以使用負(fù)載均衡的RestTemplate、Ribbon或Feign。無論你如何選擇創(chuàng)建HTTP請求,總是有可能請求失敗,請求失敗時,你可能希望自動重試請求,要...

    BakerJ 評論0 收藏0
  • 外行人都能看懂的SpringCloud,錯過了血虧!

    摘要:集群系統(tǒng)中的單個計算機(jī)通常稱為節(jié)點(diǎn),通常通過局域網(wǎng)連接,但也有其它的可能連接方式。這樣就高興了,可以專心寫自己的,前端就專門交由小周負(fù)責(zé)了。于是,小周和就變成了協(xié)作開發(fā)。都是為了項(xiàng)目正常運(yùn)行以及迭代。 一、前言 只有光頭才能變強(qiáng) 認(rèn)識我的朋友可能都知道我這陣子去實(shí)習(xí)啦,去的公司說是用SpringCloud(但我覺得使用的力度并不大啊~~)... 所以,這篇主要來講講SpringClou...

    沈建明 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<