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

資訊專欄INFORMATION COLUMN

Spring Cloud 參考文檔(Spring Cloud Commons:通用的抽象)

yangrd / 1588人閱讀

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

Spring Cloud Commons:通用的抽象

服務(wù)發(fā)現(xiàn)、負(fù)載均衡和斷路器等模式適用于所有Spring Cloud客戶端都可以使用的通用抽象層,獨(dú)立于實(shí)現(xiàn)(例如,使用Eureka或Consul發(fā)現(xiàn))。

@EnableDiscoveryClient

Spring Cloud Commons提供@EnableDiscoveryClient注解,這將使用META-INF/spring.factories查找DiscoveryClient接口的實(shí)現(xiàn)。Discovery Client的實(shí)現(xiàn)將配置類添加到org.springframework.cloud.client.discovery.EnableDiscoveryClient鍵下的spring.factoriesDiscoveryClient實(shí)現(xiàn)的示例包括Spring Cloud Netflix Eureka,Spring Cloud Consul Discovery和Spring Cloud Zookeeper Discovery。

默認(rèn)情況下,DiscoveryClient的實(shí)現(xiàn)會(huì)使用遠(yuǎn)程發(fā)現(xiàn)服務(wù)器自動(dòng)注冊(cè)本地Spring Boot服務(wù)器,通過在@EnableDiscoveryClient中設(shè)置autoRegister=false可以禁用此行為。

@EnableDiscoveryClient已不再需要,你可以在類路徑上放置DiscoveryClient實(shí)現(xiàn),以使Spring Boot應(yīng)用程序向服務(wù)發(fā)現(xiàn)服務(wù)器注冊(cè)。
健康指示器

Commons創(chuàng)建了一個(gè)Spring Boot HealthIndicatorDiscoveryClient實(shí)現(xiàn)可以通過實(shí)現(xiàn)DiscoveryHealthIndicator來參與,要禁用混合HealthIndicator,請(qǐng)?jiān)O(shè)置spring.cloud.discovery.client.composite-indicator.enabled=false。基于DiscoveryClient的通用HealthIndicator是自動(dòng)配置的(DiscoveryClientHealthIndicator)。要禁用它,請(qǐng)?jiān)O(shè)置spring.cloud.discovery.client.health-indicator.enabled=false,要禁用DiscoveryClientHealthIndicatordescription字段,請(qǐng)?jiān)O(shè)置spring.cloud.discovery.client.health-indicator.include-description=false,否則,它可能會(huì)像卷起的HealthIndicatordescription一樣冒出來。

排序DiscoveryClient實(shí)例

DiscoveryClient接口擴(kuò)展了Ordered,這在使用多個(gè)發(fā)現(xiàn)客戶端時(shí)很有用,因?yàn)樗试S你定義返回的發(fā)現(xiàn)客戶端的順序,類似于你可以如何排序Spring應(yīng)用程序加載的bean。默認(rèn)情況下,任何DiscoveryClient的順序都設(shè)置為0,如果要為自定義DiscoveryClient實(shí)現(xiàn)設(shè)置不同的順序,只需重寫getOrder()方法,以便它返回適合你的設(shè)置的值。除此之外,你還可以使用屬性來設(shè)置Spring Cloud提供的DiscoveryClient實(shí)現(xiàn)的順序,其中包括ConsulDiscoveryClientEurekaDiscoveryClientZookeeperDiscoveryClient,為此,你只需將spring.cloud.{clientIdentifier}.discovery.order(或Eureka的eureka.client.order)屬性設(shè)置為所需的值。

ServiceRegistry

Commons現(xiàn)在提供一個(gè)ServiceRegistry接口,提供register(Registration)deregister(Registration)等方法,讓你提供自定義注冊(cè)服務(wù),Registration是一個(gè)標(biāo)記接口。

以下示例顯示ServiceRegistry的使用:

@Configuration
@EnableDiscoveryClient(autoRegister=false)
public class MyConfiguration {
    private ServiceRegistry registry;

    public MyConfiguration(ServiceRegistry registry) {
        this.registry = registry;
    }

    // called through some external process, such as an event or a custom actuator endpoint
    public void register() {
        Registration registration = constructRegistration();
        this.registry.register(registration);
    }
}

