1. 程式人生 > >Spring Cloud重新整理配置中心配置——訊息匯流排RabbitMQ

Spring Cloud重新整理配置中心配置——訊息匯流排RabbitMQ

在http://blog.csdn.net/a60782885/article/details/69415527的最後,我們提到了配置的重新整理,但是這顯然是麻煩的,如果多個服務使用了這個配置,當我們修改配置資訊的時候,如果我們希望服務的配置也跟著修改,我們就不得不一個一個服務的傳送POST請求,或者關閉服務重新開啟。這是一件多麻煩的事情。

所以我們在這裡使用訊息中介軟體來完成配置的更新問題。

目標:

當我們更新git倉庫的配置資訊的時候,所有使用了修改的配置的服務都會重新整理配置。

使用RabbitMQ中介軟體來作為訊息匯流排,那麼我們首先需要在電腦裡面裝好RabbitMQ。安裝的過程這裡就不贅述了。

溫馨提示:使用window的小夥伴們,安裝過程不能出現中文路徑,即使是你電腦使用者名稱是中文也是不能成功的。

準備:

我們首先搭建一個服務註冊中心,一個配置中心,和一個獲取配置的客戶端。配置中心和客戶端都在服務註冊中心中註冊好。

驗證:

服務註冊中心中可以看到配置中心和客戶端。

訪問配置中心的url可以得到json格式的返回。見http://blog.csdn.net/a60782885/article/details/69415527。

訪問客戶端可以得到倉庫中某個屬性的值。

如果都完成了,正文就開始了。

首先修改配置中心的依賴pom:

增加兩個依賴:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
在application.properties配置檔案中增加rabbitmq的配置資訊。
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=使用者名稱
spring.rabbitmq.password=密碼
沒有使用過rabbitmq的朋友,這裡需要先建立好使用者名稱和密碼,並且將permission配置完成才可以使用。

配置中心的修改就完成了。

接下來是客戶端的修改:

和配置中心的修改一樣,增加兩個依賴,並且在application配置檔案中增加rabbitmq資訊就ok了。

接下來怎麼驗證我們是否成功了呢?

1.首先我們先訪問客戶端,檢視修改之前的git倉庫的資訊。

2.確認了之前的值之後,我們修改git倉庫的資訊,再訪問一次客戶端,會發現,資訊並沒有改變。

3.然後我們向配置中心的/bus/refresh傳送一個POST請求。


這裡7001就是配置中心的埠了。

4.再次訪問客戶端,就發現資訊已經得到修改。

分析原理:

可以看到,我們的架構是這樣的。

因為我們引入了訊息匯流排,所以Server和Service都連線到了RabbitMQ隊列當中。

當Config Server啟動的時候,它會向git倉庫拿到配置資訊。

而當Service啟動的時候,會向Config Server拿配置資訊。

而我們修改git倉庫的時候,服務客戶端是無法重新整理配置資訊的。

當我們向Server的/bus/refresh中傳送POST請求時,此時,Config Server會將這個重新整理請求傳送到訊息匯流排中,當我們的客戶端從訊息匯流排中獲取到重新整理請求的時候,就會重新從Config Server中獲取配置資訊。

這樣子,其實我們還是沒有達到目的,雖然配置的重新整理變得很快了,但是我們依然沒有達到只需要修改git倉庫,所有服務就自動重新整理的這麼一件事,我們還需要向Config Server傳送POST請求呢。

這個時候,我們可以通過遠端倉庫的webhook來達到目的。webhook有什麼用呢?

webhook會在我們向倉庫傳送push請求的時候,對指定的url傳送一個POST請求。這下就懂了吧。當我們向配置中心的配置倉庫傳送push請求,他就會向我們的配置中心的/bus/refresh傳送一個POST請求,那麼就達到了服務重新整理的目的了。

建立webhook,以github為例:

某個倉庫->settings->Webhooks.


只需要在payload url中填上配置中心的/bus/refresh就可以達到目的了。

當然,這裡的地址要是公網地址,localhost什麼的是不行的。

其實我們也可以通過向服務客戶端傳送POST請求來達到所有服務都重新整理的目的,但我們選向配置中心傳送POST請求。為什麼呢?

因為我們最後要設定webhook。如果我們使用某個服務作為重新整理點的話,其實是很麻煩的一件事,如果服務需要遷移,那麼我們的webhook就需要重新修改了。

而如果使用配置中心作為重新整理點的話,就方便許多了。