javascript
SpringCloud 入门教程(十):和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: localhostport: 5672username: springcloudpassword: 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 #忽略權限攔截總結
以上是生活随笔為你收集整理的SpringCloud 入门教程(十):和RabbitMQ的整合 -- 消息总线Spring Cloud Netflix Bus的全部內容,希望文章能夠幫你解決所遇到的問題。