国产传媒18精品免费观看,欧美人妻精品一区二区三区,999热线在线观看,www四虎最新成人永久网站

使用 Spring Cloud Bus 和 Spring Cloud Stream 集成實(shí)現(xiàn)基于消息的事件驅(qū)動(dòng)

首頁(yè) > 資訊 > > 正文

日期:2023-04-21 16:27:19    來(lái)源:騰訊云    

基于消息的事件驅(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è)消息總線,它可以在微服務(wù)之間傳遞消息,可以將所有微服務(wù)視為一個(gè)整體,向所有微服務(wù)廣播消息或向指定的微服務(wù)發(fā)送消息。Spring Cloud Stream 是一個(gè)消息驅(qū)動(dòng)的微服務(wù)框架,它可以輕松地將消息通道與微服務(wù)進(jìn)行集成。

準(zhǔn)備工作

首先,我們需要在 pom.xml 文件中添加以下依賴(lài):


(相關(guān)資料圖)

    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 端口上。現(xiàn)在,我們可以啟動(dòng)應(yī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)到并處理了。

關(guān)鍵詞:

下一篇:鹿寨縣氣象臺(tái)發(fā)布冰雹橙色預(yù)警信號(hào)【II級(jí)/嚴(yán)重】
上一篇:最后一頁(yè)

科技

 
大乳丰满人妻中文字幕日本 | 老七干白结33章| 日韩精品无码视频一区二区蜜桃 | 久久久久久亚洲精品不卡 | 亚洲欧美激情精品一区二区| 一本一道久久a久久精品综合| 国模嫣然生殖欣赏337p| 欧美日韩国产成人高清视频| 久久人人爽人人爽人人AV| 久久夜色精品国产欧美乱| 脱了内裤猛烈进入a片视频免费 | 双性受抽搐潮喷调教老师与学生| 老熟妇仑乱视频一区二区| 99久久人妻无码精品系列| 色精阁久艾草国产www| 三上悠亚公侵犯344在线观看 | 天天躁人人躁人人躁狂躁| 日韩在线观看高清视频| 亚洲欧美强伦一区二区| 欧美激情综合五月色丁香| 狠狠噜天天噜日日噜| 欧美精产国品一二三产品区别| 亚洲444KKKK在线观看无码| 中文字幕久久波多野结衣av| 3dmax动漫 在线观看| 美女扒开腿让男人桶爽| 男人用嘴添女人私密视频| 奶水h人妻销魂共妻高h| 岳把腿扒开让我添| 色翁荡息又大又硬又粗又爽小玲| 腿张大点就可以吃扇贝了| 国产suv精品一区二区四| 青娱乐极品盛宴| 欧美孕交alscan巨交xxx| 欧美激情视频| 女性自慰网站免费观看| 色欲av永久无码精品无码蜜桃| 永久免费av无码网站国产| 啊灬啊灬啊灬快灬高潮了| 偷窥丶妓女丶自由丶l性别| 狠天天狠天天香蕉网|