Spring Cloud 入門教程(十):和RabbitMQ的整合 -- 消息總線Spring Cloud Netflix Bus


在本教程第三講Spring Cloud 入門教程(三): 配置自動刷新中,通過POST方式向客戶端發送/refresh請求, 可以讓客戶端獲取到配置的最新變化。但試想一下, 在分布式系統中,如果存在很多個客戶端都需要刷新改配置,通過這種方式去刷新也是一種非常痛苦的事情。那有沒有什么辦法讓系統自動完成呢? 之前我們提到用githook或者jenkins等外部工具來觸發。現在說另外一種思路, 如果refresh命令可以發送給config server,然后config server自動通知所有config client, 那么就可以大大簡化配置刷新工作。這樣,雖然仍然需要通過refresh命令觸發, 但通過webhook等鈎子方式, 我們只需要將關聯的命令掛到配置中心上,而不需要每個配置客戶端都去關聯。

現在,我們通過整合消息隊列Rabbitmq來完成這件事。我們的目標是, 當git倉庫中的配置一旦更改,將refresh命令發送給配置中心,然后配置中心通過消息隊列,自動通知所有使用了該配置的刷新各自配置。

Spring Cloud Netflix Bus是Spring Cloud的消息機制,當Git Repository 改變時,通過POST請求Config Server的/bus/refresh,Config Server 會從repository獲取最新的信息並通過amqp傳遞給client,如圖所示.

1. RabbitMQ的安裝和配置的過程,這里就不贅述了。

2. 以第三節的程序為基礎, config Server和config client兩個項目中均添加一些內容, 在pom.xml中增加

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

2. 在配置文件bootstrap.yml(config client里面是application.yml)中增加關於RabbitMQ的連接和用戶信息:

spring:
    rabbitmq:
       host: localhost
       port: 5672
       username: springcloud
       password: 123456

3. 以上配置高好后,配置刷新,就只需要向config server發送 /bus/refresh的POST請求就可以了. 

4. 如果用poster等發送POST請求是出現錯誤:“Full authentication is required to access this resource.", 那么可以在yml配置文件中加入以下內容禁止Config server的權限攔截。

management:
  security:
    enabled: false  #忽略權限攔截

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM