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

資訊專欄INFORMATION COLUMN

Spring Cloud 參考文檔(服務(wù)發(fā)現(xiàn):Eureka客戶端)

awokezhou / 1409人閱讀

摘要:這些發(fā)布在服務(wù)注冊表中,客戶端使用它們以直接的方式聯(lián)系服務(wù),可以將額外元數(shù)據(jù)添加到中的實例注冊中,并且可以在遠(yuǎn)程客戶端中訪問此元數(shù)據(jù)。

服務(wù)發(fā)現(xiàn):Eureka客戶端

服務(wù)發(fā)現(xiàn)是基于微服務(wù)架構(gòu)的關(guān)鍵原理之一,嘗試手動配置每個客戶端或某種形式的約定可能很難做到并且可能很脆弱,Eureka是Netflix Service Discovery服務(wù)器和客戶端,服務(wù)器可以被配置和部署為高可用性,每個服務(wù)器將注冊服務(wù)的狀態(tài)復(fù)制到其他服務(wù)器。

如何包含Eureka客戶端

要在項目中包含Eureka Client,請使用組ID為org.springframework.cloud和工件ID為spring-cloud-starter-netflix-eureka-client的啟動器。

注冊Eureka

當(dāng)客戶端向Eureka注冊時,它會提供有關(guān)自身的元數(shù)據(jù) — 例如主機、端口、健康指示器URL、主頁和其他詳細(xì)信息,Eureka從屬于服務(wù)的每個實例接收心跳消息,如果心跳故障超過可配置的時間表,則通常會從注冊表中刪除該實例。

以下示例顯示了最小的Eureka客戶端應(yīng)用程序:

@SpringBootApplication
@RestController
public class Application {

    @RequestMapping("/")
    public String home() {
        return "Hello world";
    }

    public static void main(String[] args) {
        new SpringApplicationBuilder(Application.class).web(true).run(args);
    }

}

請注意,前面的示例顯示了一個普通的Spring Boot應(yīng)用程序,通過在類路徑上使用spring-cloud-starter-netflix-eureka-client,你的應(yīng)用程序會自動向Eureka Server注冊,找到Eureka服務(wù)器需要進(jìn)行配置,如以下示例所示:

application.yml

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

在前面的示例中,“defaultZone”是一個神奇的字符串回退值,它為任何不表示首選項的客戶端提供服務(wù)URL(換句話說,它是一個有用的默認(rèn)值)。

默認(rèn)應(yīng)用程序名稱(即服務(wù)ID)、虛擬主機和非安全端口(取自Environment)分別是${spring.application.name}${spring.application.name}${server.port}

在類路徑上使用spring-cloud-starter-netflix-eureka-client使應(yīng)用程序成為Eureka“實例”(即,它自己注冊)和“客戶端”(它可以查詢注冊表以查找其他服務(wù)),實例行為由eureka.instance.*配置鍵驅(qū)動,但如果你確保應(yīng)用程序具有spring.application.name的值(這是Eureka服務(wù)ID或VIP的默認(rèn)值),則默認(rèn)值很好。

有關(guān)可配置選項的更多詳細(xì)信息,請參閱EurekaInstanceConfigBean和EurekaClientConfigBean。

要禁用Eureka Discovery Client,可以將eureka.client.enabled設(shè)置為false

使用Eureka Server進(jìn)行身份驗證

如果其中一個eureka.client.serviceUrl.defaultZone URL中嵌入了憑據(jù),則會自動將HTTP基本身份驗證添加到你的eureka客戶端(curl樣式,如下所示:http://user:password@localhost:8761/eureka)。對于更復(fù)雜的需求,你可以創(chuàng)建一個類型為DiscoveryClientOptionalArgs@Bean并將ClientFilter實例注入其中,所有這些都應(yīng)用于從客戶端到服務(wù)器的調(diào)用。

由于Eureka的限制,無法支持每個服務(wù)器基本身份驗證憑據(jù),因此僅使用找到的第一個集合。
狀態(tài)頁面和健康指示器

Eureka實例的狀態(tài)頁面和健康指示器分別默認(rèn)為/info/health,它們是Spring Boot Actuator應(yīng)用程序中有用端點的默認(rèn)位置,如果使用非默認(rèn)上下文路徑或servlet路徑(例如server.servletPath=/custom),則需要更改這些,即使對于Actuator應(yīng)用程序也是如此,以下示例顯示了兩個設(shè)置的默認(rèn)值:

application.yml

eureka:
  instance:
    statusPageUrlPath: ${server.servletPath}/info
    healthCheckUrlPath: ${server.servletPath}/health

這些鏈接顯示在客戶端使用的元數(shù)據(jù)中,并在某些情況下用于決定是否向你的應(yīng)用程序發(fā)送請求,因此如果它們準(zhǔn)確,則會很有幫助。

在Dalston中,還需要在更改管理上下文路徑時設(shè)置狀態(tài)和健康檢查URL,從Edgware開始刪除此要求。
注冊安全應(yīng)用程序

如果你的應(yīng)用程序想通過HTTPS聯(lián)系,你可以在EurekaInstanceConfig中設(shè)置兩個標(biāo)志:

eureka.instance.[nonSecurePortEnabled]=[false]

eureka.instance.[securePortEnabled]=[true]

這樣做會使Eureka發(fā)布顯示對安全通信明確偏好的實例信息,對于以這種方式配置的服務(wù),Spring Cloud DiscoveryClient始終返回以https開頭的URI,同樣,當(dāng)以這種方式配置服務(wù)時,Eureka(本機)實例信息具有安全的健康檢查URL。

由于Eureka在內(nèi)部工作的方式,它仍然會發(fā)布狀態(tài)和主頁的非安全URL,除非你也明確地覆蓋這些URL,你可以使用占位符來配置eureka實例URL,如以下示例所示:

application.yml

eureka:
  instance:
    statusPageUrl: https://${eureka.hostname}/info
    healthCheckUrl: https://${eureka.hostname}/health
    homePageUrl: https://${eureka.hostname}/

請注意,${eureka.hostname}是一個原生占位符,僅在更高版本的Eureka中可用,你也可以使用Spring占位符實現(xiàn)相同的功能 — 例如,使用${eureka.instance.hostName}

如果你的應(yīng)用程序在代理后面運行,并且SSL終止在代理中(例如,如果你在Cloud Foundry或其他平臺中作為服務(wù)運行),然后,你需要確保代理“轉(zhuǎn)發(fā)” headers被應(yīng)用程序攔截和處理。如果嵌入在Spring Boot應(yīng)用程序中的Tomcat容器具有針對X-Forwarded-* headers的顯式配置,則會自動發(fā)生,應(yīng)用程序呈現(xiàn)到自身的鏈接錯誤(錯誤的主機、端口或協(xié)議)表明你的配置錯誤。
Eureka的健康檢查

默認(rèn)情況下,Eureka使用客戶端心跳來確定客戶端是否已啟動,除非另有說明,否則Discovery Client不會根據(jù)Spring Boot Actuator傳播應(yīng)用程序的當(dāng)前健康檢查狀態(tài),因此,在成功注冊后,Eureka始終宣布應(yīng)用程序處于“UP”狀態(tài),通過啟用Eureka健康檢查可以更改此行為,從而將應(yīng)用程序狀態(tài)傳播到Eureka。因此,每個其他應(yīng)用程序都不會向“UP”以外的狀態(tài)下的應(yīng)用程序發(fā)送流量,以下示例顯示如何為客戶端啟用健康檢查:

application.yml

eureka:
  client:
    healthcheck:
      enabled: true
eureka.client.healthcheck.enabled=true應(yīng)該只在application.yml中設(shè)置,在bootstrap.yml中設(shè)置值會導(dǎo)致不良副作用,例如在Eureka中以UNKNOWN狀態(tài)注冊。

如果你需要更多控制健康檢查,請考慮實現(xiàn)自己的com.netflix.appinfo.HealthCheckHandler

實例和客戶端的Eureka元數(shù)據(jù)

值得花一些時間了解Eureka元數(shù)據(jù)的工作原理,因此你可以在平臺中使用它,有用于信息的標(biāo)準(zhǔn)元數(shù)據(jù),如主機名、IP地址、端口號、狀態(tài)頁和健康檢查。這些發(fā)布在服務(wù)注冊表中,客戶端使用它們以直接的方式聯(lián)系服務(wù),可以將額外元數(shù)據(jù)添加到eureka.instance.metadataMap中的實例注冊中,并且可以在遠(yuǎn)程客戶端中訪問此元數(shù)據(jù)。通常,除非客戶端了解元數(shù)據(jù)的含義,否則額外元數(shù)據(jù)不會更改客戶端的行為,本文稍后將介紹幾種特殊情況,其中Spring Cloud已經(jīng)為元數(shù)據(jù)映射賦予了意義。

在Cloud Foundry上使用Eureka

Cloud Foundry有一個全局路由器,因此同一個應(yīng)用程序的所有實例都具有相同的主機名(具有類似架構(gòu)的其他PaaS解決方案),這不一定是使用Eureka的障礙。但是,如果你使用路由器(建議甚至強制使用,具體取決于你的平臺的設(shè)置方式),你需要明確設(shè)置主機名和端口號(安全或非安全),以便他們使用路由器。你可能還希望使用實例元數(shù)據(jù),以便區(qū)分客戶端上的實例(例如,在自定義負(fù)載均衡器中),默認(rèn)情況下,eureka.instance.instanceIdvcap.application.instance_id,如以下示例所示:

application.yml

eureka:
  instance:
    hostname: ${vcap.application.uris[0]}
    nonSecurePort: 80

根據(jù)在Cloud Foundry實例中設(shè)置安全規(guī)則的方式,你可以注冊并使用主機VM的IP地址進(jìn)行直接服務(wù)到服務(wù)調(diào)用,Pivotal Web Services(PWS)尚未提供此功能。

在AWS上使用Eureka

如果計劃將應(yīng)用程序部署到AWS云,則必須將Eureka實例配置為支持AWS,你可以通過自定義EurekaInstanceConfigBean來執(zhí)行此操作,如下所示:

@Bean
@Profile("!default")
public EurekaInstanceConfigBean eurekaInstanceConfig(InetUtils inetUtils) {
  EurekaInstanceConfigBean b = new EurekaInstanceConfigBean(inetUtils);
  AmazonInfo info = AmazonInfo.Builder.newBuilder().autoBuild("eureka");
  b.setDataCenterInfo(info);
  return b;
}
更改Eureka實例ID

一個vanilla Netflix Eureka實例注冊的ID等于其主機名(即每個主機只有一個服務(wù)),Spring Cloud Eureka提供合理的默認(rèn)值,定義如下:

${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${server.port}}}

