SpringCloud (第九篇)整合消息總線 Bus

前面兩篇文章我們聊了Spring Cloud Config配置中心,當(dāng)我們在更新github上面的配置以后,如果想要獲取到最新的配置翔横,需要手動刷新或者利用webhook的機制每次提交代碼發(fā)送請求來刷新客戶端癞谒,客戶端越來越多的時候,需要每個客戶端都執(zhí)行一遍鳖粟,這種方案就不太適合了社裆。
Spring Cloud Bus的一個功能就是讓這個過程變得簡單,當(dāng)遠程Git倉庫的配置更改后向图,只需要向其中的一個微服務(wù)實例發(fā)送一個Post請求泳秀,通過消息組件通知其它微服務(wù)實例重新拉去配置文件即可。

一榄攀、 SpringCloud Bus簡介

Spring Cloud Bus 將分布式的節(jié)點用輕量的消息代理連接起來嗜傅。它可以用于廣播配置文件的更改或者服務(wù)之間的通訊,
也可以用于監(jiān)控航攒。本文要講述的是用Spring Cloud Bus實現(xiàn)通知微服務(wù)架構(gòu)的配置文件的更改磺陡。Spring Cloud Bus可選的消息代理組件包括RabbitMQ,AMQP和Kafka等。
整體實現(xiàn)架構(gòu)圖:


image.png

架構(gòu)圖分析

架構(gòu)圖的簡單分析:
⑴Eureka-Server服務(wù)
        這個服務(wù)主要是用來服務(wù)的注冊和發(fā)現(xiàn)的漠畜,它是一個注冊中心币他,我們會將Config Server,Config Client這些服務(wù)都注冊進去憔狞。
⑵ Config Server服務(wù)
        這個是一個分布式配置中心Config Server蝴悉,通過它我們可以從遠處Git倉庫讀取我們需要的配置文件,所以瘾敢,
Config Client  服務(wù)可以通過連接它來獲取自己需要的配置信息拍冠。
⑶ Config Client服務(wù)
        這個服務(wù)是ConfigClient客戶端,它需要從ConfigServer服務(wù)端獲取自己的配置文件信息簇抵。
⑷ 消息總線
           可以理解為一個消息代理庆杜,它可以將分布式的節(jié)點都連接起來,也可以完成各個應(yīng)用程序節(jié)點間的相互通信碟摆, 這里我們主要用來廣播配置文件的更改晃财,
  并且消息總線的可選消息代理組件包括RabbitMQ,AMQP和Kafka等,這 里我們選中的是RabbitMQ組件典蜕。
⑸/bus/refresh
         這個是用來刷新配置的請求断盛,當(dāng)遠程倉庫的配置文件修改后罗洗,我們不需要重新啟動各個子節(jié)點,只需向某一個 子節(jié)點發(fā)送一個Post請求即可钢猛,
消息總線會自動通知其它各個節(jié)點進行配置文件的刷新伙菜。

二、 SpringCloud Bus 使用

1. 準備工作

本文還是基于上一篇文章來實現(xiàn)命迈。按照官方文檔贩绕,我們只需要在配置文件中配置 spring-cloud-starter-bus-amqp ;這就是說我們需要裝rabbitMq壶愤,已在本機上安裝丧叽。安裝教程:https://blog.csdn.net/qq_41307443/article/details/80865409

image.png

2. 改造 cloud_13_config_client_high 模塊

復(fù)制子模塊 cloud_13_config_client_high 該名稱 cloud_14_config_client_bus ,修改子模塊的pom公你,并引入父模塊。


image.png

在父模塊 引入 子模塊:


image.png

3. 在 子模塊的pom中添加依賴

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

完整依賴:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- 服務(wù)注冊中心 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!--config-config 的服務(wù)依賴-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <!-- 消息總線 Bus -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>

4. 修改配置文件

修改 bootstrap.yml 假瞬,修改如下:

server:
  port: 9105

## spring cloud eureka
eureka:
  client:
    serviceUrl:
      defaultZone: http://127.0.0.1:9090/eureka/

# spring config
spring:
  application:
    ####注冊中心應(yīng)用名稱
    name:  config-client


  cloud:
      config:
        #  github 上的 配置文件前綴名稱
        name: config-client
        label: master
        profile: dev
        ####讀取config-server注冊地址
        discovery:
          #指定server端的name,也就是server
          service-id: config-server
          #開啟Config服務(wù)發(fā)現(xiàn)支持
          enabled: true

