当前位置:首页>新闻 > >正文

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

  • 2023-04-22 18:31:12来源:腾讯云

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

在 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 监听到并处理了。

标签:

延伸阅读

推荐阅读

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

基于消息的事件驱动是一种常见的微服务架构设计模式,它将不同的微服务之间通过消息进行通信,实现松耦合、高可伸缩性和高可靠性。在这种架构

返璞归真,小米13 Ultra开启移动影像光学时代!

相比去年的12Ultra,今年小米13Ultra的发布时间提前了不少。显然,在主要竞争对手均完成影像旗舰更新后,小米手机也迫不及待地向大家展示新一

甘肃甘南:2022年新增地标商标量创新高 助特色品牌加速“出海”远航

基于上述政策红利,甘南2022年新增“碌曲藏羊”“卓尼柴胡”等地理标志证明商标6件,年度新增量创历史新高。(资料图)甘南州市场监管局供图...

世界快资讯:东边日出西边雨道是无晴却有晴是哪位诗人写的_东边日出西边雨 道是无晴却有晴怎样的雨景

1、“东边日出西边雨,道是无晴却有晴”,是两个巧妙的隐喻,用的是语意双关的手法。2、“东边日出”是“有晴”,“西边雨”是

杨紫恋情风波后首现身,一身黑衣似闷闷不乐,被指和迪丽热巴撞型

不过网友发现杨紫当天似乎有点闷闷不乐,全程没有太多的笑容,她拿着话筒十分认真的和主持人互动,说话的时候眼神语气都十分诚恳,但和以往笑

环球速讯:大妈用废旧行李箱育辣椒苗,网友:蔬菜没想到这辈子能住包厢

大妈用废旧行李箱育辣椒苗,网友:蔬菜没想到这辈子能住包厢,蔬菜,包厢,大妈,行李箱,辣椒苗

大连湾海底隧道开通在即 隧道照明系统全部安装调试完成 当前聚焦

图为大连湾海底隧道照明系统全部安装调试完成。 卫岳斌 摄中新网大连4月20日电(记者杨毅)记者20日从大连湾海底隧道有

兰德尔谈麦迪逊花园主场气氛:这是我所期望的 我们从中汲取能量|天天时讯

今日NBA季后赛G3,尼克斯主场99-79大胜骑士,大比分2-1领先。赛后兰德尔接受采访,谈到麦迪逊广场花园主场气氛,说道:“这当然是我所期望的,

环球观速讯丨本周末强冷空气持续“制冷”,多地有暴雪、暴雨、强对流天气

近日,受一股强冷空气影响,我国多地经历了一场“从短袖换棉衣”的大降温,南方多地将迎来“倒春寒”,这是4月下旬少见的冷。同

全球新消息丨让运动氛围更浓

作者:刘天星(北京体育大学体育融合可视化技术重点实验室副主任)体育承载着国家强盛、民族振兴的梦想。党的二十大报告提出,广泛开展全民健

被孙颖莎横扫,斯佐科斯为何满脸笑容?赛后举动有趣,伊藤没说错 环球速读

被横扫输球后,为何斯佐科斯还会有这样的举动呢?在出局之后,40岁的韩莹心情上没有太大的波动,当被记者问到为何输球后还心情大好,韩莹也是

创业板融资余额四连增

创业板公司最新融资余额2186 53亿元,已连续四日增加,期间累计增加34 04亿元。证券时报·数据宝统计显示,截至4月20日,创业板两融余额合计23

一根绣花针 天天看点

炭火在火盆中燃着,灰烬裹着炽热的火心,温暖谦逊。将茶叶放置在用炭火烘到一定热度的陶罐中,反复颠炒,直到茶叶由青泛黄,茶香

磨合期的情侣该如何维护感情 磨合

今天来聊聊关于磨合期的情侣该如何维护感情,磨合的文章,现在就为大家来简单介绍下磨合期的情侣该如何维护感情,磨合,希望对各

天天即时:中级会计师备考:如何制定有效的学习计划?