一個例子是myhost:myappname:8080

通過使用Spring Cloud,你可以通過在eureka.instance.instanceId中提供唯一標(biāo)識符來覆蓋此值,如以下示例所示:

application.yml

eureka:
  instance:
    instanceId: ${spring.application.name}:${vcap.application.instance_id:${spring.application.instance_id:${random.value}}}

使用前面示例中顯示的元數(shù)據(jù)和部署在localhost上的多個服務(wù)實例,將隨機值插入其中以使實例唯一,在Cloud Foundry中,vcap.application.instance_id會自動填充在Spring Boot應(yīng)用程序中,因此不需要隨機值。

使用EurekaClient

一旦你擁有一個發(fā)現(xiàn)客戶端的應(yīng)用程序,就可以使用它從Eureka Server發(fā)現(xiàn)服務(wù)實例,一種方法是使用原生com.netflix.discovery.EurekaClient(而不是Spring Cloud DiscoveryClient),如以下示例所示:

@Autowired
private EurekaClient discoveryClient;

public String serviceUrl() {
    InstanceInfo instance = discoveryClient.getNextServerFromEureka("STORES", false);
    return instance.getHomePageUrl();
}
不要在@PostConstruct方法或@Scheduled方法中使用EurekaClient(或者可能尚未啟動ApplicationContext的任何地方),它在SmartLifecycle中初始化(phase=0),因此最早可以依賴它的是另一個具有更高階段的SmartLifecycle
沒有Jersey的EurekaClient

默認(rèn)情況下,EurekaClient使用Jersey進(jìn)行HTTP通信,如果你希望避免來自Jersey的依賴項,則可以將其從依賴項中排除,Spring Cloud基于Spring RestTemplate自動配置傳輸客戶端,以下示例顯示Jersey被排除在外:


    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-client
    
        
            com.sun.jersey
            jersey-client
        
        
            com.sun.jersey
            jersey-core
        
        
            com.sun.jersey.contribs
            jersey-apache-client4
        
    
原生Netflix EurekaClient的替代品

