国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

SpringCloud整合MQ實現消息總線服務,實戰講解!

開發 前端
當我們手動更新某個倉庫配置文件的時候,想要實現所有客戶端同時也自動更新配置,可以利用消息總線來實現節點之間數據的同步變更操作。

一、背景介紹

在之前的文章中,我們介紹了服務配置中心高可用的玩法。了解到,每當修改配置文件內容,如果需要客戶端也同步更新,就需要手動調用/refresh接口,以便客戶端能獲取到最新的配置內容。

當客戶端越來越多的時候,通過人工進行處理顯然非常雞肋。有沒有一種更加高效的辦法,當手動調用其中一個客戶端的/refresh接口,其它的客戶端也自動更新?

答案是肯定的!

在 Spring Cloud 體系里,有一個叫做 Spring Cloud Bus 模塊,也被業界稱為消息總線。它可以將分布式系統內的節點以消息代理方式連接起來,開發者可以通過消息代理服務向其它節點傳輸數據的變更,例如配置文件的更改,也可以用于收集節點監控數據。其中常用的消息代理服務有 RabbitMQ 和 Kafka。

換言之,我們可以借助 Spring Cloud Bus 模塊來實現上文介紹的訴求,引入 Spring Cloud Bus 模塊后,客戶端獲取遠程配置文件的方式,可以用如下流程圖來描述。

圖片圖片

熟悉 MQ 服務的同學可能一眼就看出來了,其原理就是借助 MQ 服務的發布與訂閱功能向其它節點進行廣播數據,從而實現客戶端自動刷新配置功能。

其交互流程可以用如下內容來概括。

  • 1.當外部請求調用客戶端 A 的/refresh接口后,除了主動刷新配置意外,還會通過  Spring Cloud Bus 模塊,將刷新配置接口的指令數據發送到 MQ 服務器
  • 2.MQ 服務器會將指令數據通過  Spring Cloud Bus  模塊推送給其它客戶端
  • 3.客戶端 B、C 接收到最新的消息指令后,主動調用刷新配置服務,獲取最新的配置內容

下面我們通過具體的例子,結合之前介紹的知識,看看如何利用 Spring Cloud Bus  實現客戶端配置文件自動刷新的效果。

三、方案實踐

在此,我們采用 RabbitMQ 服務器來搭建消息總線,因此需要事先準備一臺可用的 RabbitMQ 服務器,具體的安裝教程之前有所介紹,大家也可以百度搜索一下,具體的安裝過程就不再重復撰述。

3.1、添加依賴

根據eureka-config-client復制一個服務消費者工程,命名為eureka-config-client-bus,并在pom.xml中引入spring-cloud-starter-bus-amqp依賴包,示例如下:

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

3.2、添加配置文件

接著,在bootstrap.properties配置文件中添加消息代理相關的屬性信息,示例如下:

# 配置rabbitmq服務器地址
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

3.3、服務測試

然后,依次將eureka-server、eureka-config-server、eureka-config-client-bus (分別在不同的端口上,比如9022、9023) 服務啟動起來。訪問 eureka 可視化頁面,如果服務都正常,可以看到類似于如下的界面。

圖片圖片

將遠程倉庫配置文件中的blog.name=hahaha修改成blog.name=hahaha123456,以便測試客戶端配置文件是否能自動更新。

接著,向其中一個客戶端發送一個/bus/refresh的 POST 請求。

**需要注意的是,這里的路徑是/bus/refresh,而不是/refresh**!

圖片圖片

最后,在瀏覽器中重新訪問另一個客戶端讀取配置文件的接口,不意外的話,客戶端獲取的是最新的配置信息。

圖片圖片

說明客戶端已經成功讀取到最新的配置內容。

查看客戶端的日志,也會看到類似于如下的信息。

Received remote refresh request. Keys refreshed [config.client.version, blog.name]

3.4、WebHook

可能有的同學會發出一個疑問,不可能每次修改倉庫的配置文件,自己都需要手動調用/bus/refresh接口吧。

實際上,GIT 里面有個 WebHooks 功能,每次 push 代碼后,我們可以利用它給遠程 HTTP URL 發送一個 POST 請求,以此省去手動調用的工作。

圖片圖片

操作非常簡單,只需要將其中一個客戶端/bus/refresh接口地址添加進去即可。需要注意的是,這里的 HTTP URL 必須是一個能請求通過的公網地址哈!

四、升級版

在以上的方案中,雖然我們利用消息總線實現了手動刷新一個客戶端的配置文件更新,其它客戶端也同步跟著一起刷新的目的,但在實際的實踐過程中,發現還是有一些不便的地方。

例如客戶端因為業務的快速迭代會頻繁的發布服務,同時也會根據服務的并發量適度的增減服務實例數量,這種情況下,客戶端的 IP 和端口會經常發生變動,每次人工運維起來會很繁瑣。

