
使用 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 监听到并处理了。
标签:
-
24
2023-04python-异常处理和错误调试-异步IO程序的调试方法(三)
Python中的asyncio模块提供了一些有用的debug工具,可以帮助我们更好地理解异步IO程序的运行状态,并找到程 -
24
2023-04“人从众”的“五一”假期,如何获得更优体验?|天天时讯
原标题:出游人次有望突破2019年同期,车票机票一票难求、酒店民宿一房难求“人从众”的“五一”假期,如何 -
24
2023-04辉南县严把农产品质量安全关
本报讯(宋振宏记者孙亚光)辉南县把群众舌尖上的安全当成大事来抓,一方面加大监测力度,一方面推进标准化 -
24
2023-04中国星辰丨敢上九天揽月|要闻
05:431970年4月24日,中国第一颗人造地球卫星“东方红一号”发射成功。“我在陕西延川县梁家河做知识青年的 -
24
2023-04全球即时看!高新南区公交线路单一?回复:基本能满足出行需求
近日,市民反映高新南区公交线路单一,无法满足市民日常出行需求,建议开通新路线满足出行。对此,记者获悉 -
24
2023-047-6!6-1!足坛疯狂一夜:4大豪门狂欢,曼联进决赛+热刺尤文翻车
北京时间4月24日凌晨,欧洲五大联赛结束多场比赛,国米3-0大胜恩波利,AC米兰2-0完胜莱切,巴萨1-0小胜马竞 -
24
2023-04卡塔尔首相与沙特外交大臣通电话
当地时间4月23日,卡塔尔首相兼外交大臣穆罕默德与沙特外交大臣费萨尔通电话,双方重点就苏丹局势交换了意 -
24
2023-04【环球时快讯】千城百县看中国|山东诸城:小城的春天
01:12岸边杨柳依依,路旁百花盛放,春天里的山东诸城一派春意盎然。微风拂过,花枝摇曳,清香阵阵,邂逅春 -
24
2023-04海盗船长粉红娘娘视频_海盗船长粉红娘娘
1、电影是《十全九美》歌名叫《海盗船长》海盗船长-后舍男生LRC歌词[下载][ti:海盗船长][ar:后舍男生][al: -
24
2023-04更多去阅读专业经典!重庆大学世界读书日倡导学生“读深读精”|天天聚看点
4月23日,世界读书日当天,重庆大学举行了2023年“师生读书行动”系列活动启动仪式。重庆大学图书馆的“重 -
23
2023-04北京朝阳区职教名师车菲:深耕课堂 争做新时代“大先生”_速看
北京市求实职业学校教师车菲正在做报告。校方供图人民网北京4月23日电(记者林露)近日,2023年北京市朝阳 -
23
2023-04环球速看:TES参加“世界读书日”,选择各不相同,小天读书以求野区突破?
如果说这一届的TES给大家带来的感受,那无疑是有一些“过山车”的,在上一次的转会期结束之后,很多小伙伴


苹果考虑将iPhone系列进一步延伸 2024年上市?

卷出一块好曲屏 真我10系列新品发布会举行
英国猴痘病例数预计将大幅上升
上海:视情适当延长毕业生在校生身份时间
国家电网确定新型电力系统科技攻关十大重点项目
比亚迪发布CTB电池车身一体化技术
商务部:坚定致力于实现全面、高水平的亚太自贸区
中办国办印发《意见》 推进实施国家文化数字化战略
初夏看市场:“菜篮子”产品生产供应充足 蔬菜在田面积达9877.2万亩
上海浦东重点生产企业复工复产超1100家
-
1
Intel最新处理器Arrow-S曝光 最高可达24核
-
2
配置拉满的电竞神机 雷神ZERO2023大黄蜂发布
-
3
真我10Pro系列发布 首发量产2160Hz超高频调光技术
-
4
阿富汗塔利班组建正规军
-
5
萨赫勒地区反恐形势面临新变数
-
6
北约北扩加剧欧洲安全风险
-
7
贵州毕节七星关区百所学校创办百个“红军班”
-
8
湖北省孝感军分区组织军地联合应急救援研究性演练
-
9
青藏高原等区域将新设一批国家公园
-
10
河北省承德军分区退役军人担纲教练主力