SpringCloud 入門3 - Eureka的高可用及 EurekaClient端初始化

微服務中 Eureka 擔當著注冊中心的角色果漾,全部服務節(jié)點都需要找它注冊,這么重要的應用虹曙,肯定是不可能單點的迫横,不然掛了怎么辦。

一酝碳、如何實現(xiàn)多個一份代碼多個實例矾踱?

大家最常用的可能就是直接跑3個實例,分配不同的端口疏哗。
在服務器還好呛讲,但是在本地,你同時用IDE 跑3個實例返奉,那就太浪費電腦資源了贝搁。而且每次重啟項目,都需要改一大堆配置文件芽偏,這樣真的好雷逆?

其實 SpringBoot 是支持多個環(huán)境的,我們可以開發(fā)環(huán)境一個配置文件污尉,生產(chǎn)環(huán)境另一個配置文件膀哲,這樣往产,我們只需要在啟動的時候指定好對應的環(huán)境,就可以不用把配置文件改來改去了某宪。
應用到這個項目里仿村,我們也可以做到一份代碼,通過不同的啟動命令兴喂,分別啟動3個實例蔼囊。

1、首先我們把配置文件復制3份瞻想,名字分別改成application-eureka1.yml、application-eureka2.yml娩嚼、application-eureka3.yml


注意:這里是有格式要求的蘑险,必須是 application-環(huán)境名.yml (通常我們開發(fā)的時候會改成 dev 和 prod,dev為開發(fā)環(huán)境岳悟,prod 為生產(chǎn)環(huán)境佃迄,特殊情況下還有 test 測試環(huán)境)。

2贵少、改各自配置文件的內(nèi)容

#
# Eureka1
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8762/eureka/,http://localhost:8763/eureka/ #向其他兩個Eureka注冊
    register-with-eureka: false #不顯示在注冊中心頁面
spring:
  application:
    name: eureka1
server:
  port: 8761
# Eureka2
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/,http://localhost:8763/eureka/ #向其他兩個Eureka注冊
    register-with-eureka: false #不顯示在注冊中心頁面
spring:
  application:
    name: eureka2
server:
  port: 8762
# Eureka3
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/ #向其他兩個Eureka注冊
    register-with-eureka: false #不顯示在注冊中心頁面
spring:
  application:
    name: eureka3
server:
  port: 8763

3呵俏、 pom.xml 文件里面,添加對應的配置

<!--配置環(huán)境的profile-->
    <profiles>
        <profile>
            <id>eureka1</id>
            <properties>
                <environment>eureka1</environment>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>  <!--如果沒指定環(huán)境滔灶,默認為該環(huán)境-->
            </activation>
        </profile>
        <profile>
            <id>eureka2</id>
            <properties>
                <environment>eureka2</environment>
            </properties>
        </profile>
        <profile>
            <id>eureka3</id>
            <properties>
                <environment>eureka3</environment>
            </properties>
        </profile>
    </profiles>

4普碎、打包啟動(Maven打包什么的,請你自己搞定)

這里我們就不需要用 IDE 啟動了录平,我們直接通過腳本或者命令行啟動就行了麻车,這樣比較不占內(nèi)存,而且還可以后臺啟動
打開你們的終端(我這里用的是 powerShell斗这,win10 的同學建議使用 )

cd E:\DemoProdect\SpringCloud\eureka #進入到項目目錄
java -jar  .\target\eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=eureka1 #通過java命令啟動程序

我們直接用 --spring.profiles.active 來指定我們所使用的環(huán)境(也就是配置文件)动猬。

這樣啟動還是太麻煩了,我們可以把它寫成腳本


新建一個文本表箭,寫入這兩行命令赁咙,然后另存為.ps1 文件,我們就可以直接在win10下啟動了免钻,我們只要把
eureka1 改成 eureka2 和 eureka3 就得到3個啟動腳本彼水,linux 和 mac 的同學可以另存為 .sh 文件(注意路徑)。



雙擊打開就啟動項目



三個不同的端口极舔,說明環(huán)境配置成功了猿涨,我們打開頁面看看



三個 Eureka 都分別向另外兩個注冊,再也不怕某個 Eureka實例掛掉了姆怪,我們還可以寫個定時腳本定時檢測他們的狀態(tài)并報警叛赚,這樣就更穩(wěn)當了澡绩,有興趣的可以自己研究一下。

二俺附、構建 Eureka Client

構建 Eureka Client 的過程和 上一章構建 Eureka Server 大致一樣肥卡,只是有兩點需要注意的
1、 這里選的是 Eureka Discovery (不是Server)



2事镣、這里的注解是@EnableDiscoveryClient

package com.show.client;
@SpringBootApplication
@EnableDiscoveryClient // 指定自己是Client端
public class ClientApplication {
  public static void main(String[] args) {
    SpringApplication.run(ClientApplication.class, args);
  }
}

大致的過程就是 新建項目 -> 選擇Eureka Discovery -> 把pom文件里面的版本和 server 一致 -> 修改配置文件
application.yml -> 啟動

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/,http://localhost:8763/eureka/
spring:
  application:
    name: client

這樣步鉴,client 端就初始化完成了。

三璃哟、Eureka總結

1氛琢、@EnableEurekaServer 和 @EnableDiscoveryClient
2、@EnableDiscoveryServer 會讓該實例變成注冊中心随闪,擁有注冊功能阳似,各個服務節(jié)點啟動后,會在 Eureka Server 進行注冊铐伴,這樣 Eureka Server 就有了所有服務節(jié)點的信息
3撮奏、Eureka Server 會有心跳檢測、健康檢查当宴、負載均衡等功能
4畜吊、Eureka 的高可用,生產(chǎn)上建議至少兩臺以上户矢,保證注冊中心的穩(wěn)定運行
5玲献、分布式系統(tǒng)中,服務注冊中心是最重要的基礎部分

