基于消息的事件驱动是一种常见的微服务架构设计模式,它将不同的微服务之间通过消息进行通信,实现松耦合、高可伸缩性和高可靠性。在这种架构下,每个微服务都是独立的,它们可以在消息传递的过程中进行异步操作,这使得整个系统的性能得到了很大的提升。
在 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 和
- 世界聚焦:传化农创帮扶项目落地遂昌 助
- 全球球精选!追加投资武汉经开区,法国艾
- 焦点速递!当日快讯:美的集团分拆美智光
- 全球视讯!“绿园”居民为义诊叫好!
- 世界快看:罕见!深圳发现一例黑热病
- 环球热消息:严把教师队伍入口关 对
- 环球简讯:阳泉:无人车物流配送“挑大梁”
- 世界观热点:图片新闻丨暴雨来袭 排积水
- 天天热消息:“创书香校园 享阅读之美”
- 环球观热点:筹款救命钱遭遇高抽成 这是
- 【全球独家】2023上海车展:日产Pathfind
- 全球微头条丨项目保障措施范文_项目保障
- 环球关注:香格里拉“杜鹃季” 迪庆州推
- 世界报道:美官员被曝发表种族主义言论:
- 天天观点:阿克谈伤退:明天会做一些详细
- 世界百事通!赛伦生物:2022年年归母净利
- 天天热点!首发失败,SpaceX“星舰”在空
- 全球快讯:4月20日浙江万方天然橡胶报价小
- 热资讯!多特球迷怒怼主场冠名商:买得到
- 每日简讯:“假球”事件粉丝交互数高达81
- 新动态:时速达100公里!多地严查电动自
- 【世界报资讯】知识产权进校园 创新创造
- 环球快资讯丨韩国签证办理进度查询的申请
- 【全球速看料】湖人暴露三大短板!哈姆缺
- 当前讯息:两节将至,10起违反中央八项规
- 即时:福建大湖乡:特色种植盘活闲置山区
- 快看:8.03英寸折叠巨幕!全能折叠旗舰vi
- 全球关注:喜盈门整木定制_喜盈门整木家居
- 全球热推荐:老工业基地吉林一季度招商引
- 【环球热闻】麦格理:重申万洲国际跑赢大
- 每日快讯!险资大撤退
- 快资讯丨苗圃资料简介_苗圃资料
- 【时快讯】现实版的狂飙,上市公司强行接
- 环球报道:长兴路街道开展智慧城管宣传
- 今日视点:揭秘投资密码,最佳策略平台能
- 天天新动态:@全省7.7万考生,这项考试4
- 精彩看点:环境质量评价方法_关于环境质
- 【全球新视野】4月19日晚间5家公司出现利
- 环球微动态丨东吴证券(601555.SH)一季度
- 环球即时:2022年下半年睢宁县教资认定时
- 【天天聚看点】重大技术突破!6G概念沸腾
- 环球观热点:赏“山东手造” 看胶东农民画
- 【天天播资讯】黄营中学举行文明创建倡议
- 每日时讯!贵阳市云岩区市场监管局关于不
- 每日报道:节能铁汉:2022年度净利润约-8
- 环球观热点:美国追查“泄密门”嫌疑人动
- 全球播报:光风霁月的意思及近反义词 光
- 视点!央行:3月份新发放的企业贷款加权
- 动态焦点:每经品牌100指数4月20日收盘上
- 每日短讯:成都灵活就业人员如何参保?缴
- 世界球精选!基金持仓动向:信达澳亚基金
- 环球热推荐:29分6板!20分5板!小伙逆袭
- 环球热点!上海五个新城未来将实现500米
- 环球短讯!硚口,一路繁花
- 世界看点:正观漫读|处理复杂问题最高明
- 全球焦点!国际经济与贸易专业是学什么的
- 全球热门:深圳五险一金一个月要交多少钱
- 环球今头条!为什么不建议买储蓄国债?
- 环球今日报丨《战斗吧娘子》定档0420,一
- 每日简讯:“假球”事件粉丝交互数高达81
- 新动态:时速达100公里!多地严查电动自
- 【世界报资讯】知识产权进校园 创新创造
- 环球快资讯丨韩国签证办理进度查询的申请
- 【全球速看料】湖人暴露三大短板!哈姆缺
- 当前讯息:两节将至,10起违反中央八项规
- 即时:福建大湖乡:特色种植盘活闲置山区
- 快看:8.03英寸折叠巨幕!全能折叠旗舰vi
- 全球关注:喜盈门整木定制_喜盈门整木家居
- 全球热推荐:老工业基地吉林一季度招商引
- 【环球热闻】麦格理:重申万洲国际跑赢大
- 每日快讯!险资大撤退
- 快资讯丨苗圃资料简介_苗圃资料
- 【时快讯】现实版的狂飙,上市公司强行接
- 环球报道:长兴路街道开展智慧城管宣传
- 今日视点:揭秘投资密码,最佳策略平台能
- 天天新动态:@全省7.7万考生,这项考试4
- 精彩看点:环境质量评价方法_关于环境质
- 【全球新视野】4月19日晚间5家公司出现利
- 环球微动态丨东吴证券(601555.SH)一季度
- 环球即时:2022年下半年睢宁县教资认定时
- 【天天聚看点】重大技术突破!6G概念沸腾
- 环球观热点:赏“山东手造” 看胶东农民画
- 【天天播资讯】黄营中学举行文明创建倡议
- 每日时讯!贵阳市云岩区市场监管局关于不
- 每日报道:节能铁汉:2022年度净利润约-8
- 环球观热点:美国追查“泄密门”嫌疑人动
- 全球播报:光风霁月的意思及近反义词 光
- 视点!央行:3月份新发放的企业贷款加权
- 动态焦点:每经品牌100指数4月20日收盘上
- 每日短讯:成都灵活就业人员如何参保?缴
- 世界球精选!基金持仓动向:信达澳亚基金
- 环球热推荐:29分6板!20分5板!小伙逆袭
- 环球热点!上海五个新城未来将实现500米
- 环球短讯!硚口,一路繁花
- 世界看点:正观漫读|处理复杂问题最高明
- 全球焦点!国际经济与贸易专业是学什么的
- 全球热门:深圳五险一金一个月要交多少钱
- 环球今头条!为什么不建议买储蓄国债?
- 环球今日报丨《战斗吧娘子》定档0420,一
- 信息:为创新主体搭台 为市场主体赋能
- 热文:IMF:中国将是未来5年全球增长的最
- 全球速读:中舟环保2022年净利98.67万同
- 【热闻】九寨沟发生山火,目前未造成人员
- 视焦点讯!国际金价重新走低,但空头面临
- 世界快播:全国已春播粮食面积超1.6亿亩
- 全球观察:保温毯的作用保温毯的作用是什
- 当前通讯!2023年泵阀上市公司龙头股有哪
- 环球热议:普洱市一批个人和集体拟获省级
- 世界热消息:严打价格欺诈!北京开展旅游
- 【环球时快讯】中药配方颗粒新旧标准切换
- 全球最新:子供向
- 环球简讯:拜登演讲时连Eight都不会拼了,
- 全球速读:SMM期锌简评:多头离场 沪锌
- 环球最新:蔚来全新ES6上海车展开启预订
- 焦点精选!炒白芍的功效与作用是什么?炒
- 世界动态:洛神花的功效与作用讲解视频_洛
- 环球简讯:方正证券:预计经济复苏持续可期
- 即时:江苏滨海经济开发区工业园:党建引
- 全球即时:《灌篮高手》预售票房破亿 首