# 新添加 Bus 配置
      bus:
        enabled: true
        trace:
          enabled: true
# 新添加 RabbitMQ
  rabbitmq:
    host: 192.168.1.107
    port: 5672
    username: root
    password: 123456
management:
  endpoint:
  endpoints:
    web:
      exposure:
        include: bus-refresh

注意:這里我一開始使用了http的端口 15672陕靠,發(fā)生了上述異常。后面改成了 5672 可以成功連接脱茉。映射2個RabbitMQ有2個端口:5672端口是客戶端和RabbitMQ及通信的接口剪芥,15672端口為管理界面訪問web界面的端口。

5. 修改啟動類

在啟動類上添加注解

@EnableEurekaClient
@EnableDiscoveryClient
@SpringBootApplication
public class CloudClientBusApplication {

    public static void main(String[] args) {
        SpringApplication.run(CloudClientBusApplication.class, args);
    }
}

6. 控制類讀取配置文件

@RefreshScope
@RestController
public class ConfigClientController {

    // 果獲取不到冒號前的配置琴许,則使用冒號后作為默認值
   //@Value("${yaosy:yaosy default}")
    @Value("${yaosy}")
    private String yaosy;

    @Value("${github}")
    private String github;

    @GetMapping("/yaosy")
    public String getYaosy(){
        return yaosy ;
    }
}

注意:注解 @RefreshScope //配置文件自動刷新

7. 啟動服務(wù)并測試

依次啟動eureka-cloud_eureka_01税肪、 cloud_12_config_server_high, cloud_14_config_client_bus,端口為:9106榜田。
啟動成功后會自動添加RabbitMQ隊列益兄,如圖:


image.png

在瀏覽器中訪問:http://127.0.0.1:9106/yaosy 頁面顯示:

image.png

進入 github 將yaosy的值改為 : “yaosy version 2.0.0”,即改變配置文件 yaosy 的值箭券。如果是傳統(tǒng)的做法净捅,需要重啟cloud_14_config_client_bus服務(wù),才能達到配置文件的更新辩块。

image.png

然而通過Bus蛔六,我們只需要發(fā)送post請求:http://127.0.0.1:9106/actuator/bus-refresh,你會發(fā)現(xiàn)cloud_14_config_client_bus會重新讀取配置文件废亭。
在這里我使用 postman 進行post請求發(fā)送国章,http://127.0.0.1:9106/actuator/bus-refresh .

image.png

請求發(fā)送后 cloud_14_config_client_bus 進行重新讀取配置文件。
image.png

刷新瀏覽器頁面:


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末豆村,一起剝皮案震驚了整個濱河市液兽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌你画,老刑警劉巖抵碟,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桃漾,死亡現(xiàn)場離奇詭異,居然都是意外死亡拟逮,警方通過查閱死者的電腦和手機撬统,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來敦迄,“玉大人恋追,你說我怎么就攤上這事》N荩” “怎么了苦囱?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長脾猛。 經(jīng)常有香客問我撕彤,道長,這世上最難降的妖魔是什么猛拴? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任羹铅,我火速辦了婚禮,結(jié)果婚禮上愉昆,老公的妹妹穿的比我還像新娘职员。我一直安慰自己,他們只是感情好跛溉,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布焊切。 她就那樣靜靜地躺著,像睡著了一般芳室。 火紅的嫁衣襯著肌膚如雪专肪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天堪侯,我揣著相機與錄音牵祟,去河邊找鬼。 笑死抖格,一個胖子當(dāng)著我的面吹牛诺苹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播收奔,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼坪哄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了模暗?” 一聲冷哼從身側(cè)響起念祭,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤粱坤,失蹤者是張志新(化名)和其女友劉穎站玄,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體再登,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡霎冯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了慷荔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡贷岸,死狀恐怖磷雇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情螟蒸,我是刑警寧澤崩掘,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站苞慢,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏绍赛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望猴誊。 院中可真熱鬧侮措,春花似錦、人聲如沸澄成。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宏悦。三九已至镐确,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間饼煞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工砖瞧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人块促。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓荣堰,卻偏偏與公主長得像竭翠,于是被迫代替她去往敵國和親持隧。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容