Spring Cloud構(gòu)建微服務(wù)架構(gòu):服務(wù)注冊與發(fā)現(xiàn)(Eureka荤堪、Consul)

Spring Cloud簡介

Spring Cloud是一個基于Spring Boot實現(xiàn)的云應(yīng)用開發(fā)工具,它為基于JVM的云應(yīng)用開發(fā)中涉及的配置管理沼填、服務(wù)發(fā)現(xiàn)桅咆、斷路器、智能路由坞笙、微代理岩饼、控制總線、全局鎖薛夜、決策競選籍茧、分布式會話和集群狀態(tài)管理等操作提供了一種簡單的開發(fā)方式。

Spring Cloud包含了多個子項目(針對分布式系統(tǒng)中涉及的多個不同開源產(chǎn)品)却邓,比如:Spring Cloud Config硕糊、Spring Cloud Netflix院水、Spring Cloud0 CloudFoundry腊徙、Spring Cloud AWS简十、Spring Cloud Security、Spring Cloud Commons撬腾、Spring Cloud Zookeeper螟蝙、Spring Cloud CLI等項目。

微服務(wù)架構(gòu)

“微服務(wù)架構(gòu)”在這幾年非常的火熱民傻,以至于關(guān)于微服務(wù)架構(gòu)相關(guān)的開源產(chǎn)品被反復(fù)的提及(比如:netflix胰默、dubbo),Spring Cloud也因Spring社區(qū)的強大知名度和影響力也被廣大架構(gòu)師與開發(fā)者備受關(guān)注漓踢。

那么什么是“微服務(wù)架構(gòu)”呢牵署?簡單的說,微服務(wù)架構(gòu)就是將一個完整的應(yīng)用從數(shù)據(jù)存儲開始垂直拆分成多個不同的服務(wù)喧半,每個服務(wù)都能獨立部署奴迅、獨立維護、獨立擴展挺据,服務(wù)與服務(wù)間通過諸如RESTful API的方式互相調(diào)用取具。

對于“微服務(wù)架構(gòu)”,大家在互聯(lián)網(wǎng)可以搜索到很多相關(guān)的介紹和研究文章來進行學(xué)習(xí)和了解扁耐。也可以閱讀始祖Martin Fowler的《Microservices》(中文版翻譯點擊查看)暇检,本文不做更多的介紹和描述。

服務(wù)治理

在簡單介紹了Spring Cloud和微服務(wù)架構(gòu)之后婉称,下面回歸本文的主旨內(nèi)容块仆,如何使用Spring Cloud來實現(xiàn)服務(wù)治理。

由于Spring Cloud為服務(wù)治理做了一層抽象接口王暗,所以在Spring Cloud應(yīng)用中可以支持多種不同的服務(wù)治理框架榨乎,比如:Netflix Eureka、Consul瘫筐、Zookeeper蜜暑。在Spring Cloud服務(wù)治理抽象層的作用下,我們可以無縫地切換服務(wù)治理實現(xiàn)策肝,并且不影響任何其他的服務(wù)注冊肛捍、服務(wù)發(fā)現(xiàn)、服務(wù)調(diào)用等邏輯之众。

所以拙毫,下面我們通過介紹兩種服務(wù)治理的實現(xiàn)來體會Spring Cloud這一層抽象所帶來的好處。

Spring Cloud Eureka

首先棺禾,我們來嘗試使用Spring Cloud Eureka來實現(xiàn)服務(wù)治理缀蹄。

Spring Cloud Eureka是Spring Cloud Netflix項目下的服務(wù)治理模塊。而Spring Cloud Netflix項目是Spring Cloud的子項目之一,主要內(nèi)容是對Netflix公司一系列開源產(chǎn)品的包裝缺前,它為Spring Boot應(yīng)用提供了自配置的Netflix OSS整合蛀醉。通過一些簡單的注解,開發(fā)者就可以快速的在應(yīng)用中配置一下常用模塊并構(gòu)建龐大的分布式系統(tǒng)衅码。它主要提供的模塊包括:服務(wù)發(fā)現(xiàn)(Eureka)拯刁,斷路器(Hystrix),智能路由(Zuul)逝段,客戶端負(fù)載均衡(Ribbon)等垛玻。

下面,就來具體看看如何使用Spring Cloud Eureka實現(xiàn)服務(wù)治理奶躯。

創(chuàng)建“服務(wù)注冊中心”

創(chuàng)建一個基礎(chǔ)的Spring Boot工程帚桩,命名為eureka-server,并在pom.xml中引入需要的依賴內(nèi)容:

org.springframework.boot

spring-boot-starter-parent

1.5.4.RELEASE

org.springframework.cloud

spring-cloud-starter-eureka-server

org.springframework.cloud

spring-cloud-dependencies

Dalston.SR1

pom

import

通過@EnableEurekaServer注解啟動一個服務(wù)注冊中心提供給其他應(yīng)用進行對話嘹黔。這一步非常的簡單朗儒,只需要在一個普通的Spring Boot應(yīng)用中添加這個注解就能開啟此功能,比如下面的例子:

@EnableEurekaServer

@SpringBootApplication

publicclassApplication{

publicstaticvoidmain(String[] args){

newSpringApplicationBuilder(Application.class)

.web(true).run(args);

? ? }

}

在默認(rèn)設(shè)置下参淹,該服務(wù)注冊中心也會將自己作為客戶端來嘗試注冊它自己醉锄,所以我們需要禁用它的客戶端注冊行為,只需要在application.properties配置文件中增加如下信息:

spring.application.name=eureka-server

server.port=1001

