基于消息的事件驱动是一种常见的微服务架构设计模式,它将不同的微服务之间通过消息进行通信,实现松耦合、高可伸缩性和高可靠性。在这种架构下,每个微服务都是独立的,它们可以在消息传递的过程中进行异步操作,这使得整个系统的性能得到了很大的提升。
在 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
- 观察:武汉有哪些好玩的地方对于小孩子来
- 湖南烈士公园,走过70年了!每个长沙人心
- 天龙八部最新开服sf变态_超变态天龙八部sf
- 跟林彪元帅学习管理 热议
- 湖人灰熊官宣G2伤情:莫兰特右手酸痛出战
- 全球滚动:勇士不冤!系列赛前两战关键时刻
- 无风扇显卡来了|播报
- 柴油滤芯多久换一次(柴油过滤)-焦点快播
- 上海首批供地首日揽金172.45亿 龙湖进场
- 天天快看:如何粘合纸板
- 柳城县去哪家医院做【割包皮手术】好
- 提前20天!炉慈高速全线首座隧道实现单线
- 惠泉啤酒2023年一季度净利润同比增长152.
- 当前看点!仿写朱自清背影的作文600字有题
- 魔界城之王在哪能看 魔界城之王|天天快
- 当前快播:大族数控(301200):4月18日
- 2023年天津市崇化中学体育特长生招生简章
- 数万民众“赴约”北京书市 解锁纸质书新
- 环球热资讯!CBA2队除名季后赛形势变天!
- 男子质疑小学办研学设霸王条款,5天研学5
- 春天的茶讯|茶与山向望,能饮一杯无?
- 加拉塔萨雷有意科纳特 利物浦暂时无意将
- 环球热点评!医保交了几年怎么查询?报销
- 【天天新视野】网传太辰光出口订单下滑?
- 全球短讯!“乐享生活·嗨购长安”2023年
- 王军战督导调研我县道路交通安全和运输执
- 上海华瑞银行:取消发行“23上海华瑞银行
- 世界短讯!茂硕电源:公司坚持做大做强电
- 沈信股份2022年亏损740.7万同比亏损增加
- 全球微头条丨“四个突出”激发人才活力
- 郑恺的37岁生日,让我看清了跑男团虚假的
- 天天新资讯:日本侵华独家影像披露③丨轰
- Mysteel日报:期货止跌回升 云贵建筑钢
- 将航天技术写入“智慧新城”_环球时讯
- 一季度全国商品房销售额同比转正 “房地
- 天天最资讯丨Spring Cloud Bus在服务之
- 全球快播:燃料电池相关公司十强是哪几家
- 受贿3049万余元 新疆生产建设兵团原副司
- 【天天新视野】中际旭创龙虎榜:机构净买
- 实时:青春热血剧《不就是拔河么》今日开
- 碳酸锂产业链研究报告之五:从产业链月度
- 统一申请冻结家乐福24万财产
- 香港特区政府律政司副司长将访问广州和深
- 波音提供高达1万美元的招聘奖金 世界球
- 焦点滚动:三部门:将奥赛利定等品种列入
- 三星Exynos 2400处理器曝光,10核CPU,G
- 攀枝花学院开展全民国家安全教育日宣传活
- 海天瑞声DOTS-AD自动驾驶平台正式发布
- 指尖悦动(06860):证监会拟对刘杰及朱炎
- 展商数量创新高 第十四届中国(临朐)家
- 天天快看点丨云怎么画古风_云怎么画
- 全球即时:广州公积金公司可以不缴存吗?
- Tiki 雕像的含义是什么? 世界快看
- 环球速读:周四新债申购价值分析:4月20
- 全球讯息:中控技术:本次发行GDR共2095.
- 全球实时:中国一冶天津公司QC成果获多项
- 新冠抗体“保护期”快到了,需要再接种疫
- 30年后,《男生贾里》“加更”了_天天精选
- 【当前热闻】我国油菜育种获重大突破 创
- 男子质疑小学办研学设霸王条款,5天研学5
- 春天的茶讯|茶与山向望,能饮一杯无?
- 加拉塔萨雷有意科纳特 利物浦暂时无意将
- 环球热点评!医保交了几年怎么查询?报销
- 【天天新视野】网传太辰光出口订单下滑?
- 全球短讯!“乐享生活·嗨购长安”2023年
- 王军战督导调研我县道路交通安全和运输执
- 上海华瑞银行:取消发行“23上海华瑞银行
- 世界短讯!茂硕电源:公司坚持做大做强电
- 沈信股份2022年亏损740.7万同比亏损增加
- 全球微头条丨“四个突出”激发人才活力
- 郑恺的37岁生日,让我看清了跑男团虚假的
- 天天新资讯:日本侵华独家影像披露③丨轰
- Mysteel日报:期货止跌回升 云贵建筑钢
- 将航天技术写入“智慧新城”_环球时讯
- 一季度全国商品房销售额同比转正 “房地
- 天天最资讯丨Spring Cloud Bus在服务之
- 全球快播:燃料电池相关公司十强是哪几家
- 受贿3049万余元 新疆生产建设兵团原副司
- 【天天新视野】中际旭创龙虎榜:机构净买
- 实时:青春热血剧《不就是拔河么》今日开
- 碳酸锂产业链研究报告之五:从产业链月度
- 统一申请冻结家乐福24万财产
- 香港特区政府律政司副司长将访问广州和深
- 波音提供高达1万美元的招聘奖金 世界球
- 焦点滚动:三部门:将奥赛利定等品种列入
- 三星Exynos 2400处理器曝光,10核CPU,G
- 攀枝花学院开展全民国家安全教育日宣传活
- 海天瑞声DOTS-AD自动驾驶平台正式发布
- 指尖悦动(06860):证监会拟对刘杰及朱炎
- 展商数量创新高 第十四届中国(临朐)家
- 天天快看点丨云怎么画古风_云怎么画
- 全球即时:广州公积金公司可以不缴存吗?
- Tiki 雕像的含义是什么? 世界快看
- 环球速读:周四新债申购价值分析:4月20
- 全球讯息:中控技术:本次发行GDR共2095.
- 全球实时:中国一冶天津公司QC成果获多项
- 新冠抗体“保护期”快到了,需要再接种疫
- 30年后,《男生贾里》“加更”了_天天精选
- 【当前热闻】我国油菜育种获重大突破 创
- 【独家】提升治水护水智慧化水平
- 【环球热闻】五年级家庭教育心得 家庭教
- 走,去恭博!恭王府博物馆创建40周年系列
- 世界快看:稻城县气象台解除雷电黄色预警
- 女狼战报:在昨天进行的联赛中,狼队女足
- S31新赛季必改的5大操作设置,简单调整三
- 环球快看:“自强不息 厚德载物——清
- 世界即时看!十四师昆玉市:文化惠民走基
- 天天微速讯:疫情突发!新“毒王”来袭?
- 中国移动的市值超过了茅台,这是一件很值
- 前沿热点:【绿色中国】“车城”十堰的新
- 滚动:东电:福岛第一核电站1号机组反应
- 环球今日讯!今天起,宜宾楼市又有新政策
- 大众21万左右的车型推荐,性价比高,这几
- 全军武器装备采购信息网发布《基于大模型
- 焦点速看:机械化赋能特色农业跑出“加速
- 焦点关注:不到25万即可拥有旋翼门 昊铂
- 世界今日报丨死心塌地电影在线观看_死心
- 世界今热点:如何“拯救”高校图书馆借阅
- ppt实时显示时间有秒表_ppt实时显示时间