SpringCloud入門 消息匯流排 Bus

消息匯流排

1、概述

使用SpringCloud Bus配和Spring Cloud Config使用實現配置的動態刷新

image-20200906220546133

Bus只支援消息處理:RabbitMQ和Kafaka。

能幹嘛

image-20200906220840601

能管理和傳播分散式系統間的消息,就像一個分散式執行器,可用於廣播狀態更改、時間推送等,也可以當做微服務間的通訊通道。

什麼是匯流排

在微服務架構的系統中,通常會使用輕呈級的消息代理來構建一個共用的消息主題,並讓系統中所有微服務實例都連接上來。由於該主題中產生的消
息會被所有實例監聽和消費,所以稱它為消息匯流排。在匯流排上的各個實例,都可以方便地廣播一些需要讓其他連接在該主題上的實例都知道的消息。

基本原理

ConfigClient實例都監聽MQ中同一個topic(默認是springCloudBus)。當一個服務刷新數據的時候,它會把這個資訊放入到Topic中,這樣其它監聽
同一Topic的服務就能得到通知,然後去更新白身的配置。
//www.bilibili.com/video/av55976700?from=search&seid=15010075915728605208

2、Rabbit環境配置

image-20200906221046228

進入目錄輸入命令

image-20200906221119170

安裝成功之後訪問://localhost:15672/

默認帳號密碼為guest和guest登陸之後:

image-20200906221343512

3、動態刷新刷新全局廣播

image-20200906221501337

新建一個cloud-config-client3366的模組,跟3355內容一致,埠不一致。

設計思想

1、利用消息匯流排觸發一個客戶端bus/refresh,而刷新所有客戶端的配置。

image-20200906221938545

2、利用消息匯流排觸發一個服務端ConfigServer的/bus/refresh斷電,而刷新所有客戶端的配置

image-20200906222127365

對比

第二種的架構顯然更加適合,第一種不適合的原因有:

a:打破了微服務的職責單一性,因為微服務本身是業務模組,他本不應該承擔配置刷新的職責。

b:婆婆壞了微服務各個節點的對等性。

c:有一定的局限性,例如:微服務在遷移時,它的網路常常會發生變化,此時如果想要做到自動刷新,那就回增加更多的配置。

3344配置中心服務端模組添加消息匯流排支援

1、pom

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

2、yml

  ## rabbitmq的相關配置
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest
## rabbitmq相關配置,暴露bus刷新配置的端點
management:
  endpoints:
    web:
      exposure:
        include: "bus-refresh"

3355和3355客戶端模組添加消息匯流排支援

1、pom

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

2、yml

  ## rabbitmq的相關配置
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest

測試修改git中配置,然後訪問curl -X POST "//localhost:3344/actuator/refresh",調用3355介面,查看結果是否更新。。

結果:一次發送,處處生效

4、動態刷新定點通知

不想全部通知,只想定點通知,只通知一個3355,而不通知3366

簡單一句話

制定具體的某一個實例生效而不是全部!

公式://localhost:3344/actuator/bus-refresh/{destination}

同樣是發送到服務實例上,然後通過{destination}制定具體需要更新的客戶端。規則:spring-application-name:埠

實例,只刷新3355客戶端

image-20200906225256639

通知總結:

image-20200906225514203

公眾號:發哥講

這是一個稍偏基礎和偏技術的公眾號,甚至其中包括一些可能閱讀量很低的包含程式碼的技術文,不知道你是不是喜歡,期待你的關注。

程式碼分享

//gitee.com/naimaohome

微信公眾號 點擊關於我,加入QQ群,即可獲取到程式碼以及高級進階影片和電子書!!

img

如果你覺得文章還不錯,就請點擊右上角選擇發送給朋友或者轉發到朋友圈~

● 掃碼關注我們

據說看到好文章不推薦的人,伺服器容易宕機!

本文版權歸 發哥講 和 部落格園 共有,原創文章,未經允許不得轉載,否則保留追究法律責任的權利。