整合spring cloud云服務(wù)架構(gòu) - eureka 基礎(chǔ)

在構(gòu)建項目之前,我們先學(xué)習(xí)一下eureka常遂,這是官方的講解纳令,我這邊再重新幫大家回顧一下:

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

服務(wù)發(fā)現(xiàn)是基于微服務(wù)架構(gòu)的關(guān)鍵原則之一。嘗試配置每個客戶端或某種形式的約定可能非常困難克胳,可以非常脆弱平绩。Netflix服務(wù)發(fā)現(xiàn)服務(wù)器和客戶端是Eureka∧恚可以將服務(wù)器配置和部署為高可用性馒过,每個服務(wù)器將注冊服務(wù)的狀態(tài)復(fù)制到其他服務(wù)器。

如何包含Eureka客戶端

要在您的項目中包含Eureka客戶端酗钞,請使用組org.springframework.cloud和工件ID spring-cloud-starter-eureka的啟動器腹忽。

注冊Eureka

當(dāng)客戶端注冊Eureka時,它提供關(guān)于自身的元數(shù)據(jù)砚作,例如主機(jī)和端口窘奏,健康指示符URL,主頁等葫录。Eureka從屬于服務(wù)的每個實例接收心跳消息着裹。如果心跳失敗超過可配置的時間表,則通常將該實例從注冊表中刪除米同。

示例eureka客戶端:

@Configuration@ComponentScan@EnableAutoConfiguration@EnableEurekaClient@RestControllerpublic 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)用程序)骇扇。在這個例子中,我們明確地使用@EnableEurekaClient面粮,但只有Eureka可用少孝,你也可以使用@EnableDiscoveryClient。需要配置才能找到Eureka服務(wù)器熬苍。例:

application.yml

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

其中“defaultZone”是一個魔術(shù)字符串后備值稍走,為任何不表示首選項的客戶端提供服務(wù)URL(即它是有用的默認(rèn)值)袁翁。

從Environment獲取的默認(rèn)應(yīng)用程序名稱(服務(wù)ID),虛擬主機(jī)和非安全端口分別為${spring.application.name}婿脸,${spring.application.name}和${server.port}粱胜。

@EnableEurekaClient將應(yīng)用程序同時進(jìn)入一個Eureka“實例”(即注冊自己)和一個“客戶端”(即它可以查詢注冊表以查找其他服務(wù))。實例行為由eureka.instance.*配置鍵驅(qū)動狐树,但是如果您確保您的應(yīng)用程序具有spring.application.name(這是Eureka服務(wù)ID或VIP的默認(rèn)值)焙压,那么默認(rèn)值將是正常的。

使用Eureka服務(wù)器進(jìn)行身份驗證

