Spring Cloud Consul:服務(wù)治理與配置中心

Spring Cloud Consul 為 SpringBoot 應(yīng)用提供了 Consul的支持,Consul既可以作為注冊中心使用拄显,也可以作為配置中心使用,本文將對其用法進行詳細介紹碱工。

Consul 簡介

Consul是HashiCorp公司推出的開源軟件沼琉,提供了微服務(wù)系統(tǒng)中的服務(wù)治理北苟、配置中心、控制總線等功能打瘪。這些功能中的每一個都可以根據(jù)需要單獨使用友鼻,也可以一起使用以構(gòu)建全方位的服務(wù)網(wǎng)格,總之Consul提供了一種完整的服務(wù)網(wǎng)格解決方案闺骚。

Spring Cloud Consul 具有如下特性:

支持服務(wù)治理:Consul作為注冊中心時彩扔,微服務(wù)中的應(yīng)用可以向Consul注冊自己,并且可以從Consul獲取其他應(yīng)用信息僻爽;

支持客戶端負責均衡:包括Ribbon和Spring Cloud LoadBalancer虫碉;

支持Zuul:當Zuul作為網(wǎng)關(guān)時,可以從Consul中注冊和發(fā)現(xiàn)應(yīng)用胸梆;

支持分布式配置管理:Consul作為配置中心時敦捧,使用鍵值對來存儲配置信息;

支持控制總線:可以在整個微服務(wù)系統(tǒng)中通過 Control Bus 分發(fā)事件消息碰镜。

使用Consul作為注冊中心

安裝并運行Consul

首先我們從官網(wǎng)下載Consul兢卵,地址:https://www.consul.io/downloads.html

下載完成后只有一個exe文件,雙擊運行绪颖;

在命令行中輸入以下命令可以查看版本號:

consul --versionCopy to clipboardErrorCopied

查看版本號信息如下:

Consul v1.6.1Protocol2spoken by default, understands2to3(agent will automatically use protocol>2when speaking to compatible agents)Copy to clipboardErrorCopied

使用開發(fā)模式啟動:

consul agent -dev Copy to clipboardErrorCopied

通過以下地址可以訪問Consul的首頁:http://localhost:8500

創(chuàng)建應(yīng)用注冊到Consul

我們通過改造user-service和ribbon-service來演示下服務(wù)注冊與發(fā)現(xiàn)的功能秽荤,主要是將應(yīng)用原來的Eureka注冊中心支持改為Consul注冊中心支持。

創(chuàng)建consul-user-service模塊和consul-ribbon-service模塊;

修改相關(guān)依賴王滤,把原來的Eureka注冊發(fā)現(xiàn)的依賴改為Consul的,并添加SpringBoot Actuator的依賴:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>Copy to clipboardErrorCopied

修改配置文件application.yml滓鸠,將Eureka的注冊發(fā)現(xiàn)配置改為Consul的:

server:

? port: 8206

spring:

? application:

? ? name: consul-user-service

? cloud:

? ? consul: #Consul服務(wù)注冊發(fā)現(xiàn)配置

? ? ? host: localhost

? ? ? port: 8500

? ? ? discovery:

? ? ? ? service-name: ${spring.application.name}Copy to clipboardErrorCopied

運行兩個consul-user-service和一個consul-ribbon-service雁乡,在Consul頁面上可以看到如下信息:

負載均衡功能

由于我們運行了兩個consul-user-service,而consul-ribbon-service默認會去調(diào)用它的接口糜俗,我們調(diào)用consul-ribbon-service的接口來演示下負載均衡功能踱稍。

多次調(diào)用接口:http://localhost:8308/user/1?,可以發(fā)現(xiàn)兩個consul-user-service的控制臺交替打印如下信息悠抹。

2019-10-2010:39:32.580? INFO12428---[io-8206-exec-10]c.macro.cloud.controller.UserController:根據(jù)id獲取用戶信息珠月,用戶名稱為:macroCopy to clipboardErrorCopied

使用Consul作為配置中心

我們通過創(chuàng)建consul-config-client模塊,并在Consul中添加配置信息來演示下配置管理的功能楔敌。

創(chuàng)建consul-config-client模塊

在pom.xml中添加相關(guān)依賴:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-config</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId></dependency>Copy to clipboardErrorCopied

