上一節的統一配置中心《SpringCloud系列第08節之配置中心Config》演示了屬性熱加載java
其中提到,每次熱加載屬性時,都要逐次調用每一個應用的 /refresh
接口(或者維護 Git 倉庫的 Webhooks)來觸發屬性更新git
隨着系統的擴充,應用的增長,若全部的觸發動做都要手工去作(或者維護 Git 倉庫的 Webhooks),這是不人道的github
因此咱們但願配置中心的屬性發生變化時,能有一種途徑去通知全部的相關應用去自動刷新配置web
而經過 Spring Cloud Bus 就可以實現以消息總線的方式,通知集羣上的應用,去動態更新配置信息spring
本文是以 RabbitMQ 來做爲消息代理的中間件(實現將消息路由到一個或多個目的地),因此要先安裝 RabbitMQ瀏覽器
RabbitMQ 是 AMQP(Advanced Message Queuing Protocol)協議的一個開源實現的產品服務器
它是由以高性能、健壯、可伸縮性出名的 Erlang OTP 平臺實現的工業級的消息隊列服務器app
因此在安裝 RabbitMQ 以前,要先安裝 Erlang,下面是它們的下載地址curl
http://erlang.org/download/otp_win64_19.3.exe微服務
http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.9/rabbitmq-server-3.6.9.exe
Windows 下安裝成功後,RabbitMQ Server 會自動註冊爲服務,並以默認配置啓動
也能夠在開始菜單,找到 RabbitMQ Server 目錄,點擊 RabbitMQ Service - start 來啓動
爲了能在 Web 界面管理 RabbitMQ,咱們還須要啓用它的管理插件
D:\Develop\RabbitMQServer\rabbitmq_server-3.6.9\sbin>rabbitmq-plugins enable rabbitmq_management The following plugins have been enabled: amqp_client cowlib cowboy rabbitmq_web_dispatch rabbitmq_management_agent rabbitmq_management Applying plugin configuration to rabbit@Jadyer-PC... started 6 plugins. D:\Develop\RabbitMQServer\rabbitmq_server-3.6.9\sbin>
啓用後,瀏覽器訪問 http://127.0.0.1:15672/ 便可(登陸的用戶名密碼均爲 guest)
登陸進去以後,能夠在上方的 Admin 導航菜單中新建用戶,並分配權限等等
示例代碼以下(也能夠直接從 Github 下載:https://github.com/v5java/demo-cloud-09-bus)
它是由四個模塊組成的 Maven 工程,包含了一個註冊中心、一個配置中心、兩個讀取了配置中心屬性的服務提供方
它是在上一節的統一配置中心《SpringCloud系列第08節之配置中心Config》的代碼基礎上改的
因爲改動很少,因此下面就只列出來各個改動點
無修改
spring: rabbitmq: host: 127.0.0.1 port: 5672 # 注意端口是5672,不是15672 username: xuanyu password: xuanyu
其改動部分與配置中心相同:都是引入依賴,添加 rabbitmq 配置,簡單粗暴一步到位(Spring Cloud Bus 自動化配置的功勞)
仍是分別訪問兩個服務提供方暴露出來的接口
http://127.0.0.1:2100/demo/config/getHost
http://127.0.0.1:2200/demo/config/getHost
屬性熱加載時,須要調用消息總線的 /bus/refresh
接口,共有兩種方式(都能使集羣中其它節點動態刷新讀取到的屬性)
curl -X POST http://127.0.0.1:2100/bus/refresh
curl -X POST http://127.0.0.1:4100/bus/refresh
但在須要遷移某個使用了的節點時,就不得不修改 Git 倉庫的 Webhooks
因此,爲了使得各個微服務保持對等,故推薦第二種方式來刷新屬性
另外,也可經過 destination 參數來指定刷新範圍,舉例以下
curl -X POST http://127.0.0.1:4100/bus/refresh?destination=demo.cloud.config:2200
curl -X POST http://127.0.0.1:4100/bus/refresh?destination=demo.cloud.config:**