如果其中一個eureka.client.serviceUrl.defaultZone網(wǎng)址中包含一個憑據(jù)(如http://user:password@localhost:8761/eureka))抑钟,HTTP基本身份驗證將自動添加到您的eureka客戶端冗恨。對于更復(fù)雜的需求,您可以創(chuàng)建DiscoveryClientOptionalArgs類型的@Bean味赃,并將ClientFilter實例注入到其中掀抹,所有這些都將應(yīng)用于從客戶端到服務(wù)器的調(diào)用。

注意

由于Eureka中的限制心俗,不可能支持每個服務(wù)器的基本身份驗證憑據(jù)傲武,所以只能使用第一個找到的集合。

狀態(tài)頁和健康指標(biāo)

Eureka實例的狀態(tài)頁面和運(yùn)行狀況指示器分別默認(rèn)為“/ info”和“/ health”城榛,它們是Spring Boot執(zhí)行器應(yīng)用程序中有用端點(diǎn)的默認(rèn)位置揪利。如果您使用非默認(rèn)上下文路徑或servlet路徑(例如server.servletPath=/foo)或管理端點(diǎn)路徑(例如management.contextPath=/admin),則需要更改這些狠持,即使是執(zhí)行器應(yīng)用程序疟位。例:

application.yml

eureka:

instance:

statusPageUrlPath: ${management.context-path}/info

healthCheckUrlPath: ${management.context-path}/health

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

注冊安全應(yīng)用程序

如果您的應(yīng)用程序想通過HTTPS聯(lián)系正勒,則可以分別在EurekaInstanceConfig得院,即 eureka.instance.[nonSecurePortEnabled,securePortEnabled]=[false,true] 中設(shè)置兩個標(biāo)志。這將使Eureka發(fā)布實例信息顯示安全通信的明確偏好章贞。Spring Cloud DiscoveryClient將始終為以這種方式配置的服務(wù)返回一個https://…?; URI祥绞,并且Eureka(本機(jī))實例信息將具有安全的健康檢查URL。

由于Eureka內(nèi)部的工作方式鸭限,它仍然會發(fā)布狀態(tài)和主頁的非安全網(wǎng)址蜕径,除非您也明確地覆蓋。您可以使用占位符來配置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)用程序在代理服務(wù)器后面運(yùn)行,并且SSL終止服務(wù)在代理中(例如隧甚,如果您運(yùn)行在Cloud Foundry或其他平臺作為服務(wù))车荔,則需要確保代理“轉(zhuǎn)發(fā)”頭部被截取并處理應(yīng)用程序。Spring Boot應(yīng)用程序中的嵌入式Tomcat容器會自動執(zhí)行“X-Forwarded - \ *”標(biāo)頭的顯式配置戚扳。你這個錯誤的一個跡象就是你的應(yīng)用程序本身所呈現(xiàn)的鏈接是錯誤的(錯誤的主機(jī)忧便,端口或協(xié)議)。

Eureka的健康檢查

默認(rèn)情況下帽借,Eureka使用客戶端心跳來確定客戶端是否啟動珠增。除非另有規(guī)定,否則發(fā)現(xiàn)客戶端將不會根據(jù)Spring Boot執(zhí)行器傳播應(yīng)用程序的當(dāng)前運(yùn)行狀況檢查狀態(tài)砍艾。這意味著成功注冊后Eureka將永遠(yuǎn)宣布申請?zhí)幱凇癠P”狀態(tài)蒂教。通過啟用Eureka運(yùn)行狀況檢查可以改變此行為,從而將應(yīng)用程序狀態(tài)傳播到Eureka脆荷。因此凝垛,每個其他應(yīng)用程序?qū)⒉粫凇癠P”之外的狀態(tài)下將流量發(fā)送到應(yīng)用程序。

application.yml

eureka:

client:

healthcheck:

enabled: true

警告

eureka.client.healthcheck.enabled=true只能在application.yml中設(shè)置蜓谋。設(shè)置bootstrap.yml中的值將導(dǎo)致不期望的副作用梦皮,例如在具有UNKNOWN狀態(tài)的eureka中注冊。

如果您需要更多的控制健康檢查桃焕,您可以考慮實施自己的com.netflix.appinfo.HealthCheckHandler剑肯。

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

值得花點(diǎn)時間了解Eureka元數(shù)據(jù)的工作原理,以便您可以在平臺上使用它观堂。有主機(jī)名让网,IP地址,端口號师痕,狀態(tài)頁和運(yùn)行狀況檢查等標(biāo)準(zhǔn)元數(shù)據(jù)寂祥。這些發(fā)布在服務(wù)注冊表中,由客戶使用七兜,以直接的方式聯(lián)系服務(wù)丸凭。額外的元數(shù)據(jù)可以添加到eureka.instance.metadataMap中的實例注冊中,并且這將在遠(yuǎn)程客戶端中可訪問腕铸,但一般不會更改客戶端的行為惜犀,除非意識到元數(shù)據(jù)的含義。下面描述了幾個特殊情況狠裹,其中Spring Cloud已經(jīng)為元數(shù)據(jù)映射指定了含義虽界。

在Cloudfoundry上使用Eureka