添加配置文件application.yml啤挎,啟用的是dev環(huán)境的配置:

spring:

? profiles:

? ? active: devCopy to clipboardErrorCopied

添加配置文件bootstrap.yml,主要是對Consul的配置功能進行配置:

server:

? port: 9101

spring:

? application:

? ? name: consul-config-client

? cloud:

? ? consul:

? ? ? host: localhost

? ? ? port: 8500

? ? ? discovery:

? ? ? ? serviceName: consul-config-client

? ? ? config:

? ? ? ? enabled: true #是否啟用配置中心功能

? ? ? ? format: yaml #設(shè)置配置值的格式

? ? ? ? prefix: config #設(shè)置配置所在目錄

? ? ? ? profile-separator: ':' #設(shè)置配置的分隔符

? ? ? ? data-key: data #配置key的名字卵凑,由于Consul是K/V存儲庆聘,配置存儲在對應(yīng)K的V中Copy to clipboardErrorCopied

創(chuàng)建ConfigClientController,從Consul配置中心中獲取配置信息:

/**

* Created by macro on 2019/9/11.

*/@RestController@RefreshScopepublicclassConfigClientController{@Value("${config.info}")privateStringconfigInfo;@GetMapping("/configInfo")publicStringgetConfigInfo(){returnconfigInfo;}}Copy to clipboardErrorCopied

在Consul中添加配置

在consul中添加配置存儲的key為:

config/consul-config-client:dev/dataCopy to clipboardErrorCopied

在consul中添加配置存儲的value為:

config:

? info: "config info for dev"Copy to clipboardErrorCopied

存儲信息截圖如下:

啟動consul-config-client勺卢,調(diào)用接口查看配置信息:http://localhost:9101/configInfo

config infofordevCopy to clipboardErrorCopied

Consul的動態(tài)刷新配置

我們只要修改下Consul中的配置信息伙判,再次調(diào)用查看配置的接口,就會發(fā)現(xiàn)配置已經(jīng)刷新黑忱⊙绺В回想下在使用Spring Cloud Config的時候,我們需要調(diào)用接口甫煞,通過Spring Cloud Bus才能刷新配置菇曲。Consul使用其自帶的Control Bus 實現(xiàn)了一種事件傳遞機制,從而實現(xiàn)了動態(tài)刷新功能抚吠。

使用到的模塊

springcloud-learning

├── consul-config-client -- 用于演示consul作為配置中心的consul客戶端

├── consul-user-service -- 注冊到consul的提供User對象CRUD接口的服務(wù)

└── consul-service -- 注冊到consul的ribbon服務(wù)調(diào)用測試服務(wù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末羊娃,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子埃跷,更是在濱河造成了極大的恐慌蕊玷,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件弥雹,死亡現(xiàn)場離奇詭異垃帅,居然都是意外死亡,警方通過查閱死者的電腦和手機剪勿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門贸诚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事酱固⌒的睿” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵运悲,是天一觀的道長龄减。 經(jīng)常有香客問我,道長班眯,這世上最難降的妖魔是什么希停? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮署隘,結(jié)果婚禮上宠能,老公的妹妹穿的比我還像新娘。我一直安慰自己磁餐,他們只是感情好违崇,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著诊霹,像睡著了一般亦歉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上畅哑,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天肴楷,我揣著相機與錄音,去河邊找鬼荠呐。 笑死赛蔫,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的泥张。 我是一名探鬼主播呵恢,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼媚创!你這毒婦竟也來了渗钉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤钞钙,失蹤者是張志新(化名)和其女友劉穎鳄橘,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體芒炼,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡瘫怜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了本刽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鲸湃。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡赠涮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出暗挑,到底是詐尸還是另有隱情笋除,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布炸裆,位于F島的核電站垃它,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏晒衩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一墙歪、第九天 我趴在偏房一處隱蔽的房頂上張望听系。 院中可真熱鬧,春花似錦虹菲、人聲如沸靠胜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽浪漠。三九已至,卻和暖如春霎褐,著一層夾襖步出監(jiān)牢的瞬間址愿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工冻璃, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留响谓,地道東北人。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓省艳,卻偏偏與公主長得像娘纷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子跋炕,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359