首页 >热点 > > 正文

使用 Spring Cloud Bus 和 Spring Cloud Stream 集成实现基于消息的事件驱动

腾讯云 2023-04-23 00:54:40

基于消息的事件驱动是一种常见的微服务架构设计模式,它将不同的微服务之间通过消息进行通信,实现松耦合、高可伸缩性和高可靠性。在这种架构下,每个微服务都是独立的,它们可以在消息传递的过程中进行异步操作,这使得整个系统的性能得到了很大的提升。

在 Spring Cloud 中,我们可以使用 Spring Cloud Bus 和 Spring Cloud Stream 集成来实现基于消息的事件驱动。Spring Cloud Bus 是一个消息总线,它可以在微服务之间传递消息,可以将所有微服务视为一个整体,向所有微服务广播消息或向指定的微服务发送消息。Spring Cloud Stream 是一个消息驱动的微服务框架,它可以轻松地将消息通道与微服务进行集成。

准备工作

首先,我们需要在 pom.xml 文件中添加以下依赖:


(资料图片)

    org.springframework.cloud    spring-cloud-starter-bus-amqp    org.springframework.cloud    spring-cloud-stream-binder-rabbit

这些依赖将会引入 Spring Cloud Bus 和 Spring Cloud Stream 的相关库,并且使用 RabbitMQ 作为消息代理。如果你想使用其他消息代理,可以根据实际需求进行修改。

创建消息通道

在这个例子中,我们将创建一个名为 myChannel 的消息通道,用于在微服务之间传递消息。在创建消息通道之前,我们需要在 application.yml 文件中添加以下配置:

spring:  cloud:    stream:      bindings:        myChannel:          destination: myChannel

这个配置将创建一个名为 myChannel 的消息通道,并将它绑定到 RabbitMQ 的 myChannel 队列上。现在,我们可以在代码中使用 @Input 和 @Output 注解来定义输入和输出消息通道了。

public interface MyChannel {    String INPUT = "myInput";    String OUTPUT = "myOutput";    @Input(INPUT)    SubscribableChannel input();    @Output(OUTPUT)    MessageChannel output();}

这个接口定义了一个名为 MyChannel 的消息通道,其中包括一个名为 myInput 的输入消息通道和一个名为 myOutput 的输出消息通道。

发布消息

在这个例子中,我们将创建一个名为 MyController 的控制器类,该类将发布一个名为 MyMessage 的消息到 myOutput 消息通道上。

@RestControllerpublic class MyController {    @Autowired    private MessageChannel output;    @PostMapping("/send")    public void sendMessage(@RequestBody MyMessage message) {        output.send(MessageBuilder.withPayload(message).build());    }}

这个控制器类注入了名为 output 的 MessageChannel,用于向 myOutput 消息通道发送消息。在 sendMessage 方法中,我们通过 MessageBuilder 创建一个名为 message 的 MyMessage 消息,然后通过 output.send 方法将这个消息发送到 myOutput 消息通道上。

处理消息

在这个例子中,我们将创建一个名为 MyListener 的监听器类,该类将监听 myInput 消息通道上的消息,并将消息打印到控制台上。

@EnableBinding(MyChannel.class)public class MyListener {    @StreamListener(MyChannel.INPUT)    public void handleMessage(MyMessage message) {        System.out.println("Received message: " + message);    }}

这个监听器类使用 @EnableBinding 注解将 MyChannel 消息通道绑定到 Spring Cloud Stream 上。在 handleMessage 方法中,我们使用 @StreamListener 注解监听 myInput 消息通道上的消息,当有消息到来时,Spring Cloud Stream 将自动将消息转换为 MyMessage 类型,并将其传递给 handleMessage 方法进行处理。在这个例子中,我们只是简单地将消息打印到控制台上,你可以根据实际需求进行修改。

运行测试

现在,我们已经创建了消息通道、发布了消息和处理了消息,我们可以启动应用程序并测试它了。首先,我们需要在终端窗口中启动 RabbitMQ,执行以下命令:

cssCopy codedocker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management

这个命令将启动一个名为 rabbitmq 的容器,并将其映射到本地主机的 5672 和 15672 端口上。现在,我们可以启动应用程序并访问 http://localhost:8080/send发送消息了。在控制台中,你应该可以看到类似下面的输出:

Received message: MyMessage{id=1, content="Hello, world!"}

这表明消息已经成功传递到了 myInput 消息通道,并被 MyListener 监听到并处理了。

上一篇: 下一篇:
x
推荐阅读

使用 Spring Cloud Bus 和 Spring Cloud Stream 集成实现基于消息的事件驱动

2023-04-23

当前观察:2023沃丰科技人工智能应用大会发布“原心引擎2.0”