每個(gè)ServiceRegistry實(shí)現(xiàn)都有自己的Registry實(shí)現(xiàn)。

ZookeeperRegistrationZookeeperServiceRegistry一起使用

EurekaRegistrationEurekaServiceRegistry一起使用

ConsulRegistrationConsulServiceRegistry一起使用

如果你使用的是ServiceRegistry接口,則需要為正在使用的ServiceRegistry實(shí)現(xiàn)傳遞正確的Registry實(shí)現(xiàn)。

ServiceRegistry自動(dòng)注冊(cè)

默認(rèn)情況下,ServiceRegistry實(shí)現(xiàn)會(huì)自動(dòng)注冊(cè)正在運(yùn)行的服務(wù),要禁用該行為,你可以設(shè)置: @EnableDiscoveryClient(autoRegister=false)永久禁用自動(dòng)注冊(cè), spring.cloud.service-registry.auto-registration.enabled=false通過配置禁用行為。

ServiceRegistry自動(dòng)注冊(cè)事件

當(dāng)服務(wù)自動(dòng)注冊(cè)時(shí),將觸發(fā)兩個(gè)事件,第一個(gè)事件名為InstancePreRegisteredEvent,在注冊(cè)服務(wù)之前觸發(fā),第二個(gè)事件名為InstanceRegisteredEvent,在注冊(cè)服務(wù)后觸發(fā),你可以注冊(cè)一個(gè)ApplicationListener來監(jiān)聽并響應(yīng)這些事件。

如果spring.cloud.service-registry.auto-registration.enabled設(shè)置為false,則不會(huì)觸發(fā)這些事件。
Service Registry Actuator端點(diǎn)

Spring Cloud Commons提供/service-registry執(zhí)行器端點(diǎn),此端點(diǎn)依賴于Spring Application Context中的Registration bean,使用GET調(diào)用/service-registry返回Registration的狀態(tài),將POST用于具有JSON體的同一端點(diǎn)會(huì)將當(dāng)前Registration的狀態(tài)更改為新值,JSON體必須包含具有首選值的status字段。在更新狀態(tài)和為狀態(tài)返回的值時(shí),請(qǐng)參閱用于允許值的ServiceRegistry實(shí)現(xiàn)的文檔,例如,Eureka支持的狀態(tài)是UPDOWNOUT_OF_SERVICEUNKNOWN

Spring RestTemplate作為負(fù)載均衡客戶端

RestTemplate可以自動(dòng)配置為使用ribbon,要?jiǎng)?chuàng)建負(fù)載均衡的RestTemplate,請(qǐng)創(chuàng)建RestTemplate @Bean并使用@LoadBalanced限定符,如以下示例所示:

@Configuration
public class MyConfiguration {

    @LoadBalanced
    @Bean
    RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

public class MyClass {
    @Autowired
    private RestTemplate restTemplate;

    public String doOtherStuff() {
        String results = restTemplate.getForObject("http://stores/stores", String.class);
        return results;
    }
}
不再通過自動(dòng)配置創(chuàng)建RestTemplate bean,單個(gè)應(yīng)用程序必須創(chuàng)建它。

URI需要使用虛擬主機(jī)名(即服務(wù)名稱,而不是主機(jī)名),Ribbon客戶端用于創(chuàng)建完整的物理地址,有關(guān)如何設(shè)置RestTemplate的詳細(xì)信息,請(qǐng)參見RibbonAutoConfiguration

Spring WebClient作為負(fù)載均衡客戶端

WebClient可以自動(dòng)配置為使用LoadBalancerClient,要?jiǎng)?chuàng)建負(fù)載均衡的WebClient,請(qǐng)創(chuàng)建WebClient.Builder @Bean并使用@LoadBalanced限定符,如以下示例所示:

@Configuration
public class MyConfiguration {

    @Bean
    @LoadBalanced
    public WebClient.Builder loadBalancedWebClientBuilder() {
        return WebClient.builder();
    }
}

public class MyClass {
    @Autowired
    private WebClient.Builder webClientBuilder;

    public Mono doOtherStuff() {
        return webClientBuilder.build().get().uri("http://stores/stores")
                        .retrieve().bodyToMono(String.class);
    }
}

URI需要使用虛擬主機(jī)名(即服務(wù)名稱,而不是主機(jī)名),Ribbon客戶端用于創(chuàng)建完整的物理地址。