eureka.instance.hostname=localhost

eureka.client.register-with-eureka=false

eureka.client.fetch-registry=false

為了與后續(xù)要進行注冊的服務(wù)區(qū)分浙值,這里將服務(wù)注冊中心的端口通過server.port屬性設(shè)置為1001恳不。啟動工程后,訪問:http://localhost:1001/开呐,可以看到下面的頁面烟勋,其中還沒有發(fā)現(xiàn)任何服務(wù)。

創(chuàng)建“服務(wù)提供方”

下面我們創(chuàng)建提供服務(wù)的客戶端筐付,并向服務(wù)注冊中心注冊自己卵惦。本文我們主要介紹服務(wù)的注冊與發(fā)現(xiàn),所以我們不妨在服務(wù)提供方中嘗試著提供一個接口來獲取當(dāng)前所有的服務(wù)信息瓦戚。

首先沮尿,創(chuàng)建一個基本的Spring Boot應(yīng)用。命名為eureka-client较解,在pom.xml中畜疾,加入如下配置:

org.springframework.boot

spring-boot-starter-parent

1.5.4.RELEASE

org.springframework.cloud

spring-cloud-starter-eureka

org.springframework.boot

spring-boot-starter-web

org.springframework.cloud

spring-cloud-dependencies

Dalston.SR1

pom

import

其次,實現(xiàn)/dc請求處理接口印衔,通過DiscoveryClient對象啡捶,在日志中打印出服務(wù)實例的相關(guān)內(nèi)容。

@RestController

publicclassDcController{

@Autowired

? ? DiscoveryClient discoveryClient;

@GetMapping("/dc")

publicStringdc(){

String services ="Services: "+ discoveryClient.getServices();

? ? ? ? System.out.println(services);

returnservices;

? ? }

}

最后在應(yīng)用主類中通過加上@EnableDiscoveryClient注解奸焙,該注解能激活Eureka中的DiscoveryClient實現(xiàn)瞎暑,這樣才能實現(xiàn)Controller中對服務(wù)信息的輸出彤敛。

@EnableDiscoveryClient

@SpringBootApplication

publicclassApplication{

publicstaticvoidmain(String[] args){

newSpringApplicationBuilder(

? ? ? ? ? ? ComputeServiceApplication.class)

.web(true).run(args);

? ? }

}

我們在完成了服務(wù)內(nèi)容的實現(xiàn)之后,再繼續(xù)對application.properties做一些配置工作了赌,具體如下:

spring.application.name=eureka-client

server.port=2001

eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/

通過spring.application.name屬性墨榄,我們可以指定微服務(wù)的名稱后續(xù)在調(diào)用的時候只需要使用該名稱就可以進行服務(wù)的訪問。eureka.client.serviceUrl.defaultZone屬性對應(yīng)服務(wù)注冊中心的配置內(nèi)容揍拆,指定服務(wù)注冊中心的位置渠概。為了在本機上測試區(qū)分服務(wù)提供方和服務(wù)注冊中心茶凳,使用server.port屬性設(shè)置不同的端口嫂拴。

啟動該工程后,再次訪問:http://localhost:1001/贮喧⊥埠荩可以如下圖內(nèi)容,我們定義的服務(wù)被成功注冊了箱沦。

當(dāng)然辩恼,我們也可以通過直接訪問eureka-client服務(wù)提供的/dc接口來獲取當(dāng)前的服務(wù)清單,只需要訪問:http://localhost:2001/dc谓形,我們可以得到如下輸出返回:

Services: [eureka-client]

其中灶伊,方括號中的eureka-client就是通過Spring Cloud定義的DiscoveryClient接口在eureka的實現(xiàn)中獲取到的所有服務(wù)清單。由于Spring Cloud在服務(wù)發(fā)現(xiàn)這一層做了非常好的抽象寒跳,所以聘萨,對于上面的程序,我們可以無縫的從eureka的服務(wù)治理體系切換到consul的服務(wù)治理體系中區(qū)童太。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末米辐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子书释,更是在濱河造成了極大的恐慌翘贮,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件爆惧,死亡現(xiàn)場離奇詭異狸页,居然都是意外死亡,警方通過查閱死者的電腦和手機扯再,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門肴捉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人叔收,你說我怎么就攤上這事齿穗。” “怎么了饺律?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵窃页,是天一觀的道長。 經(jīng)常有香客問我,道長脖卖,這世上最難降的妖魔是什么乒省? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮畦木,結(jié)果婚禮上袖扛,老公的妹妹穿的比我還像新娘。我一直安慰自己十籍,他們只是感情好蛆封,可當(dāng)我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著勾栗,像睡著了一般惨篱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上围俘,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天砸讳,我揣著相機與錄音,去河邊找鬼界牡。 笑死簿寂,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的宿亡。 我是一名探鬼主播常遂,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼她混!你這毒婦竟也來了烈钞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤坤按,失蹤者是張志新(化名)和其女友劉穎毯欣,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體臭脓,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡酗钞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了来累。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砚作。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖嘹锁,靈堂內(nèi)的尸體忽然破棺而出葫录,到底是詐尸還是另有隱情,我是刑警寧澤领猾,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布米同,位于F島的核電站骇扇,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏面粮。R本人自食惡果不足惜少孝,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望熬苍。 院中可真熱鬧稍走,春花似錦、人聲如沸柴底。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽似枕。三九已至盖淡,卻和暖如春年柠,著一層夾襖步出監(jiān)牢的瞬間凿歼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工冗恨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留答憔,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓掀抹,卻偏偏與公主長得像虐拓,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子傲武,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,619評論 2 354

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