Spring Cloud Consul 為 SpringBoot 應(yīng)用提供了 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ā)事件消息碰镜。
首先我們從官網(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
我們通過改造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
我們通過創(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中添加配置存儲的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中的配置信息伙判,再次調(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ù)