小白學SpringCloud(四):消息總線(Spring Cloud Bus)

bus_logo

Spring Cloud Bus 將分佈式的節點用輕量的消息代理連接起來。它可以用於廣播配置文件的更改或者服務之間的通訊,也可以用於監控。上篇我們有說到Spring Cloud爲我們提供了在不重啓項目的情況下切換配置的功能,就要用到它,讓我們來看看怎麼實現的吧。

一、安裝MQ

Spring Cloud Bus支持常見的Rabbitmq、kafka、Activemq等。我們這裏使用Rabbitmq來作爲演示。Rabbitmq的安裝這裏就不作演示了,大家可以使用docker來安裝使用,很方便。給大家一個度孃的傳送門

二、Config Server配置

這裏我們還是以廖師兄的圖爲例,先來看看自動更新配置的原理(圖中product、order均爲客戶端)。
bus_1
當我們在遠端Git修改了配置之後,如果我們訪問Config Server的/bus-refresh接口,Config Server就會把更改的配置發送給MQ,之後MQ就會把要改變的配置推送給各個客戶端,這樣就實現了自動更換配置的功能,現在我們來試一試吧。記住在這之前要先啓動Rabbitmq。
1.添加pom引用
老規矩,先來添加pom引用,要注意的是Config的Server和Client端都要添加。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

2.修改配置文件
首先我們要先添加rabbitmq的配置,我們可以直接配置在遠程git上面,這樣服務端和客戶端就都有這份配置了。

spring:
  rabbitmq:
    username: guest
    password: guest
    host: 192.168.xxx.xxx
    port: 5672

然後我們也要顯示的使我們的服務暴漏/bus-refresh接口。在Spring2.0中把這個接口都移動到了actuator下面。這個只需要在Config端進行配置就好了。

management:
  endpoints:
    web:
      exposure:
        include: bus-refresh #也可以改爲"*"來暴露所有接口

現在我們逐一啓動我們的Eureka、Config和Client項目,同時在啓動Config Server的時候可以看到我們對外暴露的接口
bus_2
這樣我們就完成配置了,現在我們修改一下遠端配置中的env的值,然後訪問一下這個接口

curl -X POST http://localhost:8764/actuator/bus-refresh

這時候我們發現在不重啓項目的情況下,我們的配置已經修改了。
3.配置Webhook
剛纔我們已經實現了自動替換項目配置,但是我們每次更改配置都要手動訪問/bus-refresh接口,有沒有簡單的方式呢?答案當然是有的。現在大部分遠端Git都提供了webhook功能,即我們每更改一次配置,就自動向某一接口發送一次請求。這不就是我們想要的嗎?


本文作者: catalinaLi
本文鏈接: http://catalinali.top/2018/startbus/
版權聲明: 原創文章,有問題請評論中留言。非商業轉載請註明作者及出處。

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