使用 Spring Cloud Bus 和 Spring Cloud Stream 集成實(shí)現(xiàn)基于消息的事件驅(qū)動(dòng) 每日精選
基于消息的事件驅(qū)動(dòng)是一種常見(jiàn)的微服務(wù)架構(gòu)設(shè)計(jì)模式,它將不同的微服務(wù)之間通過(guò)消息進(jìn)行通信,實(shí)現(xiàn)松耦合、高可伸縮性和高可靠性。在這種架構(gòu)下,每個(gè)微服務(wù)都是獨(dú)立的,它們可以在消息傳遞的過(guò)程中進(jìn)行異步操作,這使得整個(gè)系統(tǒng)的性能得到了很大的提升。
在 Spring Cloud 中,我們可以使用 Spring Cloud Bus 和 Spring Cloud Stream 集成來(lái)實(shí)現(xiàn)基于消息的事件驅(qū)動(dòng)。Spring Cloud Bus 是一個(gè)消息總線(xiàn),它可以在微服務(wù)之間傳遞消息,可以將所有微服務(wù)視為一個(gè)整體,向所有微服務(wù)廣播消息或向指定的微服務(wù)發(fā)送消息。Spring Cloud Stream 是一個(gè)消息驅(qū)動(dòng)的微服務(wù)框架,它可以輕松地將消息通道與微服務(wù)進(jìn)行集成。
(相關(guān)資料圖)
準(zhǔn)備工作
首先,我們需要在 pom.xml 文件中添加以下依賴(lài):
org.springframework.cloud spring-cloud-starter-bus-amqp org.springframework.cloud spring-cloud-stream-binder-rabbit
這些依賴(lài)將會(huì)引入 Spring Cloud Bus 和 Spring Cloud Stream 的相關(guān)庫(kù),并且使用 RabbitMQ 作為消息代理。如果你想使用其他消息代理,可以根據(jù)實(shí)際需求進(jìn)行修改。
創(chuàng)建消息通道
在這個(gè)例子中,我們將創(chuàng)建一個(gè)名為 myChannel 的消息通道,用于在微服務(wù)之間傳遞消息。在創(chuàng)建消息通道之前,我們需要在 application.yml 文件中添加以下配置:
spring: cloud: stream: bindings: myChannel: destination: myChannel
這個(gè)配置將創(chuàng)建一個(gè)名為 myChannel 的消息通道,并將它綁定到 RabbitMQ 的 myChannel 隊(duì)列上?,F(xiàn)在,我們可以在代碼中使用 @Input 和 @Output 注解來(lái)定義輸入和輸出消息通道了。
public interface MyChannel { String INPUT = "myInput"; String OUTPUT = "myOutput"; @Input(INPUT) SubscribableChannel input(); @Output(OUTPUT) MessageChannel output();}
這個(gè)接口定義了一個(gè)名為 MyChannel 的消息通道,其中包括一個(gè)名為 myInput 的輸入消息通道和一個(gè)名為 myOutput 的輸出消息通道。
發(fā)布消息
在這個(gè)例子中,我們將創(chuàng)建一個(gè)名為 MyController 的控制器類(lèi),該類(lèi)將發(fā)布一個(gè)名為 MyMessage 的消息到 myOutput 消息通道上。
@RestControllerpublic class MyController { @Autowired private MessageChannel output; @PostMapping("/send") public void sendMessage(@RequestBody MyMessage message) { output.send(MessageBuilder.withPayload(message).build()); }}
這個(gè)控制器類(lèi)注入了名為 output 的 MessageChannel,用于向 myOutput 消息通道發(fā)送消息。在 sendMessage 方法中,我們通過(guò) MessageBuilder 創(chuàng)建一個(gè)名為 message 的 MyMessage 消息,然后通過(guò) output.send 方法將這個(gè)消息發(fā)送到 myOutput 消息通道上。
處理消息
在這個(gè)例子中,我們將創(chuàng)建一個(gè)名為 MyListener 的監(jiān)聽(tīng)器類(lèi),該類(lèi)將監(jiān)聽(tīng) myInput 消息通道上的消息,并將消息打印到控制臺(tái)上。
@EnableBinding(MyChannel.class)public class MyListener { @StreamListener(MyChannel.INPUT) public void handleMessage(MyMessage message) { System.out.println("Received message: " + message); }}
這個(gè)監(jiān)聽(tīng)器類(lèi)使用 @EnableBinding 注解將 MyChannel 消息通道綁定到 Spring Cloud Stream 上。在 handleMessage 方法中,我們使用 @StreamListener 注解監(jiān)聽(tīng) myInput 消息通道上的消息,當(dāng)有消息到來(lái)時(shí),Spring Cloud Stream 將自動(dòng)將消息轉(zhuǎn)換為 MyMessage 類(lèi)型,并將其傳遞給 handleMessage 方法進(jìn)行處理。在這個(gè)例子中,我們只是簡(jiǎn)單地將消息打印到控制臺(tái)上,你可以根據(jù)實(shí)際需求進(jìn)行修改。
運(yùn)行測(cè)試
現(xiàn)在,我們已經(jīng)創(chuàng)建了消息通道、發(fā)布了消息和處理了消息,我們可以啟動(dòng)應(yīng)用程序并測(cè)試它了。首先,我們需要在終端窗口中啟動(dòng) RabbitMQ,執(zhí)行以下命令:
cssCopy codedocker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management
這個(gè)命令將啟動(dòng)一個(gè)名為 rabbitmq 的容器,并將其映射到本地主機(jī)的 5672 和 15672 端口上?,F(xiàn)在,我們可以啟動(dòng)應(yīng)用程序并訪(fǎng)問(wèn) http://localhost:8080/send發(fā)送消息了。在控制臺(tái)中,你應(yīng)該可以看到類(lèi)似下面的輸出:
Received message: MyMessage{id=1, content="Hello, world!"}
這表明消息已經(jīng)成功傳遞到了 myInput 消息通道,并被 MyListener 監(jiān)聽(tīng)到并處理了。
標(biāo)簽:
相關(guān)文章
使用 Spring Cloud Bus 和 Spring Cloud Stream 集成實(shí)現(xiàn)基于消息的事件驅(qū)動(dòng) 每日精選
?基于消息的事件驅(qū)動(dòng)是一種常見(jiàn)的微服務(wù)架構(gòu)設(shè)計(jì)模式,它將不同的微服務(wù)之間通過(guò)消息進(jìn)行通信,實(shí)現(xiàn)松耦合、
北汽新能源用實(shí)力說(shuō)話(huà)!極狐阿爾法S全新HI版領(lǐng)跑自動(dòng)駕駛 通訊
?在科技迅速發(fā)展的今天,汽車(chē)早已不再是一臺(tái)純粹的駕乘工具,而是成為了智能出行生活的好伙伴。
河北寧晉開(kāi)展全民國(guó)家安全教育日宣傳教育活動(dòng)-天天快訊
?中國(guó)青年網(wǎng)石家莊4月18日電4月15日,河北省寧晉縣開(kāi)展2023年全民國(guó)家安全教育日宣傳教育活動(dòng)。寧晉縣領(lǐng)導(dǎo)石
【全球聚看點(diǎn)】六類(lèi)執(zhí)法突出問(wèn)題將被重點(diǎn)整治
?本報(bào)訊20日下午,我市召開(kāi)動(dòng)員部署會(huì),全面部署道路交通安全和運(yùn)輸執(zhí)法領(lǐng)域突出問(wèn)題專(zhuān)項(xiàng)整治工作。市領(lǐng)導(dǎo)王
日本媒體評(píng)選,在中國(guó)非常熱賣(mài),但是日本本土不受歡迎車(chē)型列表_全球滾動(dòng)
?2022年中國(guó)的新車(chē)銷(xiāo)售量達(dá)到了2686萬(wàn)輛,這是自2009年以來(lái)已經(jīng)連續(xù)14年成為全球第一大新車(chē)銷(xiāo)售市場(chǎng)。在中國(guó)
嚴(yán)重?fù)矶拢”本┊?dāng)前全網(wǎng)交通指數(shù)8.1|簡(jiǎn)訊
?據(jù)北京市交通委員會(huì)網(wǎng)站消息,4月23日08:15-08:20,全網(wǎng)交通指數(shù)為8 1,達(dá)到嚴(yán)重?fù)矶录?jí)別,平均速度為21 3
通訊!王一博家基因有多強(qiáng)大?看到他“姐姐”的照片后,男粉絲表示老婆
?哈嘍,大家好!看娛樂(lè)資訊,談明星八卦!就來(lái)找小編,每天都會(huì)帶來(lái)新鮮好看的娛樂(lè)八卦哦~王一博這種酷蓋兒
今日Operation timed out after 150011 milliseconds with 0 bytes received 世界快播
?Operationtimedoutafter150011millisecondswith0bytesreceived很多人還不知道,現(xiàn)在讓我們
精選!TES轉(zhuǎn)會(huì)期又有大動(dòng)作,中單位置再添新人,和rookie競(jìng)爭(zhēng)首發(fā)位置
?最近關(guān)于電競(jìng)?cè)Φ南⑹呛芏嗳嗽陉P(guān)注的,相信大家也看到不少這方面的消息了,這幾天有一些事情被眾多人討論
海軍戰(zhàn)力有多強(qiáng)?未來(lái)還將有哪些新質(zhì)作戰(zhàn)力量列裝?專(zhuān)家解讀
?除青島港開(kāi)放的四艘艦艇外,寧波梅山港開(kāi)放“和平方舟”號(hào)醫(yī)院船、寧波艦,上海楊浦某軍港開(kāi)放武夷山艦,江
楊丁柳 丁柳元個(gè)人資料 信息
?今天來(lái)聊聊關(guān)于楊丁柳,丁柳元個(gè)人資料的文章,現(xiàn)在就為大家來(lái)簡(jiǎn)單介紹下楊丁柳,丁柳元個(gè)人資料,希望對(duì)各
歐的
?1、歐的極簡(jiǎn)窄邊系統(tǒng)門(mén)窗誕生于中國(guó)佛山,于2009年成立,屬于知初建筑科技(廣東)有限公司旗下品牌,主營(yíng)
黃河流域住房金融高質(zhì)量發(fā)展暨住房公積金一體化推進(jìn)工作會(huì)議舉行 環(huán)球關(guān)注
?黃河流域住房金融高質(zhì)量發(fā)展暨住房公積金一體化推進(jìn)工作會(huì)議舉行,黃河,貸款,住房金融,住房公積金
苗價(jià)反彈!今晚到明天(4月23號(hào))817肉雞全國(guó)各地毛雞行情快報(bào) 熱門(mén)
?雞苗行情信息參考雞苗地區(qū)價(jià)格聯(lián)系方式出箱價(jià)聊城0 70益生909明日價(jià)格山東1 70(省內(nèi)到戶(hù)價(jià))張總133568812
每日熱文:剛大木綜合癥_剛大木
?1、[哦列挖剛大木!==我是高達(dá)!]DA☆ZE,語(yǔ)氣助詞,一般出現(xiàn)在句尾。2、簡(jiǎn)單的說(shuō)是強(qiáng)調(diào)句子的一種鄭重其事
01國(guó)家與資本的關(guān)系是什么?21世紀(jì)帝國(guó)主義理論解析-課程筆記
?01國(guó)家與資本的關(guān)系是什么?21世紀(jì)帝國(guó)主義理論解析01國(guó)家與資本的關(guān)系是什么?21世紀(jì)帝國(guó)主義理論解析一、
孔祥萍
?1、孔祥萍,臨沂大學(xué)音樂(lè)學(xué)院副教授。2、1984年7月畢業(yè)于山東師范大學(xué)藝術(shù)系,1984年7月至1985年8月在費(fèi)縣
知己同城交友網(wǎng)登錄(知己網(wǎng)網(wǎng)絡(luò)交友)_每日時(shí)訊
?成立于2002年,是國(guó)內(nèi)大型婚戀交友服務(wù)網(wǎng)站,專(zhuān)注于提供婚戀交友服務(wù)。??谥壕W(wǎng)絡(luò)科技有限公司成立于2002
法蘭克王國(guó)歷史_法蘭克王國(guó)
?1、5世紀(jì)末~10世紀(jì)末由日耳曼法蘭克人在西歐建立的封建王國(guó)。2、法蘭克人是日耳曼人強(qiáng)大的一支部落,3世紀(jì)
“出乎藝料”美食藝術(shù)節(jié)5月開(kāi)啟 “風(fēng)味楊浦”煙火美食榜征集啟動(dòng)|觀(guān)速訊
?當(dāng)美食與藝術(shù)攜手,會(huì)碰撞出怎樣的火花?“出乎藝料”美食藝術(shù)節(jié)將于5月20日至6月23日舉辦。這個(gè)以美食為主
SMM分析:銅精礦現(xiàn)貨供應(yīng)相對(duì)寬松 現(xiàn)貨加工費(fèi)持續(xù)回升
?4月份以來(lái)SMM銅精礦現(xiàn)貨加工費(fèi)因銅精礦現(xiàn)貨供應(yīng)相對(duì)寬裕而持續(xù)回升,海外礦山生產(chǎn)端和發(fā)運(yùn)端的持續(xù)修復(fù)
世界快播:中字頭午后普遍走弱,中國(guó)聯(lián)通跌近4%
?4月21日下午,中字頭午后普遍走弱,中國(guó)聯(lián)通跌近4%,中國(guó)海誠(chéng)、中國(guó)鋁業(yè)、中國(guó)電建、中國(guó)交建集體走低。
四個(gè)龍念什么字火 四個(gè)龍念什么
?今天來(lái)聊聊關(guān)于四個(gè)龍念什么字火,四個(gè)龍念什么的文章,現(xiàn)在就為大家來(lái)簡(jiǎn)單介紹下四個(gè)龍念什么字火,四個(gè)龍
最新消息:[快訊]澤璟制藥公布年報(bào)
?CFi CN訊:澤璟制藥(股票代碼:688266)公布澤璟制藥2022年年度報(bào)告摘要。2022年2021年本年比上年增減(%)2
昔日沙海變綠洲 綠洲變金山 甘肅金塔荒涼漸漸遠(yuǎn)去|環(huán)球今亮點(diǎn)
?央視網(wǎng)消息:甘肅金塔是全國(guó)荒漠化、沙漠化最嚴(yán)重的地區(qū)之一,干旱缺水、風(fēng)大沙多,在當(dāng)?shù)厝说挠洃浿校荒?/p>
精選!事關(guān)路網(wǎng)建設(shè)!我盟一項(xiàng)可行性研究報(bào)告獲自治區(qū)批復(fù)
?事關(guān)路網(wǎng)建設(shè)!我盟一項(xiàng)可行性研究報(bào)告獲自治區(qū)批復(fù)
粵港澳大灣區(qū)足球冠軍聯(lián)賽東莞賽區(qū)啟動(dòng) 環(huán)球觀(guān)熱點(diǎn)
?中新網(wǎng)廣東新聞4月22日電 (唐貴江岳超蓮)2022 23賽季“永泰醬油杯”粵港澳大灣區(qū)足球冠軍聯(lián)賽(七人制)“泛茶
「601633」男子欲刺殺米哈游創(chuàng)始人被抓:疑與手游《崩壞3》有關(guān)|世界速看
?4月24日晚,傳音訊稱(chēng),米哈游公司園區(qū)現(xiàn)場(chǎng)抓捕了一名欲持刀刺殺公司兩位創(chuàng)始人的暴徒。4月25日,紅星資本局
注入高質(zhì)量發(fā)展新動(dòng)能!新一批30個(gè)重點(diǎn)項(xiàng)目集中簽約落戶(hù)普陀
?注入高質(zhì)量發(fā)展新動(dòng)能!新一批30個(gè)重點(diǎn)項(xiàng)目集中簽約落戶(hù)普陀