本篇結合上篇學習使用SpringCloud Bus結合MQ來實現自動刷新java
上篇有遠端git碼雲,本地git,config統一配置中心服務,order服務,product服務git
過程: 啓動服務時,config服務將遠端git的配置拉取到本地git,order服務讀取config服務的配置; 啓動後再修改git的配置,order中讀取的配置則不變,爲啓動時的配置,因此須要重啓,從新讀取,由於沒有應用通知order服務配置已經被改動了github
消息隊列有不少,本次使用RabbitMQ,就像JPA來操做數據庫,SpringCloud Bus來操做RabbitMQweb
config服務,order服務會經過RabbitMQ來傳遞信息,通知他配置已經被改動spring
這邊還須要使用到docker容器技術,而且在docker中已經下了鏡像RibbonMQ,若是不熟悉的小夥伴能夠先學習一下docker,仍是比較簡單入手,另外docker對於如今的技術人員來講,也必需要知道,熟悉的一個技術工具,否則就落後了,好比在下,也是剛剛以前才知道這玩意docker
也粗糙的記錄了一篇win7的docker安裝 : http://www.javashuo.com/article/p-hkyrgqaw-et.html數據庫
config 服務瀏覽器
第一步老套路,maven引入依賴app
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> </dependency>
第二步yml配置,在原來的基礎上加rabbitmq配置maven
spring: application: name: config cloud: config: server: git: uri: https://gitee.com/daxia/spring-cloud-config username: daxia@foxmail.com password: 123456 basedir: E:\MyCloud\config\basedir rabbitmq: host: 192.168.99.100 port: 5672 username: guest password: guest virtual-host: / eureka: client: service-url: defaultZone: http://localhost:8761/eureka
docker 容器
啓動RabbitMQ命令 : docker run -d --hostname myrabbitmq -p 5672:5672 -p 15672:15672 hub.c.163.com/library/rabbitmq:management
第一個5672端口是rabbitmq,第二個15672端口是管理界面
外部瀏覽器訪問 以下:
order 服務
order服務同config服務同樣,引入依賴,而後yml配置,貼出來
spring: application: name: order cloud: config: discovery: enabled: true service-id: CONFIG profile: dev rabbitmq: host: 192.168.99.100 port: 5672 username: guest password: guest virtual-host: / eureka: client: service-url: defaultZone: http://localhost:8761/eureka/
而後rabbitmq management訪問,以下 就出現兩個隊列,一個是config,一個是order:
當關閉一個服務的時候,這邊馬上少一個queues,能夠試試
下面來測試測試 改變Git倉庫的配置來自動更新服務
在Git倉庫的order-dev.yml中 追加點東西:
hello: tom
在config服務中,須要在yml配置中加入監控設置(這個設置是SpringBoot2有改動部分)
spring: application: name: config cloud: config: server: git: uri: https://gitee.com/daxia/spring-cloud-config username: daxia@foxmail.com password: 123456 basedir: E:\MyCloud\config\basedir rabbitmq: host: 192.168.99.100 port: 5672 username: guest password: guest virtual-host: / eureka: client: service-url: defaultZone: http://localhost:8761/eureka #本次追加 management: endpoints: web: exposure: include: "bus-refresh"
接下來,在order服務中,寫一個Controller中獲取該配置,須要@RefreshScope註解刷新
@RestController @RefreshScope public class HelloController { @Value("${hello}") private String hello; @GetMapping("/hello") public String hello() { return hello; } }
啓動服務 瀏覽器訪問 上面的接口,
接下來, 去改動Git倉庫的配置,將tom改爲jerry,而後再訪問瀏覽器的時候,發現沒有變,在這裏須要用到上面設置的監控,在config服務控制檯中能夠找到訪問方式http://localhost:8000/actuator/bus-refresh
是post的請求,使用postman訪問一次之後,再來刷新瀏覽器hello的請求,就更新了配置信息
學到這裏,我以爲有點尷尬,配置自動刷新了,那每次還要本身請求一個post,確定有方法,從Git倉庫入手,
那git上應該有作了修改自動響應的功能的應用(碼雲)WebHooks
其餘的Git倉庫應該都有,可能名字叫法不同
上面的解釋說的很清楚,push代碼,能夠post一個請求,恰好能夠知足需求
訪問的地址是: http://localhost:8000/actuator/bus-refresh
localhost確定是寫不上去的,若是寫上去了就說明你超神了,這邊須要一個公網的地址
須要內網穿透的小工具,來完成此次測試,映射url到本地,(分享natapp.cn,根據本身的系統下載)
用其餘穿透工具的也能夠,好比花生殼...百度搜內網穿透,就一大堆了
最後測試的時候,發現開源中國的碼雲和SpringCloud彷佛不太兼容,失敗了, 換成github就能夠了.
在使用github的時候,cloud專用的一個訪問/monitor 好比url: http://hello.natappfree.cc/monitor
換成github的時候,須要將以前conifg服務中的basebir文件夾刪除,否則測試的時候,會很坑
-----------------------------------------------------------