config作為Springcloud的五大神獸之一,也是我們玩SpringCloud必回的技術之一,它也給我們提供了相當程度的友善!
同時附上我練習時搭建的一個簡單的SpringCloud項目,其中包含了feign、swagger-ui、rabbitmq、redis、aop、定時任務、檔案上傳于下載下傳、excel導出、多資料源配置等demo,該項目也包含了SpringCloud的常用元件:
SpringCloud下載下傳連結://download.csdn.net/download/weixin_45417573/12104123
Config配置下載下傳連結://download.csdn.net/download/weixin_45417573/12104128
一、為什麼要使用config配置中心
微服務時代,一個項目都是有很多個服務的,而且服務可能部署在不同的地方,這樣一來,如果要修改某個服務的某個配置就變得不是那麼友善,那麼,有沒有可能把這些配置檔案都集中起來進行集中的管理和維護呢?這就是配置中心!
二、配置中心的大概實作思路
配置中心的大概實作思路是将所有服務的配置檔案集中放在git伺服器上,同時每個服務本地也存放一份配置,但git伺服器上的配置優先于本地配置,這樣如果我們需要修改配置隻需要修改git伺服器上的配置檔案,就可以了,綜上所述,config配置中心的大緻實作方式可以猜測通過如下步驟來實作:
(1)在本地建立一個項目,将多有服務的配置檔案存放到服務中
(2)建立一個git倉庫,将所有服務的配置檔案上傳到倉庫中
(3)建立一個config伺服器,用于同步git倉庫中的配置檔案
(4)在每個服務中增加配置,實作優先加載git伺服器上的配置
三、具體實作
1、建立一個普通的java項目,用于存放所有的配置檔案,為了友善區分,将每個配置檔案的檔案名改成相應的服務名.yml

2、将配置檔案上傳到git伺服器中,友善本地操作及更新送出
3、建立一個config服務
在建立之前,需要說明的一點是,就如eureka一樣。config亦分為服務端和用戶端,服務端就是我們的config服務。用戶端就是我們管理配置的服務,這一點和eureka非常類似!
(1)添加依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<!-- eureka用戶端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>
spring-cloud-starter-netflix-eureka-client
</artifactId>
</dependency>
(2)啟動類添加注解
(3)添加yml配置
server:
port: 8007
spring:
application:
name: jt-config
redis:
host: 192.168.40.152
port: 6379
cloud:
config:
server:
git:
uri: https://github.com/wwenyi/jt-config.git
search-paths: config
username: *****
password: ****
eureka:
instance:
prefer-ip-address: true #以IP位址注冊到服務中心,互相注冊使用IP位址
client:
serviceUrl:
defaultZone: http://localhost:8000/eureka/
至此,服務端已準備完畢,接下來準備用戶端,我們可以通過通路該服務+yml檔案名來驗證服務端是否正确,例如:
localhost:8007/jt-user.yml
4、修改用戶端
(1)在所有需要管理配置的服務中添加依賴(暴露重新整理端點,友善通過該端點重新整理配置):
之前如果做過hystrix監控的服務中已經添加過該依賴
<!-- 暴露監控端點 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
(2)新增yml檔案
這裡注意,是新增,不是修改!!!該yml檔案先與application.yml加載,用于引導git上的配置
檔案名:bootstrap.yml
配置内容如下:
spring:
cloud:
config:
discovery:
enabled: true
#config服務的服務名
service-id: jt-config
#yml檔案名
name: user-config
#注意:eureka的配置不能省略!!!因為服務啟動時會去eureka中找config服務
# 如果一旦省去了eureka的配置,就會出現找不到config的錯誤,同時,git上的配置也不會生效!!!!
eureka:
instance:
prefer-ip-address: true #以IP位址注冊到服務中心,互相注冊使用IP位址
client:
serviceUrl:
defaultZone: http://localhost:8000/eureka/
好了,到這裡config配置中心的工作就做完了,我們可以測試一下,
我們可以在git上的配置新增一個監控端點,如果通路到這個新增的端點,就說明我們的配置中心已生效:
#暴露監控斷點,供hystrix儀表盤監控健康狀态
#暴露重新整理端點,兩個端點之間用,隔開
management:
endpoints:
web:
exposure:
include: hystrix.stream,refresh
修改以後重新開機服務,通路一下ip+端口+/actuator,例如:
http://localhost:8002/user/actuator
我們如果能看到refresh端口已經打開了,那麼說明我們配置中心已經完成:
四、bus+rabbitMQ實作動态重新整理
以上的方法是需要我們重新開機服務,服務才會去重新拉取配置中心的配置,那麼,有沒有可能再不重新開機服務的前提下,隻要修改了配置,服務就能動态的擷取到配置呢?是以這裡,我們就要利用到bus+rabbit了,關于rabbitmq我前面有簡單的介紹安裝和使用過程,這裡就不贅述了!直接開幹!
1、服務端修改:
(1)添加依賴:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
(2)添加rabbitmq的配置,并暴露監控端口
#rabbitmq的配置
spring:
rabbitmq:
host: 192.168.40.152
username: admin
password: admin
port: 5672
#暴露端口
management:
endpoints:
web:
exposure:
include: bus-refresh
2、用戶端
(1)添加依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
(2)添加rabbitmq的配置
#rabbitmq的配置
spring:
rabbitmq:
host: 192.168.40.152
username: admin
password: admin
port: 5672
到此為止,搞定!!
注意:springcloud預設的是git上的配置優先級大于本地的配置,如果要使用本地配置,需要将所有的配置檔案放到config服務中,并修改yml中的配置打開本地配置,配置如下:
spring:
profiles:
active: native