使用 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 监听到并处理了。
关键词:
上一篇:好听的帮派名字有诗意_好听的有诗意的帮会名字 天天日报
下一篇:最后一页
- 如何去除水印不影响原图 (如何去除水印不影响原图)
- 广州科技活动周进入预热 明日正式启动300多场主题活动接踵而来
- 深化重点领域信用建设 广州正式出台新型监管机制实施方案
- 女童不慎掉入20米深井 18岁小姨三次下井成功营救
- 西安3个区域12月28日起每日开展全员核酸 官方提倡民众居家健身
- 浙江乐清一核酸检测结果异常人员 复采复检为阴性
- 浙江本轮疫情报告确诊病例490例 提倡“双节”非必要不出省
- 西安警方通报6起涉疫违法案件
- 西安新一轮核酸筛查日检测能力达160万管
- 西安市累计报告本土确诊病例811例
-
苍溪县岳东小学1000余人接受感恩励志教育|环球热点
4月20日,以“生命与爱同行,家校共育未来”为主题的大型感恩励志报告会在四川省广元市苍溪县岳东小学举行
-
完美世界和腾讯合作的游戏_完美世界 腾讯代理发行的手游
当前大家对于完美世界腾讯代理发行的手游都是颇为感兴趣的,大家都想要了解一下完美世界腾讯代理发行的手游
-
每日头条!日本央行计划对过去几十年的政策进行评估
日本央行计划对过去几十年的政策进行评估:据日本产经新闻,日本央行计划对过去几十年采取的政策进行评估,
-
喀什地区税务局开展宪法宣传活动
近日,国家税务总局喀什地区税务局联合喀什市税务局在喀什环疆新世界百货广场开展了“税月有你·与宪同行”
-
全球热推荐:忙疯了!淄博小饼遭疯抢老板暴瘦20斤
小饼烤炉加蘸料,灵魂烧烤三件套。淄博烧烤火爆出圈,成为“美食宇宙的中心”,吸引了全国各地的食客蜂拥而
-
环球热消息:杰恩设计一季度净利润591万元,同比扭亏为盈
乐居财经吴文婷4月23日,杰恩设计发布2023年第一季度报告。
-
财政部安排12.51亿元支持粮食等农作物重大病虫害防控 焦点要闻
财政部安排12 51亿元支持粮食等农作物重大病虫害防控2023年04月23日16:24新华网
-
润贝航科:民用航空制造业航材需求下降等 2022年归母净利润同比下滑38.75% 拟10派6.25元
润贝航科4月23日披露2022年年度报告,2022年实现营业收入5 62亿元,同比下降19 33%;归母净利润7918 09万元
-
康泰生物2022年净利亏损1.33亿元-当前播报
北京商报讯(记者马换换)4月23日晚间,康泰生物(300601)披露2022年年报显示,公司报告期内实现营收、净
-
中汽协:一季度汽车产销下降,促销潮扰动终端市场
据中国汽车工业协会(以下简称“中汽协”)发布的最新一期国内汽车产销数据显示,虽然3月出现回暖的迹象,
X 关闭
好听的帮派名字有诗意_好听的有诗意的帮会名字 天天日报
孙策怎么死的真实原因_孙策怎么死的
今日快讯:python-Django-表单验证(一)
西方等级阶层不可以随便逾越,行会制就是他们商业文化传统 环球热文
X 关闭
焦点讯息:水发燃气董秘回复:根据《上海证券交易所股票上市规则》的规定
西安警方完成研考安保工作 共出动警力逾1.3万人次
得知西安疫情防控“升级” 男子夜骑共享单车回咸阳淳化
中国医生将任SIU主席背后:从追随者同行者到引领者
海南省通报政法队伍教育整顿成果