javascript
SpringCloud 入门教程(十):和RabbitMQ的整合 -- 消息总线Spring Cloud Netflix Bus
在本教程第三講Spring Cloud 入門教程(三): 配置自動(dòng)刷新中,通過POST方式向客戶端發(fā)送/refresh請(qǐng)求, 可以讓客戶端獲取到配置的最新變化。但試想一下, 在分布式系統(tǒng)中,如果存在很多個(gè)客戶端都需要刷新改配置,通過這種方式去刷新也是一種非常痛苦的事情。那有沒有什么辦法讓系統(tǒng)自動(dòng)完成呢? 之前我們提到用githook或者jenkins等外部工具來觸發(fā)。現(xiàn)在說另外一種思路, 如果refresh命令可以發(fā)送給config server,然后config server自動(dòng)通知所有config client, 那么就可以大大簡化配置刷新工作。這樣,雖然仍然需要通過refresh命令觸發(fā), 但通過webhook等鉤子方式, 我們只需要將關(guān)聯(lián)的命令掛到配置中心上,而不需要每個(gè)配置客戶端都去關(guān)聯(lián)。
現(xiàn)在,我們通過整合消息隊(duì)列Rabbitmq來完成這件事。我們的目標(biāo)是, 當(dāng)git倉庫中的配置一旦更改,將refresh命令發(fā)送給配置中心,然后配置中心通過消息隊(duì)列,自動(dòng)通知所有使用了該配置的刷新各自配置。
Spring Cloud Netflix Bus是Spring Cloud的消息機(jī)制,當(dāng)Git Repository 改變時(shí),通過POST請(qǐng)求Config Server的/bus/refresh,Config Server 會(huì)從repository獲取最新的信息并通過amqp傳遞給client,如圖所示.
1. RabbitMQ的安裝和配置的過程,這里就不贅述了。
2. 以第三節(jié)的程序?yàn)榛A(chǔ),?config Server和config client兩個(gè)項(xiàng)目中均添加一些內(nèi)容, 在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)中增加關(guān)于RabbitMQ的連接和用戶信息:
spring:rabbitmq:host: localhostport: 5672username: springcloudpassword: 123456?
3. 以上配置高好后,配置刷新,就只需要向config server發(fā)送 /bus/refresh的POST請(qǐng)求就可以了.?
4. 如果用poster等發(fā)送POST請(qǐng)求是出現(xiàn)錯(cuò)誤:“Full authentication is required to access this resource.", 那么可以在yml配置文件中加入以下內(nèi)容禁止Config server的權(quán)限攔截。
management:security:enabled: false #忽略權(quán)限攔截總結(jié)
以上是生活随笔為你收集整理的SpringCloud 入门教程(十):和RabbitMQ的整合 -- 消息总线Spring Cloud Netflix Bus的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。