重試失敗的請(qǐng)求

可以將負(fù)載均衡的RestTemplate配置為重試失敗的請(qǐng)求,默認(rèn)情況下,禁用此邏輯,你可以通過將Spring Retry添加到應(yīng)用程序的類路徑來啟用它。負(fù)載均衡的RestTemplate支持與重試失敗的請(qǐng)求相關(guān)的一些Ribbon配置值,你可以使用client.ribbon.MaxAutoRetriesclient.ribbon.MaxAutoRetriesNextServerclient.ribbon.OkToRetryOnAllOperations屬性,如果要在類路徑上使用Spring Retry禁用重試邏輯,可以設(shè)置spring.cloud.loadbalancer.retry.enabled=false,有關(guān)這些屬性的說明,請(qǐng)參閱Ribbon文檔。

如果要在重試中實(shí)現(xiàn)BackOffPolicy,則需要?jiǎng)?chuàng)建LoadBalancedRetryFactory類型的bean并覆蓋createBackOffPolicy方法:

@Configuration
public class MyConfiguration {
    @Bean
    LoadBalancedRetryFactory retryFactory() {
        return new LoadBalancedRetryFactory() {
            @Override
            public BackOffPolicy createBackOffPolicy(String service) {
                return new ExponentialBackOffPolicy();
            }
        };
    }
}
前面示例中的client應(yīng)替換為你的Ribbon客戶端的名稱。

如果要將一個(gè)或多個(gè)RetryListener實(shí)現(xiàn)添加到重試功能中,你需要?jiǎng)?chuàng)建一個(gè)類型為LoadBalancedRetryListenerFactory的bean并返回你要用于給定服務(wù)的RetryListener數(shù)組,如以下示例所示:

@Configuration
public class MyConfiguration {
    @Bean
    LoadBalancedRetryListenerFactory retryListenerFactory() {
        return new LoadBalancedRetryListenerFactory() {
            @Override
            public RetryListener[] createRetryListeners(String service) {
                return new RetryListener[]{new RetryListener() {
                    @Override
                    public  boolean open(RetryContext context, RetryCallback callback) {
                        //TODO Do you business...
                        return true;
                    }

                    @Override
                     public  void close(RetryContext context, RetryCallback callback, Throwable throwable) {
                        //TODO Do you business...
                    }

                    @Override
                    public  void onError(RetryContext context, RetryCallback callback, Throwable throwable) {
                        //TODO Do you business...
                    }
                }};
            }
        };
    }
}
多個(gè)RestTemplate對(duì)象

如果你想要一個(gè)非負(fù)載均衡的RestTemplate,請(qǐng)創(chuàng)建一個(gè)RestTemplate bean并將其注入,要訪問負(fù)載均衡的RestTemplate,請(qǐng)?jiān)趧?chuàng)建@Bean時(shí)使用@LoadBalanced限定符,如以下示例所示:

@Configuration
public class MyConfiguration {

    @LoadBalanced
    @Bean
    RestTemplate loadBalanced() {
        return new RestTemplate();
    }

    @Primary
    @Bean
    RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

public class MyClass {
    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    @LoadBalanced
    private RestTemplate loadBalanced;

    public String doOtherStuff() {
        return loadBalanced.getForObject("http://stores/stores", String.class);
    }

    public String doStuff() {
        return restTemplate.getForObject("http://example.com", String.class);
    }
}
請(qǐng)注意在前面示例中的普通RestTemplate聲明中使用@Primary注解來消除無條件的@Autowired注入的歧義。
如果你看到java.lang.IllegalArgumentException: Can not set org.springframework.web.client.RestTemplate field com.my.app.Foo.restTemplate to com.sun.proxy.$Proxy89,嘗試注入RestOperations或設(shè)置spring.aop.proxyTargetClass=true
Spring WebFlux WebClient作為負(fù)載均衡客戶端

可以將WebClient配置為使用LoadBalancerClient,如果spring-webflux位于類路徑上,則自動(dòng)配置LoadBalancerExchangeFilterFunction,以下示例顯示如何配置WebClient以使用負(fù)載均衡:

public class MyClass {
    @Autowired
    private LoadBalancerExchangeFilterFunction lbFunction;

