十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
這篇文章主要介紹“java怎么配置中心和消息總線”,在日常操作中,相信很多人在java怎么配置中心和消息總線問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”java怎么配置中心和消息總線”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

Spring Cloud Bus
Spring cloud bus通過輕量消息代理連接各個(gè)分布的節(jié)點(diǎn)。這會(huì)用在廣播狀態(tài)的變化(例如配置變化)或者其他的消息指令。Spring bus的一個(gè)核心思想是通過分布式的啟動(dòng)器對spring boot應(yīng)用進(jìn)行擴(kuò)展,也可以用來建立一個(gè)多個(gè)應(yīng)用之間的通信頻道。目前唯一實(shí)現(xiàn)的方式是用AMQP消息代理作為通道,同樣特性的設(shè)置(有些取決于通道的設(shè)置)在更多通道的文檔中。
Spring cloud bus被國內(nèi)很多都翻譯為消息總線,也挺形象的。大家可以將它理解為管理和傳播所有分布式項(xiàng)目中的消息既可,其實(shí)本質(zhì)是利用了MQ的廣播機(jī)制在分布式的系統(tǒng)中傳播消息,目前常用的有Kafka和RabbitMQ。利用bus的機(jī)制可以做很多的事情,其中配置中心客戶端刷新就是典型的應(yīng)用場景之一,我們用一張圖來描述bus在配置中心使用的機(jī)制。

根據(jù)此圖我們可以看出利用Spring Cloud Bus做配置更新的步驟:
1、提交代碼觸發(fā)post給客戶端A發(fā)送bus/refresh
2、客戶端A接收到請求從Server端更新配置并且發(fā)送給Spring Cloud Bus
3、Spring Cloud bus接到消息并通知給其它客戶端
4、其它客戶端接收到通知,請求Server端獲取最新配置
5、全部客戶端均獲取到最新的配置
項(xiàng)目示例
客戶端spring-cloud-config-client改造
1、添加依賴
org.springframework.cloud spring-cloud-starter-bus-amqp
需要多引入spring-cloud-starter-bus-amqp包,增加對消息總線的支持
2、配置文件
## 刷新時(shí),關(guān)閉安全驗(yàn)證 management.security.enabled=false ## 開啟消息跟蹤 spring.cloud.bus.trace.enabled=true spring.rabbitmq.host=192.168.9.89 spring.rabbitmq.port=5672 spring.rabbitmq.username=admin spring.rabbitmq.password=123456
配置文件需要增加RebbitMq的相關(guān)配置,這樣客戶端代碼就改造完成了。
3、測試
依次啟動(dòng)spring-cloud-eureka、spring-cloud-config-server、spring-cloud-config-client項(xiàng)目,在啟動(dòng)spring-cloud-config-client項(xiàng)目的時(shí)候我們會(huì)發(fā)現(xiàn)啟動(dòng)日志會(huì)輸出這樣的一條記錄。
2017-05-26 17:05:38.568 INFO 21924 --- [ main] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/bus/refresh],methods=[POST]}" onto public void org.springframework.cloud.bus.endpoint.RefreshBusEndpoint.refresh(java.lang.String)說明客戶端已經(jīng)具備了消息總線通知的能力了,為了更好的模擬消息總線的效果,我們更改客戶端spring-cloud-config-client項(xiàng)目的端口為8003、8004依次啟動(dòng),這樣測試環(huán)境就準(zhǔn)備好了。啟動(dòng)后eureka后臺效果圖如下:

我們先分別測試一下服務(wù)端和客戶端是否正確運(yùn)行,訪問:http://localhost:8001/neo-config/dev,返回信息:
{
"name": "neo-config",
"profiles": [
"dev"
],
"label": null,
"version": null,
"state": null,
"propertySources": [
{
"name": "https://github.com/ityouknow/spring-cloud-starter/config-repo/neo-config-dev.properties",
"source": {
"neo.hello": "hello im dev"
}
}
]
}說明server端都正常讀取到了配置信息。
依次訪問:http://localhost:8002/hello、http://localhost:8003/hello、http://localhost:8004/hello,返回:hello im dev。說明客戶端都已經(jīng)讀取到了server端的內(nèi)容。
現(xiàn)在我們更新neo-config-dev.properties 中neo.hello的值為hello im dev update并提交到代碼庫中,訪問:http://localhost:8002/hello 依然返回hello im dev。我們對端口為8002的客戶端發(fā)送一個(gè)/bus/refresh的post請求。在win下使用下面命令來模擬webhook.
curl -X POST http://localhost:8002/bus/refresh
執(zhí)行完成后,依次訪問:http://localhost:8002/hello、http://localhost:8003/hello、http://localhost:8004/hello,返回:hello im dev update。說明三個(gè)客戶端均已經(jīng)拿到了最新配置文件的信息,這樣我們就實(shí)現(xiàn)了圖一中的示例。
到此,關(guān)于“java怎么配置中心和消息總線”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!