Cloudfoundry有一個全局路由器,所以同一個應(yīng)用程序的所有實例都具有相同的主機(jī)名(在具有相似架構(gòu)的其他PaaS解決方案中也是如此)涛菠。這不一定是使用Eureka的障礙莉御,但如果您使用路由器(建議撇吞,甚至是強(qiáng)制性的,具體取決于您的平臺的設(shè)置方式)礁叔,則需要明確設(shè)置主機(jī)名和端口號(安全或非安全)牍颈,以便他們使用路由器。您可能還需要使用實例元數(shù)據(jù)琅关,以便您可以區(qū)分客戶端上的實例(例如煮岁,在自定義負(fù)載平衡器中)。默認(rèn)情況下涣易,eureka.instance.instanceId為vcap.application.instance_id画机。例如:

application.yml

eureka:

instance:

hostname: ${vcap.application.uris[0]}

nonSecurePort: 80

服務(wù)發(fā)現(xiàn):Eureka服務(wù)器

如何包含Eureka服務(wù)器

要在項目中包含Eureka服務(wù)器,請使用組org.springframework.cloud和工件id spring-cloud-starter-eureka-server的啟動器新症。有關(guān) 使用當(dāng)前的Spring Cloud發(fā)布列表設(shè)置構(gòu)建系統(tǒng)的詳細(xì)信息步氏,請參閱Spring Cloud項目頁面。

如何運(yùn)行Eureka服務(wù)器

示例eureka服務(wù)器;

@SpringBootApplication

@EnableEurekaServer

public class Application {

public static void main(String[] args) {

new SpringApplicationBuilder(Application.class).web(true).run(args);

}

}

其他的我就不多講了徒爹,還有很多關(guān)于注冊中心的講解戳护,大家可以去查一下相關(guān)的資料。

從現(xiàn)在開始瀑焦,我這邊會將近期研發(fā)的spring cloud微服務(wù)云架構(gòu)的搭建過程和精髓記錄下來腌且,幫助更多有興趣研發(fā)spring cloud框架的朋友,大家來一起探討spring cloud架構(gòu)的搭建過程及如何運(yùn)用于企業(yè)項目榛瓮。

資料和源碼來源

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末铺董,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子禀晓,更是在濱河造成了極大的恐慌精续,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粹懒,死亡現(xiàn)場離奇詭異重付,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)凫乖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進(jìn)店門确垫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人帽芽,你說我怎么就攤上這事删掀。” “怎么了导街?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵披泪,是天一觀的道長。 經(jīng)常有香客問我搬瑰,道長款票,這世上最難降的妖魔是什么控硼? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮艾少,結(jié)果婚禮上卡乾,老公的妹妹穿的比我還像新娘。我一直安慰自己姆钉,他們只是感情好说订,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布抄瓦。 她就那樣靜靜地躺著潮瓶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪钙姊。 梳的紋絲不亂的頭發(fā)上毯辅,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天,我揣著相機(jī)與錄音煞额,去河邊找鬼思恐。 笑死,一個胖子當(dāng)著我的面吹牛膊毁,可吹牛的內(nèi)容都是我干的胀莹。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼婚温,長吁一口氣:“原來是場噩夢啊……” “哼描焰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起栅螟,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤荆秦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后力图,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體步绸,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年吃媒,在試婚紗的時候發(fā)現(xiàn)自己被綠了瓤介。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡赘那,死狀恐怖惑朦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情漓概,我是刑警寧澤漾月,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站胃珍,受9級特大地震影響梁肿,放射性物質(zhì)發(fā)生泄漏蜓陌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一吩蔑、第九天 我趴在偏房一處隱蔽的房頂上張望钮热。 院中可真熱鬧,春花似錦烛芬、人聲如沸隧期。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽仆潮。三九已至,卻和暖如春遣臼,著一層夾襖步出監(jiān)牢的瞬間性置,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工揍堰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鹏浅,地道東北人。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓屏歹,卻偏偏與公主長得像隐砸,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蝙眶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內(nèi)容