springcloud(四)消息總線Bus

BUS介紹

Spring Cloud Bus將分佈式系統的節點與輕量級消息代理鏈接。這可以用於廣播狀態更改(例如配置更改)或其他管理指令。一個關鍵的想法是,Bus就像一個擴展的Spring Boot應用程序的分佈式執行器,但也可以用作應用程序之間的通信渠道。當前唯一的實現是使用AMQP代理作爲傳輸,但是相同的基本功能集(還有一些取決於傳輸)在其他傳輸的路線圖上。

簡單點來說,就是動態刷新配置中心配置文件,讓服務可以不用重啓就能讓配置文件生效,bus在配置中心通過廣播的形式來告訴所有訂閱者刷新配置文件,目前這種機制採用消息隊列實現,支持rabbitmq、Kafka消息隊列,我將用rabbitmq介紹一下bus的具體使用。

搭建環境

1.新建eureka
請參考springcloud(一)註冊中心eureka

2.新建config配置中心
請參考:springcloud(二)配置中心config

3.在cloud-config服務端

引入bus服務端依賴

 <!--健康檢查-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

<!--消息總線bus-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>
bootstrap.yml配置文件引入rabbitmq以及放開權限:

server:
  port: 9100  #端口

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/ #註冊中心地址

spring:
  application:
    name: cloud-config  #服務名
  profiles:
#    active: native #拉取本地配置
      active: git #拉取git配置
  #    active: subversion
  cloud:
    bus:
      trace:
        enabled: true
      enabled: true
    config:
      server:
#        native:
#          search-locations: file:F:\git\springcloud\config #本地拉起
          git:
            uri: https://github.com/361426201/cloud-config.git #git地址   需要注意一點,我拉取的是公共倉庫,不需要用戶名和密碼,如果你拉取的是私有倉庫,需要加上用戶名密碼
#            username: xxxx
        #    password: xxxx
          label: master #指定拉取git的那個分支
  #        svn:
  #          uri: xxxxxxxxxxxxx  #svn的地址
  #          username: xxx  #用戶名
  #          password: xxx  #密碼
  #          default-label: trunk  #類似git中的分支
  #          search-paths: {application}  #可有可無
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: guest
    password: guest

management:
  endpoints:
    web:
      exposure:
        include: '*'


新增配置:

4.配置客戶端1:cloud-user     2:cloud-order
      引入依賴:
 

 <!--消息總線bus-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>

啓動cloud-eureka、cloud-config、cloud-user、cloud-order
 

cloud-user測試controller:

cloud-order測試controller:

第一次訪問分別訪問localhost:8800/testlocalhost:8900/test

 現在修改git上面的配置文件

現在再次訪問,你會發現name並沒有發生改變,那是因爲bus需要手動刷新,所以還需要一步

5.訪問接口:localhost:9100/actuator/bus-refresh     POST請求方式

 再次訪問:你會發現配置文件還是沒有發生變化

name還是張三,並沒有變成tom,這是爲什麼呢? 這個坑讓我好找,這是因爲我們還缺少一個註解,那就是在使用配置的類中加入:@RefreshScope

重啓cloud-user、cloud-order

不過,我們還需要再次修改一下git上面的配置文件

刷新配置文件:localhost:9100/actuator/bus-refresh

再次訪問:localhost:8800/testlocalhost:8900/test

漂亮,name已經加載到最新的配置文件,這樣配置後,以後修改配置文件就無需再次重啓服務,是不是不要太爽?

 

源碼:https://github.com/361426201/springcloud

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