使用 Spring Cloud Bus 和 Spring Cloud Stream 集成实现基于消息的事件驱动 当前速讯
基于消息的事件驱动是一种常见的微服务架构设计模式,它将不同的微服务之间通过消息进行通信,实现松耦合、高可伸缩性和高可靠性。在这种架构下,每个微服务都是独立的,它们可以在消息传递的过程中进行异步操作,这使得整个系统的性能得到了很大的提升。
在 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 集成实现基于消息的事件驱动 当前速讯
- 局中人 | 揭秘国王“库里终结者”:曾险去勇士 自曝防萌神秘诀
- 河南省许昌市市场监督管理局魏都区分局扎实开展医疗器械抽检工作
- 焦点快看:FORVIA佛瑞亚集团亮相2023 上海车展 期待与中国携手共进同发展
- 全球播报:专题学习、交流互动、实地视察……梅陇镇人大代表第一季度小组活动用心用情
- 每日消息!华工科技:预计800G光模块出货量将在今年下半年快速增长
- 消费如何更优质?随着全国各地政策激发 消费活力逐步显现 焦点日报
- 环球看点!近期难得的不矫情说人话的青春片,让我们看笑话一样看着左坤,也像是在看s13的自己
- 全球信息:美宜加盟店加盟费多少(美宜加盟店加盟费多少?赚钱吗?)
- 刘飞巧设“口袋阵” 全球讯息
- 天天视点!子对象分类子
- 世界快讯:美媒:数百万美国人开支面临压力 不平等恐成美经济“定时炸弹”
- 当前观点:Nymex美原油期货主力日内跌幅达到2.00%,报79.26美元/桶
- 五年内中级经济师考试难度是否会增加?_速讯
- 海尔AWE剧透:亮点众多、只为生活
- 当前速读:莱特兄弟飞行梦_莱特兄弟的飞翔之梦
- 定置化管理制度_定置化管理
- 天天精选!上海车展 | 读图:全新纯电旗舰SUV沃尔沃EX90
- 当前时讯:捷豹路虎宣布将于五年内投资150亿英镑,加速电动汽车发展
- 泗水车祸致7死10伤 警方通报来了
- 1巩固企稳回升态势 推动经济运行持续整体好转 当前看点
- 2传奇歌词意思(传奇歌词)
- 3党报荐读丨信贷优惠、消费折扣……低碳生活能“变现”! 世界快看
- 4深 V 回归、狂瘦 60 斤,谁敢相信她 50 了?-环球即时看
- 5永达1780mm热线预计6月底实现试投产
- 6复写纸的蓝印如何消除_复写纸
- 7热议:促进双方交往合作再上新台阶
- 8四个赛区、五大主题,第五届河北省文创和旅游商品创意设计大赛启动
- 9环境影响评价制度_关于环境影响评价制度介绍 环球今亮点
- 10尚贤教育集团:走进神奇的3D世界|天天报道
- 1天天微头条丨塔图姆29分绿衫军再胜老鹰,一数据凸显凯尔特人防守真强悍
- 2超第二代骁龙8跑分136万+ vivo天玑9200+机型曝光GPU性能提升明显
- 3秦皇岛海港区:畅通“微”循环 连接大市场|天天要闻
- 4看似强大的美国已没钱,卢拉:我每晚自问,世界为什么用美元结算
- 5今亮点!中国交建4月19日加速下跌
- 6世界观速讯丨盘点全球票房最高的五部电影 你都看过吗?
- 7天天最资讯丨中老铁路国际旅客列车为跨境游注入新活力
- 8【热闻】塔图姆:怀特坚持自我&打球果断有侵略性 这使我们球队充满活力
- 9资讯推荐:中兴通讯5G聚焦数实产业融合与技术创新,加强数字基础建设
- 10天天看点:2022电主轴十大品牌排行榜_电主轴哪个牌子好
广告
- 广东韶关部分地区发布暴雨红色预警
- 左擎消费 右牵成长 中银卓越成长正在发行中
- 仓鼠吃啥食物_仓鼠吃什么食物最健康|天天聚看点
- 午评:三大指数小幅下跌 通信设备板块领涨 环球速看
- 天府万家湾分园组织全园幼儿进行年度体检
- “五一”假期游火爆,服务保障得跟上 环球速读
- 基金调研丨永赢基金管理有限公司调研百亚股份 前沿资讯
- 奶瓶盖可以蒸汽消毒吗?奶瓶盖可以用消毒柜消毒吗?
- 高新区开通首条 园区微循环公交路线-今日热门
- 当日快讯:埃尔多安:普京将视频连线参加土耳其首座核电站核燃料运抵仪式
- 四面湖山归眼底万家忧乐到心头是什么意思_四面湖山归眼底万家忧乐到心头
- 【行业声音】科技拓展金融服务广度和深度 环球精选
- 全球热议:搭建中试平台,推动科技成果落地
- 国内油价迎年内最大涨幅 业界:国际油价短期将震荡偏强运行 全球快消息
- 全球今日讯!明矾和白矾的区别是什么(明矾和白矾的区别)
- 每日播报!三国志战略版装备特技怎么玩 三国志战略版装备可以有几个特技
- 中指·每日要闻:杭州对多子女家庭住房公积金施行优惠政策 5月1日起施行 天天热头条
- 极品飞车14_极品飞车14 抗锯齿
- 龙利鱼营养价值及功效_龙利
- 壹石通(688733)4月18日主力资金净卖出867.24万元