spring cloud 學(xué)習(xí)筆記(Ⅰ):Eureka服務(wù)器的配置

  • 系統(tǒng)環(huán)境:win10 + java8 + spring boot 2.1.3.RELEASE + spring cloud Greenwich.RELEASE

注意:版本不一致的情況下可能需要的依賴會(huì)有細(xì)微差別,具體需要根據(jù)官網(wǎng)文檔進(jìn)行配置依賴

  • IDE: eclipse
  • 配置服務(wù)器的過程不多贅述(本文比較精簡)孤澎,主要的配置項(xiàng)將會(huì)連同注釋一并在代碼塊中貼出
建立主工程

推薦通過 https://start.spring.io/ 來配置自己的maven工程,配置完畢后將下載的壓縮包解壓導(dǎo)入即可完成初始的spring boot項(xiàng)目

建立各種微服務(wù)工程

同樣通過 https://start.spring.io/ 來配置自己的微服務(wù)工程糊闽,根據(jù)自己需要配置多個(gè)微服務(wù)工程马篮。如下圖:

start.spring.io

在Dependencies中可以搜索并且添加需要的基礎(chǔ)依賴包。

spring cloud工程的配置

這里推薦使用yaml文件進(jìn)行配置文件的配置。
具體配置將會(huì)在下文中的代碼塊中貼出芥永。

搭建微服務(wù)集群

集群簡而言之就是很多的微服務(wù)所形成的服務(wù)群聚蝶,所有的微服務(wù)應(yīng)該注冊在注冊中心中杰妓,spring全家桶提供了Eureka來作為我們的注冊中心,Eureka注冊中心可以同時(shí)為微服務(wù)客戶端和微服務(wù)服務(wù)器兩個(gè)角色碘勉。如果我們將兩個(gè)Eureka服務(wù)器相互注冊巷挥,那么我們就擁有了一個(gè)高可用的微服務(wù)注冊中心,所謂高可用验靡,就是當(dāng)一個(gè)微服務(wù)down掉之后句各,另一個(gè)微服務(wù)繼續(xù)正常工作,從而防止整個(gè)網(wǎng)站down掉晴叨。

創(chuàng)建注冊中心需要我們在pom.xml中引入Eureka相關(guān)的包:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

在初期我們創(chuàng)建工程的時(shí)候在選擇依賴(Dependencies)的時(shí)候就可以將需要的包引入凿宾,這里不再贅述。

作為服務(wù)器兼蕊,我們需要在啟動(dòng)類上加入相關(guān)注解:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class ServiceServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ServiceServerApplication.class, args);
    }

}

@EnableEurekaServer注解聲明了這是一個(gè)Eureka服務(wù)器初厚,可以作為注冊中心使用。當(dāng)然只配置注解是不夠的孙技,我們也需要在application.yaml配置文件中配置注冊中心:

spring:
  application:
    name: service-server  #上下(多個(gè)實(shí)例的情況下)的spring.application.name必須一致产禾,這里的application.name同時(shí)也是配置文件映射的name (在注冊中心中顯示的name)
  profiles: server-8888
server:
  port: 8888                        #服務(wù)管理中心端口
eureka:
  client:
    #是否將自己注冊到Eureka Server上,默認(rèn)為true
    #register-with-eureka: false     #(單節(jié)點(diǎn)時(shí)設(shè)置false)防止將自己當(dāng)作客戶端去注冊從而引發(fā)Cannot execute request on any known server 問題 
    #fetch-registry: false           #同上
    service-url:  #注冊中心的url,后續(xù)的微服務(wù)都要注冊到這個(gè)url上
      defaultZone: http://server-9999:9999/eureka/  #默認(rèn)使用8761端口牵啦,需要手動(dòng)覆蓋成自己的亚情,注意url中需要加端口,查詢服務(wù)和注冊服務(wù)都需要依賴這個(gè)地址哈雏。這里注冊的是9999的實(shí)例楞件,因?yàn)榉?wù)器本身也是個(gè)客戶端,在有多個(gè)服務(wù)器節(jié)點(diǎn)的情況下裳瘪,可以相互注冊土浸,相互注冊的注冊中心會(huì)將對方注冊在中心的所有微服務(wù)拷貝到自己的注冊中心下,實(shí)現(xiàn)高可用彭羹。這里有兩個(gè)節(jié)點(diǎn)黄伊,所以可以直接將服務(wù)器自己注冊到9999的實(shí)例上。不配置這項(xiàng)的話派殷,本注冊中心就不會(huì)注冊到其它注冊中心中还最,只能作為自己獨(dú)立的服務(wù)器提供注冊服務(wù)墓阀。
  instance:
    hostname: server-8888  #實(shí)例的 host名,可以使用hostname來代替ip地址拓轻,如上方的defaultZone配置斯撮,這里默認(rèn)的hostname是讀取的本機(jī)的ip地址:localhost,server-8888只是一個(gè)別名
