前言
隨着微服務越來越多,服務的配置文件也越來越多,這個時候對於配置文件的管理其實可以完全抽離出來,對於項目啓動時需要的配置寫入到bootstrap.yml中,那些可能會經常改變的則放到svn或者git上進行管理,項目啓動時,會去git或者svn上拉取對應的配置文件啓動。
創建配置中心項目
入口文件添加@EnableConfigServer註解
配置文件:
#服務名稱
spring:
application:
name: config-server
cloud:
config:
server:
#這裏填寫你自己的git項目路徑,用戶名密碼
git:
uri: https://gitee.com/flyOX/config-center
username: flyOX
password: ××××××
timeout: 5
default-label: master
#服務的端口號
server:
port: 9100
#指定註冊中心地址
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
到這裏那麼配置中心就已經開發完成。
改造業務服務從配置中心獲取配置文件
針對網關、商品服務、訂單服務、我在 https://gitee.com/flyOX/config-center做了相應的一個配置文件。
1.修改application.yml配置文件爲bootstrap.yml,該出如下內容:
#指定註冊中心地址
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
#服務的名稱
spring:
application:
#name不同業務服務名ServiceId
name: order-service
#指定從配置中心
cloud:
config:
discovery:
service-id: CONFIG-SERVER
enabled: true
profile: test
2.pom文件添加Config客戶端包
<!--配置中心客戶端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
那麼我們重新啓動項目,一定要注意項目啓動順序:註冊中心->配置中心->產品服務->訂單服務->網關服務。到註冊中心控制檯查看相應服務是否以及啓動起來了。
同時看看相應的服務控制檯輸出的內容:
它是通過拉取git上的文件啓動的。那麼到這裏我們就以及把配置中心啓動起來了。
實現自動拉取最新配置文件
上面可以從git拉取配置文件,但是如果git上文件修改了,又不想通過重啓服務來拉取最新的配置文件我們該怎麼做呢?我們可以通過RabbitMQ+Refresh的方式做自動獲取最新配置。
這裏就是SpringCloud中的Bus:消息總線的方式,如果一旦配置文件修改,就發送一條消息到隊列中,那麼服務接受到消息則去拉取最新配置,這樣就解決了這個問題。
1.安裝一個RabbitMQ,可以通過docker安裝,很快。
2.pom文件中添加依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
3.在配置文件中添加如下:
spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
4.暴露全部的監控信息
management:
endpoints:
web:
exposure:
include: "*"
5.需要拉取最新的地方添加@RefreshScope註解
6.http://服務ip:端口/actuator/bus-refresh
備註:動態刷新配置 在開發和測試環境使用,儘量不要或者少在生產環境使用。