springcloud微服務系列教程(八) 消息總線Bus

前言

上篇文章講了Spring Cloud Config組件結合Eureka的案例,經過config server工程能夠統一管理遠程Git倉庫的信息,並結合eureka組件來進行服務註冊,這樣其餘的服務就能夠進行調用從而獲取遠程的配置信息,同時也實現了config server工程的高可用。git

經過這樣的方式來管理配置信息當然方便,但仍有些許業務上的缺陷,那就是若是更改了遠程倉庫的配置信息,config server工程就須要重啓,在高可用的狀況下,將出現啓動多個工程的狀況,這無疑會耗費大量的人力和時間,而Spring Cloud Bus 即可以完美解決這個問題。github

Spring Cloud Bus介紹

Spring cloud bus經過輕量消息代理鏈接各個分佈的節點,能夠用於廣播狀態的變化或者其餘的消息,例如配置信息的變化。其本質是利用MQ的廣播機制在分佈式系統中傳播消息,目前springcloud 中支持的MQ組件有Kafka和RabbitMQ 。本文將講述如何用 Spring Cloud Bus 集合RabbitMQ 來實現刷新更改微服務中的配置信息。
當遠程Git 倉庫的配置更改後,只須要向某一個微服務實例發送一個Post 請求 「/bus/refresh 」,經過消息組件通知其餘微服務實例從新拉取配置文件。架構圖以下:
這裏寫圖片描述web

準備工做

本文的項目用到的消息中間件是RabbitMq,因此讀者們若要本身實現案例效果,需在電腦上安裝好RabbitMq,安裝過程不在此贅述,請你們本身上網查詢。spring

項目實例

由於本文展現的是結合Spring Cloud Bus 更新獲取配置的例子,因此須要用到上一章文章的工程,先改造config-client工程,在pom文件加上起步依賴spring-cloud-starter-bus-amqp:瀏覽器

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

接着是修改配置文件,須要在原有的基礎加上RabbitMq的相關信息,以及spring.cloud.bus的配置,具體以下: 架構

spring:
  application:
    name: config-client
  cloud:
    config:
      label: master
      profile: dev
      uri: http://localhost:1113/
      discovery:
        enabled: true
        service-id: config-server
    bus:
      enabled: true
      trace:
        enabled: true
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest
server:
  port: 1114
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8889/eureka/
management:
  endpoint:
    bus-refresh:
      enabled: true

配置信息裏新增了rabbitMq的地址,端口,用戶名和密碼,以及開啓 bus-refresh 的驗證。依次開啓eureka-server,config-server,config-client三個工程,訪問http://localhost:8889/,能夠看到兩個服務成功註冊。
這裏寫圖片描述
訪問地址http://localhost:1114/user ,能夠看到瀏覽器成功輸出app

yeya

這是git倉庫裏配置文件對應的值,咱們到倉庫裏把值改成 yeya11111111
這裏寫圖片描述
再次訪問http://localhost:1114/user ,發現輸出還是 「yeya」 ,這是由於配置信息改變了,服務沒有重啓的話是讀取不到實時的配置信息的,咱們用postman模擬發出一個post請求http://localhost:8889/bus/refresh ,通知微服務消息更新:
這裏寫圖片描述
在瀏覽器再次訪問 http://localhost:1114/user ,能夠看到瀏覽器成功輸出分佈式

yeya11111111

說明微服務的消息通知成功了。svg

其餘

Spring Cloud Bus能夠實現局部刷新的功能,某些場景下,咱們可能只想刷新部分微服務的配置,此時可經過/bus/refresh端點的destination參數來定位要刷新的應用程序。
例如:/bus/refresh?destination=customers:8000,這樣消息總線上的微服務實例就會根據destination參數的值來判斷是否須要要刷新。其中,customers:8000指的是各個微服務的ApplicationContext ID。
destination參數也能夠用來定位特定的微服務。例如:/bus/refresh?destination=customers:**,這樣就能夠觸發customers微服務全部實例的配置刷新。微服務

源碼地址:https://github.com/Taoxj/SpringCloudDemo/tree/master/busDemo

本文分享 CSDN - 鄙人薛某。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索