基于消息的事件驱动是一种常见的微服务架构设计模式,它将不同的微服务之间通过消息进行通信,实现松耦合、高可伸缩性和高可靠性。在这种架构下,每个微服务都是独立的,它们可以在消息传递的过程中进行异步操作,这使得整个系统的性能得到了很大的提升。
(资料图片)
在 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
- 聚焦:澳门冠军赛王曼昱4-2战胜王艺迪,
- 芜湖市气象局更新大风蓝色预警【IV级/一
- 拼多多员工猝死事件|播报
- 海博会上“风”起“云”涌:跨境贸易正当
- 世界聚焦:电脑怎样给手机开热点_电脑怎
- "宝马MINI展台疑似区别对待访客,再次道
- 天天关注:嘉峪关市创新机制扎实做好监测
- 以貌取人的下场下载_以貌取人的下场 天
- 海南开展2023年“一起益企”中小企业服务
- 预配是什么意思_yp是什么意思|天天速讯
- 世界通讯!教导对手主帅、诛心记者、讽卡
- 洋酒的种类和口感_洋酒的种类
- 植物大战僵尸四格漫画艾洋_植物大战僵尸
- 02月15日天水前往邢台出行防疫政策查询-
- 央视这次真的错了_环球头条
- 【世界时快讯】CBA最新消息!曝粤疆苏3家
- 环球实时:cr是什么化学元素名称_cr是什
- 当前通讯!山西健全县乡村三级急救转诊网
- 【速看料】央国企主题基金业绩规模齐增
- 如何提升管理者洞察力?|今日视点
- 赛龙夺锦·一线行动 | 项目用地“即来
- 华人运通高合HiPhi Z:破百仅需3.8秒,
- 乱世逐鹿重宝位置大全 全区域重宝线索位
- 天天速看:虎皮兰多久浇一次水 虎皮兰的
- pie工程师是什么意思中文(什么是PIE工程
- 高盛:债务上限可能出现最糟结果
- 即将举行的十四届全国人大常委会第二次会
- 【世界时快讯】沙钢集团起诉复星产投 南
- system进程是什么_system 进程
- 环敏栓菌_关于环敏栓菌介绍 全球要闻
- 孔令杰
- 环球短讯!美国禁忌2第二部第1集_潜行狙
- 百信国际:进一步延迟刊发未公布业绩|全
- 陕西煤业:4月21日融资买入1.04亿元,融
- 全球观热点:科研人员在新疆发现中国已知
- 科学家发明可食用充电电池 全球快播报
- 外地摩托车进京用办理进京证吗?
- 精准务实 中兴通讯一季度实现净利26.4亿
- 雍禾医疗(02279.HK):4月21日南向资金
- 挂件绳子打结方法_挂件绳子打结方法是什
- 孕妇肛裂能用红霉素软膏吗_肛裂能用红霉
- 全棉特阔磨绒布行情低迷
- 环球微动态丨小龙虾塘换水应该在什么时候
- 宁圣国际企业发展集团有限公司增强其在酒
- 当前滚动:问道御天梭怎么跟孔雀翎融合_问
- “五一”假期十大热门城市出炉,武汉上榜
- 哈弗品牌再次领跑行业,上海车展荣获多项
- 梅龙高铁跨京九铁路首孔箱梁顺利完成架设
- ILPT发费斥资美元进入堪萨斯州 世界关注
- 今日观点!珀莱雅2022年:净利增42% 上海
- 中国在联合国总部宣介全球发展倡议 天天
- 当前关注:西安:书香浸润建设一线
- 短冠刺蕊草|环球关注
- 绝世唐门_关于绝世唐门介绍-今日热搜
- 玫瑰粉怎么调色(玫瑰粉)
- 股票行情快报:国泰君安(601211)4月21
- 陈凯歌执导新片《志愿军:雄兵出击》,朱
- 上海警方:去年以来非机动车闯红灯事故已
- 刘昊然也为它熬夜!《灌篮高手》今日公映
- 如何提升管理者洞察力?|今日视点
- 赛龙夺锦·一线行动 | 项目用地“即来
- 华人运通高合HiPhi Z:破百仅需3.8秒,
- 乱世逐鹿重宝位置大全 全区域重宝线索位
- 天天速看:虎皮兰多久浇一次水 虎皮兰的
- pie工程师是什么意思中文(什么是PIE工程
- 高盛:债务上限可能出现最糟结果
- 即将举行的十四届全国人大常委会第二次会
- 【世界时快讯】沙钢集团起诉复星产投 南
- system进程是什么_system 进程
- 环敏栓菌_关于环敏栓菌介绍 全球要闻
- 孔令杰
- 环球短讯!美国禁忌2第二部第1集_潜行狙
- 百信国际:进一步延迟刊发未公布业绩|全
- 陕西煤业:4月21日融资买入1.04亿元,融
- 全球观热点:科研人员在新疆发现中国已知
- 科学家发明可食用充电电池 全球快播报
- 外地摩托车进京用办理进京证吗?
- 精准务实 中兴通讯一季度实现净利26.4亿
- 雍禾医疗(02279.HK):4月21日南向资金
- 挂件绳子打结方法_挂件绳子打结方法是什
- 孕妇肛裂能用红霉素软膏吗_肛裂能用红霉
- 全棉特阔磨绒布行情低迷
- 环球微动态丨小龙虾塘换水应该在什么时候
- 宁圣国际企业发展集团有限公司增强其在酒
- 当前滚动:问道御天梭怎么跟孔雀翎融合_问
- “五一”假期十大热门城市出炉,武汉上榜
- 哈弗品牌再次领跑行业,上海车展荣获多项
- 梅龙高铁跨京九铁路首孔箱梁顺利完成架设
- ILPT发费斥资美元进入堪萨斯州 世界关注
- 今日观点!珀莱雅2022年:净利增42% 上海
- 中国在联合国总部宣介全球发展倡议 天天
- 当前关注:西安:书香浸润建设一线
- 短冠刺蕊草|环球关注
- 绝世唐门_关于绝世唐门介绍-今日热搜
- 玫瑰粉怎么调色(玫瑰粉)
- 股票行情快报:国泰君安(601211)4月21
- 陈凯歌执导新片《志愿军:雄兵出击》,朱
- 上海警方:去年以来非机动车闯红灯事故已
- 刘昊然也为它熬夜!《灌篮高手》今日公映
- 【天天新要闻】美亚柏科(300188.SZ):公
- 广汽冯兴亚谈消费者购车观念改变:燃油车
- 天天向上天天小兄弟第一期在线观看_天天
- conveyed through_conveyed-环球热门
- 全球讯息:如何为罐头制作自制莎莎酱
- 海达尔汽车滑轨产品蒸发 关联交易数据频
- 公司搬迁可以直接解散员工吗|世界快消息
- 天奇股份:碳酸锂价格下跌短期给公司库存
- 读客文化:4月20日召开董事会会议 最新
- 【全球独家】如何填写报销单(怎么填写粘
- 银河证券:酒店行业商旅复苏加速推动经营
- 暴涨558%!万亿“宁王”业绩炸裂!新电池
- 世界快看点丨七年级上册英语书内容人教版
- 瘦脸针价格多少钱_瘦脸针多少钱 打瘦脸
- 长三角(青、苏、嘉) 水上突发事件应急
- 中国电信一季度实现净利润79.84亿元 研
- 汉源县气象台解除雷电黄色预警信号【III
- 雄鹿队球员名单虎扑 雄鹿队球员名单 天
- 世界热文:2023重庆社保减员当月生效吗?
- 15分钟便民生活圈:小消费也有大潜力|今