因此,我們可以將上面的交互流程改變一下,由服務配置中心通過 Spring Cloud Bus 模塊向客戶端發送重刷配置文件的指令。

整個流程,可以用如下圖來描述。

圖片圖片

因為服務配置中心基本上很少會去迭代,客戶端的 IP 和端口發生變動的可能性較小,由它向客戶端推送消息,運維的工作量可以顯著的下降。

改造的流程也很簡單,只需要兩步即可!

3.1、添加依賴

與上文類似,根據eureka-config-server復制一個服務消費者工程,命名為eureka-config-server-bus,并在pom.xml中引入spring-cloud-starter-bus-amqp依賴包,示例如下:

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-config-server</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-bus-amqp</artifactId>
    </dependency>
</dependencies>

4.2、添加配置文件

接著,在application.properties中添加消息代理服務相關的屬性,示例如下:

spring.application.name=eureka-config-server
server.port=9020

# 配置git倉庫地址
spring.cloud.config.server.git.uri=https://gitee.com/pzblogs/config-demo
spring.cloud.config.server.git.username=
spring.cloud.config.server.git.password=

# 設置與Eureka Server交互的地址,多個地址可使用【,】分隔
eureka.client.serviceUrl.defaultZnotallow=http://localhost:8001/eureka/

# 關閉安全認證
management.security.enabled=false

# 配置rabbitmq服務器地址
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

4.3、服務測試

然后,依次將eureka-server、eureka-config-server-bus、eureka-config-client-bus服務啟動起來。

接著,修改倉庫中的配置文件內容,完成之后,以 POST 方式調用服務配置中心的刷新配置接口,例如http://localhost:9020/bus/refresh。

最后,在瀏覽器訪問客戶端http://localhost:9023/hello,不意外的話,能看到最新的信息。

圖片圖片

五、小結

最后總結一下,當我們手動更新某個倉庫配置文件的時候,想要實現所有客戶端同時也自動更新配置,可以利用消息總線來實現節點之間數據的同步變更操作。

如果想要用 Kafka 來做消息代理服務,實現思路也類似,將bus-amqp換成bus-kafka,示例子如下

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

最后在配置文件中添加 Kafka 相關服務地址配置參數即可。

五、參考

  1. http://www.ityouknow.com/springcloud/2017/05/26/springcloud-config-eureka-bus.html
責任編輯:武曉燕 來源: 潘志德技術筆記
相關推薦

2025-04-08 08:50:37

SpringCamel系統

2024-11-04 08:02:23

SpringRabbitMQ中間件

2017-03-20 09:50:35

消息隊列架構消息

2024-11-11 10:02:37

Spring搜索數據

2025-01-10 08:20:00

MQ消息架構

2022-06-02 08:21:07

RocketMQ消息中間件

2022-04-27 08:23:34

微服務負載均衡

2019-02-19 15:20:12

消息總線架構異步

2022-04-09 14:45:02

微服務常見概念Spring

2024-11-13 00:59:13

2025-01-13 05:00:00

2025-01-06 08:53:37

2022-05-12 08:21:13

項目網關模塊

2022-05-31 08:21:07

MQ使用場景消費消息

2010-06-08 16:00:34

CAN總線協議

2021-06-09 09:42:50

SpringCloud微服務灰度發布

2021-05-17 16:24:58

Spring Clou

2009-06-14 17:18:55

ibmdwWebSphereMQ

2023-06-29 10:10:06

Rocket MQ消息中間件

2023-10-24 07:50:18

消息中間件MQ
點贊
收藏

51CTO技術棧公眾號

