消息總線 - bus

一、Spring Cloud Bus簡介

Spring Cloud Bus集成了市面上常見的RabbitMQ和Kafka等消息代理。其會連接微服務系統中所有擁有Bus總線機制的節點,當有數據變更的時候,會通過消息中間件使用消息廣播的方式通知所有的微服務節點同步更新數據。(如:微服務配置更新等)

  1. 實現Bus刷新功能需要在所有的config client端應用中增加spring-cloud-starter-bus-amqp依賴,這個依賴是消息總線集成的RabbitMQ消息同步組件
<!--  rabbitMQ消息 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
  1. 在config client端的bootstrap配置文件中增加RabbitMQ相關配置
spring.rabbitmq.host=192.168.1.122
spring.rabbitmq.port=5672
spring.rabbitmq.username=test
spring.rabbitmq.password=123456
  1. Bus消息總線會提供一個/bus/refresh服務來實現應用的熱刷新。不再使用actuator來提供人刷新邏輯。/bus/refresh服務要求請求必須是post請求,可用任意技術實現。
    這裏要注意,雖然刷新服務的邏輯由Bus消息總線來提供,但是/bus/refresh服務默認還是關閉的,需要開啓,在config client端的bootstrap配置文件中必須配置下述內容
management.security.enabled=true

二、基於config-server實現全局刷新

在這裏插入圖片描述

這種實現方案在設計上更加完美,將熱刷新邏輯和具體的服務應用解耦。推薦使用。
需要在config server和config client端都引入Bus消息總線組件

三、局部刷新

使用Bus總線也可以實現部分服務熱刷新。前文講到的兩種刷新實現方式都是全局熱刷新,所有帶有Bus消息總線組件且與同一個RabbitMQ連接的微服務應用都會執行熱刷新邏輯。有些時候,熱刷新只需要在一個微服務應用或一個微服務應用集羣中執行,這個時候就需要使用局部刷新功能。
局部熱刷新的實現過程和全局熱刷新一致,只是請求地址/bus/refresh需要提供一個GET請求參數,請求參數命名爲destination,參數值是要刷新的微服務名稱:端口[]。
如:
微服務名: config-client
微服務端口: 10802、10803、10804
如果只熱刷新微服務config-client:10802時,請求的路徑爲/bus/refresh?destination=config-client:10802。
如果需要刷新config-client微服務集羣,則請求路徑爲/bus/refresh?destination=config-client:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章