四梯浪、分布式下服務注冊的地位和原理

1青自、分布式系統(tǒng)中為什么需要服務發(fā)現(xiàn)?

傳統(tǒng)分布式服務中驱证,我們會使用負載均衡(nginx延窜、apache)來把流量或者不同的請求分發(fā)到不同的實例節(jié)點B,但是假如實例節(jié)點B多起來抹锄,這樣負載均衡的配置文件逆瑞,將會變得未必復雜,而且還要針對不同的實例寫不同的配置伙单。 而且負載均衡是不會管實例狀態(tài)的获高,如果實例掛了,負載均衡就只會直接返回404吻育,找不到該路徑念秧。
這樣時候,我們就可以使用注冊中心布疼,把不同的實例節(jié)點B摊趾,全部注冊到注冊中心里面币狠,當其它節(jié)點需要調(diào)用B的服務時,直接找注冊中心拿該節(jié)點的服務地址就好了砾层。
這里看起來和負載均衡一樣漩绵,但是兩個對比使用后,你就會發(fā)現(xiàn)不一樣了

1肛炮、當B節(jié)點的端口和路徑改變的時候止吐,負載均衡是需要改配置文件,重啟侨糟。注冊中心不需要碍扔。
2、負載均衡主要負責的是負載和轉發(fā)秕重,而注冊中心還可以健康檢查不同、心跳檢測(最簡單的體驗就是,你想知道這個實例是否正常悲幅,找負載均衡是沒用的套鹅。但是你可以在注冊中心頁面看到該實例是否已經(jīng)注冊站蝠,已注冊說明他是能正常提供服務的)


負載均衡

注冊中心

因此汰具,分布式系統(tǒng)中,服務注冊中心是最重要的基礎部分菱魔,隨時都應該處于提供服務的狀態(tài)留荔。

2、服務器發(fā)現(xiàn)與客戶端發(fā)現(xiàn)

客戶端發(fā)現(xiàn)

A需要調(diào)用B的服務澜倦,找注冊中心的時候聚蝶,注冊中心會把B的所有節(jié)點信息交給A,A自行確定調(diào)用哪個B節(jié)點提供服務(輪詢藻治、hash等...)碘勉,這個叫客戶端發(fā)現(xiàn)。
優(yōu)點:A可以知道所有B可用服務的地址桩卵,沒有中間商賺差價
缺點:需要自己實現(xiàn)一套邏輯篩選出一個B節(jié)點來提供服務
例: Eureka

服務端發(fā)現(xiàn)

A需要調(diào)用B服務验靡,找注冊中心的時候,注冊中心會把B所有節(jié)點信息交給"代理"雏节,"代理"再挑一個節(jié)點(輪詢胜嗓、hash等...)告訴A,讓A調(diào)用钩乍,這個叫服務端發(fā)現(xiàn)辞州。
優(yōu)點:B節(jié)點對于A是不可見的,A只需要說要什么服務即可
缺點:需要經(jīng)過一層代理寥粹,又需要配多一份配置
例: Nginx变过、Zookeeper 埃元、Kubernetes

服務端發(fā)現(xiàn)

3、原理

微服務的特點就是"異構"牵啦,也就是可以用不同的語言亚情,不同類型的數(shù)據(jù)來提供服務,SpringCloud的服務調(diào)用方式是基于 Rest 哈雏,如果其他語言需要直接注冊到 Eureka 中的話楞件,就需要自己實現(xiàn)一個Eureka 客戶端程序,比如目前 Node.js 實現(xiàn)了一套 eureka-js-client 裳瘪。如果其他語言需要寫一個 Eureka 客戶端程序土浸,只需要調(diào)用Eureka對應的 Rest 接口即可。

GitHub:https://github.com/MrXuan3168/springCloud/tree/springCloud-3

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末彭羹,一起剝皮案震驚了整個濱河市黄伊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌派殷,老刑警劉巖还最,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異毡惜,居然都是意外死亡拓轻,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門经伙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扶叉,“玉大人,你說我怎么就攤上這事帕膜≡嫜酰” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵垮刹,是天一觀的道長达吞。 經(jīng)常有香客問我,道長荒典,這世上最難降的妖魔是什么酪劫? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮种蝶,結果婚禮上契耿,老公的妹妹穿的比我還像新娘。我一直安慰自己螃征,他們只是感情好搪桂,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般踢械。 火紅的嫁衣襯著肌膚如雪酗电。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天内列,我揣著相機與錄音撵术,去河邊找鬼。 笑死话瞧,一個胖子當著我的面吹牛嫩与,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播交排,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼划滋,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了埃篓?” 一聲冷哼從身側響起处坪,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎架专,沒想到半個月后同窘,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡部脚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年想邦,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片睛低。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡案狠,死狀恐怖服傍,靈堂內(nèi)的尸體忽然破棺而出钱雷,到底是詐尸還是另有隱情,我是刑警寧澤吹零,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布罩抗,位于F島的核電站,受9級特大地震影響灿椅,放射性物質發(fā)生泄漏套蒂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一茫蛹、第九天 我趴在偏房一處隱蔽的房頂上張望操刀。 院中可真熱鬧,春花似錦婴洼、人聲如沸骨坑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽欢唾。三九已至且警,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間礁遣,已是汗流浹背斑芜。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留祟霍,地道東北人杏头。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像沸呐,于是被迫代替她去往敵國和親大州。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

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