---
#第二個(gè)實(shí)例,在學(xué)習(xí)或者測試環(huán)境中悦即,可以通過[---]在yaml中配置多個(gè)啟動(dòng)實(shí)例吮成,同時(shí)在eclipse的 boot dashboard中也要右鍵增加實(shí)例配置(open config)
spring:
  application:
    name: service-server
  profiles: server-9999
server:
  port: 9999                        #服務(wù)管理中心端口
eureka:
  client:
    #register-with-eureka: false     #(單節(jié)點(diǎn)時(shí)設(shè)置false)防止將自己當(dāng)作客戶端去注冊從而引發(fā)Cannot execute request on any known server 問題
    #fetch-registry: false           #同上
    service-url:
      defaultZone: http://server-8888:8888/eureka/  #默認(rèn)使用8761,需要手動(dòng)覆蓋成自己的
  instance:
    hostname: server-9999

在完成上述配置后辜梳,直接在啟動(dòng)類或者boot dashboard中右鍵啟動(dòng)即可粱甫,在瀏覽器中輸入 http://localhost:8888/ 或者(需要先啟動(dòng)) http://localhost:9999/即可進(jìn)入注冊中心管理。
簡略圖如下:

dashboard

添加多個(gè)boot實(shí)例時(shí)作瞄,只需要在對應(yīng)的實(shí)例上右鍵-> open config即可茶宵,點(diǎn)開配置后如下:
配置多實(shí)例

注意:初次添加的時(shí)候可能需要手動(dòng)輸入profile和main type
服務(wù)器的配置比較簡單,后續(xù)沒有其它特殊需求的話宗挥,默認(rèn)的功能基本足夠練習(xí)或者一般性的開發(fā)使用乌庶。

啟動(dòng)一個(gè)實(shí)例后,如果出現(xiàn) connection refused或者下圖的異常不用驚慌:

單服務(wù)器異常

上文的代碼中有注釋契耿,單服務(wù)器同樣也是客戶端瞒大,只啟動(dòng)自己的情況下,注冊中心沒有任何服務(wù)搪桂,并且會(huì)默認(rèn)將自己注冊透敌,register-with-eureka = false fetch-registry: false即可取消將自己注冊,因?yàn)樾枰罱旱年P(guān)系踢械,這里不推薦修改默認(rèn)值酗电,所以可以暫時(shí)無視這個(gè)異常能耻。
進(jìn)入啟動(dòng)的注冊中心后臺(tái):
8888端口的注冊中心

