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

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

Consul 簡介

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

Spring Cloud Consul 具有如下特性:

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

支持客戶端負(fù)責(zé)均衡:包括Ribbon和Spring Cloud LoadBalancer;

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

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

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

使用Consul作為注冊中心

安裝并運(yùn)行Consul

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

下載完成后只有一個exe文件,雙擊運(yùn)行;

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

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

運(yùn)行兩個consul-user-service和一個consul-ribbon-service,在Consul頁面上可以看到如下信息:

負(fù)載均衡功能

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

多次調(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的配置功能進(jìn)行配置:

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 實(shí)現(xiàn)了一種事件傳遞機(jī)制,從而實(shí)現(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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容