SpringCloud系列第09節之消息總線Bus

上一節的統一配置中心《SpringCloud系列第08節之配置中心Config》演示了屬性熱加載java

其中提到,每次熱加載屬性時,都要逐次調用每一個應用的 /refresh 接口(或者維護 Git 倉庫的 Webhooks)來觸發屬性更新git

隨着系統的擴充,應用的增長,若全部的觸發動做都要手工去作(或者維護 Git 倉庫的 Webhooks),這是不人道的github

因此咱們但願配置中心的屬性發生變化時,能有一種途徑去通知全部的相關應用去自動刷新配置web

而經過 Spring Cloud Bus 就可以實現以消息總線的方式,通知集羣上的應用,去動態更新配置信息spring

本文是以 RabbitMQ 來做爲消息代理的中間件(實現將消息路由到一個或多個目的地),因此要先安裝 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 來啓動

RabbitMQ的管理

爲了能在 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》的代碼基礎上改的

因爲改動很少,因此下面就只列出來各個改動點

註冊中心

無修改

配置中心

  1. 引入依賴項spring-cloud-starter-bus-amqp
  2. application.yml 中添加 spring.rabbitmq.* 的配置,以下所示
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 接口,共有兩種方式(都能使集羣中其它節點動態刷新讀取到的屬性)

  1. 調用某個應用的接口:curl -X POST http://127.0.0.1:2100/bus/refresh
  2. 調用消息總線的接口: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:**

相關文章
相關標籤/搜索