天天看點

Spring Cloud: 配置總線bus

Spring Cloud bus通過輕量消息代理連接配接各個分布的節點。這會用在廣播狀态的變化(例如配置變化)或者其他的消息指令。Spring Cloud bus的一個核心思想是通過分布式的啟動器對spring boot應用進行擴充,也可以用來建立一個多個應用之間的通信頻道。目前唯一實作的方式是用AMQP消息代理作為通道,同樣特性的設定(有些取決于通道的設定)在更多通道的文檔中。

Spring Cloud bus被國内很多都翻譯為消息總線,也挺形象的。大家可以将它了解為管理和傳播所有分布式項目中的消息既可,其實本質是利用了MQ的廣播機制在分布式的系統中傳播消息,目前常用的有Kafka和RabbitMQ。利用bus的機制可以做很多的事情,其中配置中心用戶端重新整理就是典型的應用場景之一,我們用一張圖來描述bus在配置中心使用的機制。

Spring Cloud: 配置總線bus

根據此圖我們可以看出利用Spring Cloud Bus做配置更新的步驟:

1、送出代碼觸發post給用戶端A發送bus/refresh

2、用戶端A接收到請求從Server端更新配置并且發送給Spring Cloud bus

3、Spring Cloud bus接到消息并通知給其它用戶端

4、其它用戶端接收到通知,請求Server端擷取最新配置

5、全部用戶端均擷取到最新的配置

代碼案例

1.添加伺服器端的依賴

<!--spring cloud  bus依賴-->
		<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-bus -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-bus</artifactId>
			<version>2.1.0.RELEASE</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-stream-binder-rabbit -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
			<version>2.0.0.RELEASE</version>
		</dependency>


           

2.在properties中的配置中添加Rabbitmq的配置

spring.rabbitmq.host=**.***.**.***
spring.rabbitmq.port=5672
spring.rabbitmq.username=******
spring.rabbitmq.password=******

#暴露觸發消息總線的位址
management.endpoints.web.exposure.include=bus-refresh
           

3.在用戶端的依賴添加如下:

<!--spring cloud  bus依賴-->
		<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-bus -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-bus</artifactId>
			<version>2.1.0.RELEASE</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-stream-binder-rabbit -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
			<version>2.0.0.RELEASE</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-actuator -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
			<version>2.0.4.RELEASE</version>
		</dependency>


           

4.同理,在配置檔案中,添加Rabbitmq的配置

Spring Cloud: 配置總線bus

5.啟動項目。然後再碼雲上修改了配置檔案,再本地先執行該步驟,即手動發送一個POST請求

http://127.0.0.1:12000/actuator/bus-refresh
           

6.然後請求其他請求,可以驗證是已經自動編譯了修改了配置的資訊,而且是再沒有重新開機的情況下,就執行了。

Spring Cloud: 配置總線bus

7.關于自己自定義的注解,再配置檔案修改後,如果想在碼雲上修改就立即可用的話,需要在類中添加注解@RefreshScope即可自動讀取自定義的配置檔案資訊了。

Spring Cloud: 配置總線bus

繼續閱讀