2023-04-22

high damage什么意思_damage是什么意思 今日热议

2023-04-22

【股帅】看盘随笔及精选股池(2023.4.21)|全球速读

2023-04-22

每日热讯!推进绿色农业发展 四川内江市市中区扎实做好这项工作

2023-04-22

康若菲而斯 上海企业发展有限公司

2023-04-22

如何在烤肉店烤肉-环球新视野

2023-04-22

教科文组织原副总干事:非中合作造福世界

2023-04-22

WTT冠军赛澳门站:国乒包揽女单四强 今晚上演男、女单半决赛 世界热议

2023-04-22

世界时讯:利好政策助力延吉二手车市场回暖

2023-04-22

淡扫蛾眉朝画师_淡扫蛾眉-全球实时

2023-04-22

深圳六旬工人大叔街头弹钢琴走红!网友:这双手弹得出浪漫、扛得起生活-当前快播

2023-04-22

乒乓球胶皮蝴蝶有几种?_乒乓球胶皮蝴蝶大巴 全球看热讯

2023-04-22

15万预算买家用轿车,驱逐舰05对比本田型格,优势能有多大?|全球微动态

2023-04-22

40余年致力输血研究,退休日最后一次无偿献血

2023-04-22

当前速递!二年级用在在在在造句怎么造_二年级用在在在在造句

2023-04-22

淡马锡减持"宇宙行",什么情况?最新回应来了!|全球头条

2023-04-22

天天热点!曾凡博G2赛后总结本赛季:要对球迷抱歉 休赛期好好提升自己

2023-04-22

除痘印痘坑_除痘印|观察

2023-04-22

后宫系统小说之类的(后宫升级类的小说越多越好) 每日热文

2023-04-22

拉圣诞雪橇的鹿是什么鹿 圣诞雪橇是什么动物拉的

2023-04-22

世界热文:陈茂波:正在优化“跨境理财通”,希望能在南沙及前海成立保险售后服务中心

2023-04-22

微动态丨郎平在法国晒与巩俐同框照,十指相扣感情好,一起逛街购物被偶遇

2023-04-22

最新资讯:多款新品登场,东风日产按下电驱化“快进键”

2023-04-22

巨蟹座、天秤座、双鱼座:最适合从事哪些职业?

2023-04-22

假期首日南宁车站迎来客流出行高峰

2023-04-22

【独家】进一步缓解续航焦虑 iQOO 12 Pro或内置5000mAh电池并支持200W充电

2023-04-22

这几款好用到爆的Mac软件,你安装了吗_环球聚焦

2023-04-22

今日关注:维多利亚3开发日志 #82:《Voice of the People》

2023-04-22

《灌篮高手》上映两天票房破2亿,观众:我们与青春重逢了 热头条

2023-04-22

世界快报:世界读书日|微视频:阅读,遇见美好

2023-04-22

这个论坛,重点关注“Z世代”-播资讯

2023-04-22

python-异常处理和错误调试-异步IO程序的调试方法(三) 天天报资讯

2023-04-22

环球快看点丨快讯2023-04-21 16:19:28

2023-04-22

AWE2023来了!高端家电gorenje新品烤箱抢先剧透

2023-04-22

天天快看点丨邯郸市公安局多措并举推进文明城市建设

2023-04-22

英超阿森纳连扳两球3-3圣徒 没退路了阿森纳多赛2场领先5分下轮战曼城若不胜将失主动权(今日/头条) 世界热门

2023-04-22

环球速递!第八艘,入列!

2023-04-22

国家外汇管理局:3月银行结汇12956亿元人民币,售汇14053亿元人民币|世界速讯

2023-04-22

南京比较正规的男科医院有哪些? 南京治疗早泄哪家好?

2023-04-22

春节莲藕怎么保存?

2023-04-22

焦点关注:XBB.1.16流行情况如何?会导致结膜炎吗?国家疾控局回应

2023-04-22

仕佳光子:2023年第一季度净利润约-319万元_每日焦点

2023-04-22

强冷空气继续影响我国 部分地区迎来“俯冲式降温” 世界今亮点

2023-04-22

每日速递:昨夜今晨:马斯克SpaceX火箭试飞爆炸 vivo推出折叠屏新品X Fold 2与X Flip

2023-04-22

全球今头条!养生馆的经营范围有什么要求_养生馆的经营范围有哪些

2023-04-22

世界观察:全面实施种植牙集采政策,长沙美奥口腔医院新品上市

2023-04-22

广州建设工程消防协会网站开通_天天短讯

2023-04-22

最新消息:海牛客场战平河南!保级路上每个积分都弥足珍贵

2023-04-22