久久综合一区二区| 亚洲一二三四久久| 欧美福利网站| 欧美精品激情在线观看| 国产精品麻豆一区二区三区| 精品一区中文字幕| 欧美日韩国产专区| 欧美日韩国产小视频| 欧美精品成人一区二区在线观看| 亚洲一级片免费| av蜜臀在线| 欧美精品九九| 玖玖视频精品| 欧美日韩在线影院| 精品伦理一区二区三区| 国产剧情日韩欧美| 黄色高清在线观看| 国产一区二区观看| 国产亚洲欧美日韩一区二区| avav在线播放| 国产电影一区二区| 国产精品每日更新| 国产亚洲一区二区三区在线播放 | 天堂电影在线| 欧美三级日韩三级国产三级| 国产视频精品va久久久久久| 一级黄色免费在线观看| 欧美aaaaaaa| 免费欧美电影| 5566中文字幕一区二区电影| av免费观看大全| 在线观看欧美www| 国产在线xxx| 亚洲最新视频在线观看| 欧美精品国产一区二区| 欧美午夜宅男影院| 欧美家庭影院| 色噜噜一区二区| 午夜老司机精品| 久久综合中文| 欧洲在线视频一区| 猫咪成人在线观看| 一区二区在线观看免费视频播放 | 日韩美女在线看| 日本韩国福利视频| 国产美女主播一区| 国产视频一二三区| 亚洲精品综合精品自拍| 国产日产精品久久久久久婷婷| 视频在线观看国产精品| 成人h版在线观看| 色综合一本到久久亚洲91| 日韩欧美激情一区| 特级全黄一级毛片| 久久久天堂av| www.一区二区.com| 国产精品国产一区| 亚洲成人网久久久| 成年美女黄网站色大片不卡| av在线不卡网| 六月婷婷久久| 免费av一区二区三区四区| 国产精品久久久久久久久影视 | 精品精品99| 岛国av一区二区三区| a级网站在线观看| 九九在线精品视频| 国产一区免费视频| 国产精品一国产精品| 99se婷婷在线视频观看| 4438成人网| 亚洲淫性视频| 日韩欧美国产高清91| 9色在线视频网站| 色综合久久久网| 国产福利一区二区| 亚洲综合欧美| 男人天堂成人网| 日韩成人av影视| 国产真实生活伦对白| 亚洲成人黄色网址| 亚洲精品国产一区二区三区四区在线| 国产视频观看一区| 激情综合色播激情啊| 国产高清av在线| 国内精品久久久久久久果冻传媒| 免费欧美日韩国产三级电影| 一二三四社区在线视频| 久久精品第九区免费观看| 亚洲男人av在线| 亚洲午夜免费电影| 天堂午夜影视日韩欧美一区二区| 日本亚洲欧洲无免费码在线| 成人18视频在线播放| 欧美日韩欧美| 日韩av一二三四| 日韩精品在线观看一区| 噜噜爱69成人精品| 黄污网站在线观看| 国产精品成人一区二区| 日韩美女免费线视频| 欧美高清不卡在线| 国产女主播在线| 综合网中文字幕| 日韩三级视频在线观看| 日韩mv欧美mv国产网站| 免费av高清| 日韩视频在线你懂得| 国产一区二区精品久| mm1313亚洲国产精品无码试看| 欧美一级电影网站| 国产女同互慰高潮91漫画| 亚洲一本大道| 欧美日韩视频在线一区二区观看视频| 毛片av一区二区三区| 波多视频一区| 日本一二三区在线视频| www.夜夜爽| 91精品国产一区二区三区动漫| 国内精品久久久久久影视8| 欧美日韩一区二区欧美激情| 久久亚洲一区| 国产精品视频在线观看| 久久综合一区二区三区| 中文字幕五月欧美| 91精品婷婷色在线观看| 老司机精品影院| 日本免费a视频| 精品国产成人在线影院| 国产情侣一区| 91精品日本| 啊啊啊啊啊啊啊视频在线播放| 亚洲va男人天堂| 欧美涩涩网站| 欧美在线se| av免费在线观看网址| 成人性生交免费看| 久久99精品久久久久久青青日本 | 精品国产不卡一区二区| 亚洲精品久久久久久久蜜桃臀| 大陆极品少妇内射aaaaa| 欧美日韩视频在线播放| 9色porny| 99porn视频在线| 欧美大片专区| 亚洲综合色婷婷| 亚洲一区免费网站| 欧美大片欧美激情性色a∨久久| 欧美一区三区四区| 欧美永久精品| 四虎在线观看| 国产一区二区三区小说| 麻豆国产精品va在线观看不卡| 在线亚洲+欧美+日本专区| 一二三区不卡| a'aaa级片在线观看| 红桃av在线播放| 男人日女人视频网站| 亚洲永久在线观看| 欧美一卡二卡三卡| 免费网站看v片在线a| 成人天堂av| 天堂а√在线8种子蜜桃视频| 你懂的视频在线播放| 免费高潮视频95在线观看网站| 国产亚洲观看| 国产97在线|亚洲| 1024成人| 91日本视频在线| 精品无人区太爽高潮在线播放| 欧美 日韩 国产 一区| 97欧美在线视频| 欧美在线播放| 久久久精品天堂| 国产精品三级电影| 亚洲色图.com| 欧美一区二区三级| 日本高清不卡视频| 亚洲一区二区三区在线免费 | 亚洲人成电影| 免费av网站在线观看| 黄色国产网站在线播放| 国产黄色一区| 欧美激情在线| 国产精品青草综合久久久久99| 欧美日韩激情一区二区| 国产做受高潮69| 亚洲免费视频一区| 色综合电影网| 欧美一区二区三区婷婷月色| 色偷偷av一区二区三区| 精选一区二区三区四区五区| 中文字幕在线影视资源| 免费网站在线观看人| 一区二区在线影院| 亚洲麻豆国产自偷在线| 欧美乱人伦中文字幕在线| 午夜精品一区二区三区四区| 国产免费a∨片在线观看不卡| 色狠狠一区二区三区|