    public Mono doOtherStuff() {
        return WebClient.builder().baseUrl("http://stores")
            .filter(lbFunction)
            .build()
            .get()
            .uri("/stores")
            .retrieve()
            .bodyToMono(String.class);
    }
}

URI需要使用虛擬主機(jī)名(即服務(wù)名稱,而不是主機(jī)名),LoadBalancerClient用于創(chuàng)建完整的物理地址。

忽略網(wǎng)絡(luò)接口

有時(shí),忽略某些命名的網(wǎng)絡(luò)接口以便從Service Discovery注冊(cè)中排除它們(例如,在Docker容器中運(yùn)行時(shí))是有用的,可以設(shè)置正則表達(dá)式列表以使所需的網(wǎng)絡(luò)接口被忽略,以下配置忽略docker0接口和以veth開頭的所有接口:

application.yml

spring:
  cloud:
    inetutils:
      ignoredInterfaces:
        - docker0
        - veth.*

你還可以使用正則表達(dá)式列表強(qiáng)制僅使用指定的網(wǎng)絡(luò)地址,如以下示例所示:

bootstrap.yml

spring:
  cloud:
    inetutils:
      preferredNetworks:
        - 192.168
        - 10.0

你還可以強(qiáng)制僅使用站點(diǎn)本地地址,如以下示例所示:

application.yml

spring:
  cloud:
    inetutils:
      useOnlySiteLocalInterfaces: true

有關(guān)構(gòu)成站點(diǎn)本地地址的更多詳細(xì)信息,請(qǐng)參閱Inet4Address.html.isSiteLocalAddress()。

HTTP客戶端工廠

Spring Cloud Commons提供用于創(chuàng)建Apache HTTP客戶端(ApacheHttpClientFactory)和OK HTTP客戶端(OkHttpClientFactory)的bean,僅當(dāng)OK HTTP jar位于類路徑上時(shí),才會(huì)創(chuàng)建OkHttpClientFactory bean。此外,Spring Cloud Commons提供了創(chuàng)建用于兩個(gè)客戶端使用的連接管理器的bean:Apache HTTP客戶端的ApacheHttpClientConnectionManagerFactory和OK HTTP客戶端的OkHttpClientConnectionPoolFactory。如果要自定義在下游項(xiàng)目中創(chuàng)建HTTP客戶端的方式,可以提供自己的這些bean實(shí)現(xiàn),此外,如果你提供類型為HttpClientBuilderOkHttpClient.Builder的bean,則默認(rèn)工廠使用這些構(gòu)建器作為返回到下游項(xiàng)目的構(gòu)建器的基礎(chǔ),你還可以通過將spring.cloud.httpclientfactories.apache.enabledspring.cloud.httpclientfactories.ok.enabled設(shè)置為false來禁用這些bean的創(chuàng)建。

啟用特性

Spring Cloud Commons提供/features執(zhí)行器端點(diǎn),此端點(diǎn)返回類路徑上可用的特性以及它們是否已啟用,返回的信息包括特性類型、名稱、版本和供應(yīng)商。

特性類型

有兩種類型的"特性":抽象和命名。

抽象特性是定義接口或抽象類并創(chuàng)建實(shí)現(xiàn)(如DiscoveryClientLoadBalancerClientLockService)的特性,抽象類或接口用于在上下文中查找該類型的bean,顯示的版本是bean.getClass().getPackage().getImplementationVersion()

命名特性是沒有他們實(shí)現(xiàn)的特定類的特性,例如“斷路器”,“API網(wǎng)關(guān)”,“Spring Cloud Bus”等,這些特性需要名稱和bean類型。

聲明特性

任何模塊都可以聲明任意數(shù)量的HasFeature bean,如以下示例所示:

@Bean
public HasFeatures commonsFeatures() {
  return HasFeatures.abstractFeatures(DiscoveryClient.class, LoadBalancerClient.class);
}

@Bean
public HasFeatures consulFeatures() {
  return HasFeatures.namedFeatures(
    new NamedFeature("Spring Cloud Bus", ConsulBusAutoConfiguration.class),
    new NamedFeature("Circuit Breaker", HystrixCommandAspect.class));
}

@Bean
HasFeatures localFeatures() {
  return HasFeatures.builder()
      .abstractFeature(Foo.class)
      .namedFeature(new NamedFeature("Bar Feature", Bar.class))
      .abstractFeature(Baz.class)
      .build();
}

這些bean中的每一個(gè)都應(yīng)該放在一個(gè)受到適當(dāng)保護(hù)的@Configuration中。

Spring Cloud兼容性驗(yàn)證

由于某些用戶在設(shè)置Spring Cloud應(yīng)用程序時(shí)遇到問題,因此決定添加兼容性驗(yàn)證機(jī)制,如果你當(dāng)前的設(shè)置與Spring Cloud要求不兼容,并且報(bào)告顯示出現(xiàn)了什么問題,它將會(huì)中斷。

目前我們驗(yàn)證哪個(gè)版本的Spring Boot被添加到你的類路徑中。

報(bào)告示例

***************************
APPLICATION FAILED TO START
***************************

Description:

Your project setup is incompatible with our requirements due to following reasons:

- Spring Boot [2.1.0.RELEASE] is not compatible with this Spring Cloud release train


Action:

Consider applying the following actions:

- Change Spring Boot version to one of the following versions [1.2.x, 1.3.x] .
You can find the latest Spring Boot versions here [https://spring.io/projects/spring-boot#learn].
If you want to learn more about the Spring Cloud Release train compatibility, you can visit this page [https://spring.io/projects/spring-cloud#overview] and check the [Release Trains] section.

要禁用此功能,請(qǐng)將spring.cloud.compatibility-verifier.enabled設(shè)置為false,如果要覆蓋兼容的Spring Boot版本,只需使用逗號(hào)分隔的兼容Spring Boot版本列表設(shè)置spring.cloud.compatibility-verifier.compatible-boot-versions屬性。

上一篇:Spring Cloud Context:應(yīng)用程序上下文服務(wù) 下一篇:Spring Cloud Config快速入門

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/77560.html

相關(guān)文章

  • Spring Cloud 參考文檔Spring Cloud Config快速入門)

    摘要:快速入門這個(gè)快速入門使用的服務(wù)器和客戶端。屬性在端點(diǎn)中顯示為高優(yōu)先級(jí)屬性源,如以下示例所示。名為的屬性源包含值為且具有最高優(yōu)先級(jí)的屬性。屬性源名稱中的是存儲(chǔ)庫(kù),而不是配置服務(wù)器。 Spring Cloud Config快速入門 這個(gè)快速入門使用Spring Cloud Config Server的服務(wù)器和客戶端。 首先,啟動(dòng)服務(wù)器,如下所示: $ cd spring-cloud-con...

    gekylin 評(píng)論0 收藏0
  • SpringCloud核心教程 | 第三篇:服務(wù)注冊(cè)與發(fā)現(xiàn) Eureka篇

    摘要:下一篇介紹基于的服務(wù)注冊(cè)與調(diào)用。服務(wù)提供者工程配置這里服務(wù)提供者是使用之前進(jìn)階教程第三篇整合連接池以及監(jiān)控改造而來,這里一樣的部分就不再重復(fù)說明,下面將說明新增的部分。 Spring Cloud簡(jiǎn)介 Spring Cloud是一個(gè)基于Spring Boot實(shí)現(xiàn)的云應(yīng)用開發(fā)工具,它為基于JVM的云應(yīng)用開發(fā)中涉及的配置管理、服務(wù)發(fā)現(xiàn)、斷路器、智能路由、微代理、控制總線、全局鎖、決策競(jìng)選、分...

    scq000 評(píng)論0 收藏0
  • Spring Cloud 參考文檔Spring Cloud Context:應(yīng)用程序上下文服務(wù))

    摘要:它們的優(yōu)先級(jí)低于或以及作為創(chuàng)建應(yīng)用程序過程的正常部分添加到子級(jí)的任何其他屬性源。為引導(dǎo)配置類使用單獨(dú)的包名稱,并確保或注解的配置類尚未涵蓋該名稱。在這種情況下,它會(huì)在刷新時(shí)重建,并重新注入其依賴項(xiàng),此時(shí),它們將從刷新的重新初始化。 Spring Cloud Context:應(yīng)用程序上下文服務(wù) Spring Boot有一個(gè)關(guān)于如何使用Spring構(gòu)建應(yīng)用程序的主見,例如,它具有通用配置文...

    魏明 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<