哪些结直肠癌患者容易复发?复旦专家最新研发了一种预测方法 微动态

2023-04-22

帐和账的区别在哪里_帐和账的区别组词

2023-04-22

泰国将从9月起对外国游客征收入境费 全球观焦点

2023-04-22

张家界特产_张家界的特产介绍-环球今头条

2023-04-22

宝马蒸发市值相当于近5亿个冰淇淋

2023-04-22

全球信息:金融行业:BloobergGPT,金融领域的500亿参数的语言模型

2023-04-22

曾经想都不敢想的事情实现了 山海炮PHEV

2023-04-22

世界短讯!领峰环球分享炒黄金必知的10条规则与冷知识!入门看这篇就够了!

2023-04-22

如法网登录平台_如法网登陆平台_全球短讯

2023-04-22

煤省山西创单季度煤炭生产新高

2023-04-22

环球头条:我乐家居股东户数增加12.92%,户均持股37.77万元

2023-04-22

环球最资讯丨贸易、投资、基建:中国“三驾马车”带动拉美就业

2023-04-22

观天下!止水钢板规范图集是哪个(止水钢板规范图集)

2023-04-21

天天播报:南网储能:签订肇庆绿色能源项目开发框架协议

2023-04-21

世界最新:豆瓣 2.8,它应该被钉上国产片耻辱柱

2023-04-21

天津市委党校全称_天津市委党校学历认证

2023-04-21

行动教育2022年净利1.11亿元,同比下滑35.1%

2023-04-21

世界微动态丨金刻羽简历照片_金刻羽简历

2023-04-21

最新快讯!注意!人民同泰将于5月25日召开股东大会

2023-04-21

二寸照片的尺寸是多少_二寸照片

2023-04-21

赤水市长沙镇:荒地变良田 农业生产忙_天天热议

2023-04-21

天天滚动:欧洲中期票据

2023-04-21

外交部:中俄关系与美国搞小圈子完全不同 今日视点

2023-04-21

2023上海车展·人民车友会 比亚迪海洋网全新车型亮相 张卓:积极拥抱新能源时代 全球今日报

2023-04-21

GSC将推出《勇气默示录》主人公林格亚贝尔PUP手办

2023-04-21

每日速讯:大宗交易:机构账户卖出新特电气492.24万元(04-21)

2023-04-21

每日播报!执行程序中对“分配方案”异议的性质判断

2023-04-21

淘金币怎么用最合算_淘金币怎么用

2023-04-21

欧联杯:罗马晋级四强

2023-04-21

环球消息!黄油可以冷冻多长时间?

2023-04-21

本赛季欧战积分榜:英超、意甲、德甲前3,法甲仅第7-当前独家

2023-04-21

今热点:郑州市第六十四中学举行下半学期学情分析

2023-04-21

【公司债新发公告】23元禾K2今日发布发行公告-焦点速递

2023-04-21

击败墨菲闯入十六强,小将斯佳辉成斯诺克世锦赛中国军团独苗

2023-04-21

天天观焦点:第一次写作文600字作文(必备38篇)

2023-04-21

当日快讯:龙虎榜 | 掌阅科技今日涨停,沪股通专用买入1446.18万元并卖出1985.53万元

2023-04-21

“天空剧场”今上演“混合食” 可惜!上海无缘此天象-全球微速讯

2023-04-21

北京打造会馆演艺新空间 正乙祠戏楼多场演出开票即售罄_环球今亮点

2023-04-21

新增21种新专业,最新大学专业热在哪?冷在哪? 世界报道

2023-04-21

资讯:生活需要更多诗意的瞬间(新语)

2023-04-21

澄江生物群等刺虫研究取得新进展

2023-04-21

“新农人”成为乡村振兴生力军

2023-04-21

“狂飙”的库迪咖啡,需要放慢脚步

2023-04-21

Lazada筹备“全托管”运营 计划下月启动

2023-04-21

世界快播:炖鸡肉怎么做呢?先焯水还是直接炖?都不对,教你一招,鲜嫩入味不腥不柴

2023-04-21

【快播报】船舶板块逆势大涨,中船科技涨停,国瑞科技大涨9%,中国重工、中船防务、中国船舶、中国海防大涨超5%

2023-04-21

环球今日报丨新华社权威快报|5G基站超264万个 我国数字化基础不断夯实

2023-04-21

全球连线|美国“泄密门”惹众怒:联合国表达关切,墨西哥指责“傲慢”

2023-04-21

五一假期十大热门城市 北京广州上海前三_时快讯

2023-04-21

今日视点:宁陕县公安局“321”机制持续深化重点项目“警长制”

2023-04-21

东吴证券:2022年年归母净利润17.35亿元,同比下降27.45%

2023-04-21