中级会计师是会计职业中的一个重要的职称,拥有中级会计师资格证书可以增加个人的职业竞争力,提高职业发展的空间。然而,中级会计师考试难度

掀起新一轮价格战?特斯拉持续降价受“反噬”,毛利率跌破20%_世界资讯

今年1月,特斯拉宣布全球范围大幅度降价,掀起了汽车价格战,从新能源到燃油车都无一避免,出现了大幅降价的景象。只要关注汽车消息的朋友,应

世界今亮点!大河内!你真的是懂整活的!

凌晨两点,我看完了水星的魔女第二季第二集,真的服大河内,这活整的太有内味了!!!首先我想先叠个buff,这些仅代表我个人观点嗷,我是真的

全球信息:资产质量稳中向好 北京银行全力打造“商业银行2.0版”

4月7日,北京银行发布2022年年度报告。财报显示,截至2022年末,北京银行资产总额3 39万亿元,较年初增长10 76%,规模持续保持城商行首位;实

免费领 | Morrisons Cafe杰克土豆套餐

从4 24-5 07,在Morrisons超市的Cafe只要问“AskforHenry“就可以领一套Jackpotato烤土豆配番茄焗豆的套餐。活动是做番茄酱特别有名的亨氏赞助

2023-4-11 二水推翻译

截图:千景翻译:春花校对:紫萍东郭另外:感谢群友的精神赞助还有:欢迎大家捉虫碎碎念:这B……B站的专栏插图真的不方便,所以就随便插几...

子贤同游岐原

1、《子贤同游岐原》是北宋诗人欧阳澈创作的一首七言律诗。文章到此就分享结束,希望对大家有所帮助。

孔子30:痛失颜回

1、《孔子30:痛失颜回》讲述的是孔子从一个贫民少年成长为万世师表的励志故事,分别刻画了孔子的少年、青年、中老年三个

跌打损伤药哪种效果好_跌打损伤药哪种好|全球聚焦

1、有云南白药胶囊、恒骨接骨剂、接骨片、红片、骨折挫伤散、龙血竭胶囊等。2、在这些药物中,水性药物的效果最好,尤其是恒骨

环球关注:国内画师约战AI绘图:细致化《艾尔登法环》女武神草图 谁赢了?

国内画师约战AI绘图:细致化《艾尔登法环》女武神草图谁赢了?

速递!芒果超媒:多维矩阵带动业绩新增量 2023年一季度净利超5亿元

4月21日晚间,芒果超媒(300413)披露2022年度业绩报告。年报显示,公司2022年实现营收137 04亿元,净利润18 25亿元。  其中,芒果TV平台会员

焦点日报:4月21日中国外交部例行记者会全文

外交部发言人汪文斌4月21日主持例行记者会,回答记者提问,以下是问答内容:  应菲律宾外长马纳罗邀请,国务委员兼外交部长秦刚将于4月21日

东软集团:4月21日融资买入6861.77万元,融资融券余额11.01亿元 环球微动态

4月21日,东软集团(600718)融资买入6861 77万元,融资偿还4345 94万元,融资净买入2515 83万元,融资余额10 76亿元,近20个交易日中有13个交

华为宣布突破ERP系统封锁 任正非孟晚舟发声

据华为董事、质量与流程IT部总裁陶景文介绍,ERP供应商早在2019年就通知对华为断供停服,ERP作为华为企业经营最核心的系统,最终我们决定不仅

工龄认购认购房产必须办理产权证吗

1、按工龄认购的房屋,如果按经济适用住房管理的,住满5年后,补缴土地出让金后,可以取得完整产权,办理产权登记。2、经济适用住房购房人拥有

焦点热议:澳门青年在闽“高科技”实习 体验闽都文化

澳门青年在闽“高科技”实习体验闽都文化---21日,澳门青年参加闽都文化研习活动。中新网福州4月21日电“我来自澳门,今天在福州才知道‘澳...

猜您喜欢

Copyright ©  2015-2022 亚洲服装网版权所有  备案号:豫ICP备20022870号-9   联系邮箱:553 138 779@qq.com