注意: 注冊中心會(huì)按照默認(rèn)時(shí)間間隔(如果沒有自定義配置的話)進(jìn)行心跳刷新藏研,在沒有任何服務(wù)心跳的情況下會(huì)出現(xiàn)紅色字體的警告,服務(wù)器會(huì)進(jìn)入保護(hù)狀態(tài)卒落。
有以下幾個(gè)特征:

  • 自我保護(hù)機(jī)制的工作機(jī)制是如果在15分鐘內(nèi)超過85%的客戶端節(jié)點(diǎn)都沒有正常的心跳
  • Eureka Server不再從注冊列表中移除因?yàn)殚L時(shí)間沒收到心跳而應(yīng)該過期的服務(wù)话瞧。
  • Eureka Server仍然能夠接受新服務(wù)的注冊和查詢請求嫩与,但是不會(huì)被同步到其它節(jié)點(diǎn)上,保證當(dāng)前節(jié)點(diǎn)依然可用(可以認(rèn)為一個(gè)服務(wù)器就是一個(gè)節(jié)點(diǎn)移稳。多節(jié)點(diǎn)組成集群)蕴纳。
  • 當(dāng)網(wǎng)絡(luò)穩(wěn)定時(shí),當(dāng)前Eureka Server新的注冊信息會(huì)被同步到其它節(jié)點(diǎn)中个粱。
    對于這個(gè)警告,解決的辦法很簡單翻翩,只要注冊一個(gè)服務(wù)進(jìn)去就可以了都许,因?yàn)楸酒侵v述服務(wù)器配置稻薇,所以我們再開啟一個(gè)服務(wù)器實(shí)例(server-9999)互相注冊即可:


    啟動(dòng)兩個(gè)服務(wù)器實(shí)例

    此時(shí),通過控制臺(tái)可以看到胶征,之前的異常也不再出現(xiàn)塞椎,在微服務(wù)正常注冊后,兩個(gè)問題全部解決睛低。


    控制臺(tái)(可以切換兩個(gè)服務(wù)的控制臺(tái)查看日志信息)

    進(jìn)入localhost:9999后案狠,在實(shí)例的注冊中心后臺(tái)可以看到:
    9999端口的注冊中心后臺(tái)

    8888端口的注冊中心后臺(tái)

紅色警告消除,由于服務(wù)器相互注冊钱雷,DS Replicas會(huì)顯示對方服務(wù)器的信息(server-8888或者server-9999)骂铁,同時(shí)也會(huì)從該副本中拷貝所有的服務(wù)信息,形成雙節(jié)點(diǎn)罩抗。圖中同樣看到拉庵,SERVICE-SERVER已經(jīng)注冊在注冊中心中,并且有兩個(gè)可達(dá)區(qū)域(2個(gè)實(shí)例)套蒂。
注意:兩個(gè)實(shí)例的名字必須相同钞支,即yaml配置文件中的spring.application.name需要一致才能形成負(fù)載均衡(后續(xù)文章會(huì)講述)。

文章會(huì)根據(jù)最新的情況以及開發(fā)經(jīng)驗(yàn)持續(xù)更新操刀。烁挟。。


本文是根據(jù)本人的代碼以及工作時(shí)的搭建經(jīng)驗(yàn)反推的文字說明(基于個(gè)人理解)骨坑,可能論述并不精確撼嗓,僅作參考。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末卡啰,一起剝皮案震驚了整個(gè)濱河市静稻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌匈辱,老刑警劉巖振湾,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異亡脸,居然都是意外死亡押搪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進(jìn)店門浅碾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來大州,“玉大人,你說我怎么就攤上這事垂谢∠没” “怎么了?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長根暑。 經(jīng)常有香客問我力试,道長,這世上最難降的妖魔是什么排嫌? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任畸裳,我火速辦了婚禮,結(jié)果婚禮上淳地,老公的妹妹穿的比我還像新娘怖糊。我一直安慰自己,他們只是感情好颇象,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布伍伤。 她就那樣靜靜地躺著,像睡著了一般夯到。 火紅的嫁衣襯著肌膚如雪嚷缭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天耍贾,我揣著相機(jī)與錄音阅爽,去河邊找鬼。 笑死荐开,一個(gè)胖子當(dāng)著我的面吹牛付翁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播晃听,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼百侧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了能扒?” 一聲冷哼從身側(cè)響起佣渴,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎初斑,沒想到半個(gè)月后辛润,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡见秤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年砂竖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鹃答。...
    茶點(diǎn)故事閱讀 39,739評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乎澄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出测摔,到底是詐尸還是另有隱情置济,我是刑警寧澤,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站舟肉,受9級特大地震影響修噪,放射性物質(zhì)發(fā)生泄漏查库。R本人自食惡果不足惜路媚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望樊销。 院中可真熱鬧整慎,春花似錦、人聲如沸围苫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽剂府。三九已至拧揽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間腺占,已是汗流浹背淤袜。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留衰伯,地道東北人铡羡。 一個(gè)月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像意鲸,于是被迫代替她去往敵國和親烦周。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評論 2 354