你無需使用原始Netflix EurekaClient,此外,在某種包裝后面使用它通常更方便,Spring Cloud通過邏輯Eureka服務(wù)標(biāo)識符(VIP)而不是物理URL支持Feign(REST客戶端構(gòu)建器)和Spring RestTemplate。要使用固定的物理服務(wù)器列表配置Ribbon,可以將.ribbon.listOfServers設(shè)置為以逗號分隔的物理地址(或主機名)列表,其中是客戶端的ID。

你還可以使用org.springframework.cloud.client.discovery.DiscoveryClient,它為發(fā)現(xiàn)客戶端提供簡單的API(不特定于Netflix),如以下示例所示:

@Autowired
private DiscoveryClient discoveryClient;

public String serviceUrl() {
    List list = discoveryClient.getInstances("STORES");
    if (list != null && list.size() > 0 ) {
        return list.get(0).getUri();
    }
    return null;
}
為什么注冊服務(wù)這么慢?

作為實例還涉及到注冊表的定期心跳(通過客戶端的serviceUrl),默認(rèn)持續(xù)時間為30秒,在實例、服務(wù)器和客戶端在其本地緩存中都具有相同的元數(shù)據(jù)之前,客戶端無法發(fā)現(xiàn)服務(wù)(因此可能需要3個心跳)。你可以通過設(shè)置eureka.instance.leaseRenewalIntervalInSeconds來更改周期,將其設(shè)置為小于30的值會加快使客戶端連接到其他服務(wù)的過程,在生產(chǎn)中,最好堅持使用默認(rèn)值,因為服務(wù)器中的內(nèi)部計算會對租約續(xù)期做出假設(shè)。

Zones

如果你已將Eureka客戶端部署到多個區(qū)域,你可能希望這些客戶端在嘗試另一個區(qū)域中的服務(wù)之前使用同一區(qū)域內(nèi)的服務(wù),要進(jìn)行此設(shè)置,你需要正確配置Eureka客戶端。

首先,你需要確保將Eureka服務(wù)器部署到每個區(qū)域,并確保它們彼此對等,有關(guān)詳細(xì)信息,請參閱有關(guān)Zones和Regions的部分。

接下來,你需要告訴Eureka你的服務(wù)所在的區(qū)域,你可以使用metadataMap屬性執(zhí)行此操作,例如,如果將service 1部署到zone 1zone 2,則需要在service 1中設(shè)置以下Eureka屬性:

zone 1的service 1

eureka.instance.metadataMap.zone = zone1
eureka.client.preferSameZoneEureka = true

zone 2的service 1

eureka.instance.metadataMap.zone = zone2
eureka.client.preferSameZoneEureka = true
上一篇:Spring Cloud Config Client 下一篇:服務(wù)發(fā)現(xiàn):Eureka Server

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

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

相關(guān)文章

  • Spring Cloud 參考文檔服務(wù)發(fā)現(xiàn)Eureka Server)

    摘要:何時首選地址在某些情況下,最好公布服務(wù)的地址而不是主機名,將設(shè)置為,當(dāng)應(yīng)用程序向注冊時,它使用其地址而不是其主機名。 服務(wù)發(fā)現(xiàn):Eureka Server 本節(jié)介紹如何設(shè)置Eureka服務(wù)器。 如何包含Eureka服務(wù)器 要在項目中包含Eureka Server,請使用組ID為org.springframework.cloud和工件ID為spring-cloud-starter-net...

    BLUE 評論0 收藏0
  • Spring Cloud 參考文檔Spring Cloud Config Client)

    摘要:應(yīng)用程序可以立即利用或應(yīng)用程序開發(fā)人員提供的其他外部屬性源,它還提取了一些與變化事件相關(guān)的額外有用特性。標(biāo)簽也可以以逗號分隔列表的形式提供,在這種情況下,列表中的項目將逐個嘗試,直到成功為止,在處理特性分支時,此行為非常有用。 Spring Cloud Config Client Spring Boot應(yīng)用程序可以立即利用Spring Config Server(或應(yīng)用程序開發(fā)人員提供...

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

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

    scq000 評論0 收藏0
  • Spring Cloud 參考文檔戶端負(fù)載均衡器:Ribbon)

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

    Songlcy 評論0 收藏0

發(fā)表評論

0條評論

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