您的位置:首页 >资讯 >

全球新资讯:使用 Spring Cloud Bus 和 Spring Cloud Stream 集成实现基于消息的事件驱动

2023-04-21 16:21:30    来源:腾讯云

基于消息的事件驱动是一种常见的微服务架构设计模式,它将不同的微服务之间通过消息进行通信,实现松耦合、高可伸缩性和高可靠性。在这种架构下,每个微服务都是独立的,它们可以在消息传递的过程中进行异步操作,这使得整个系统的性能得到了很大的提升。

在 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 监听到并处理了。

标签:

相关阅读

普安县气象台继续发布干旱橙色预警信号【Ⅱ/严重】

十二载助学 梦想的“炭火”生生不息

天天通讯!瓯海供电分局:电力“及时雨” 助水稻喝上“救命水”

【天天聚看点】小赢卡贷网贷7000逾期还不起会被对方起诉吗

8月2日是什么星座呢 8月2日是什么星座

世界观点:沉重的代步车:无证驾驶违规三轮 避险途中侧翻殒命

速讯:黎明觉醒分岔口藏宝图在哪里 分岔口藏宝图位置分享[多图]

五一假期热门城市出炉:多个省会及直辖市在列!出境游同样火爆

《消逝的光芒2》免费更新“屠戮本能”上线 新增装备幻化

全球即时:蓝色光标申请“CHATBLUE”商标

怪物猎人崛起凶宝翠岚怎么制作

桌面地下城石头印记怎么样

天天通讯!火焰纹章风花雪月史瓦的领的强盗祸害关卡困难攻略

热点聚焦:《塞尔达传说:王国之泪》新视频 新冒险即将开启

《SE技术预览: 港口镇连续杀人事件》4月24日免费发布

当前看点!32元交个朋友 多剧本调查冒险游戏《志怪者》4月27日上线

焦点短讯!新开单职业传奇手游推荐 十大单职业传奇手游合集

《如龙》夜店女郎试镜最终入围者视频 性感美女吸睛

当前通讯!《王者荣耀》发布预告视频 公孙离机甲新皮肤“记忆之芯”登场!

轻工业数字化水平加快提升

双师科创营结营 腾讯游戏未成年人保护4.0加速发力中

【速看料】金迪克2022年净利降5成 2021上市募12亿中信证券保荐

环球最资讯丨新开变态传奇微变传奇有哪些 新开微变传奇手游推荐top10

隔离区丧尸末日生存用枪械瞄准镜需要注意什么

《王者荣耀》公孙离机甲新皮肤“记忆之芯”爆料视频

上线65535级变态传奇手游推荐 超级变态传奇手游排行榜top10

数字化科创助力青少年放飞梦想,腾讯游戏把科创教育玩出新花样

报道:手游FPS游戏《全境封锁:曙光》将于今夏开启测试

环球信息:《怪物猎人:崛起》天廻龙的重壳怎么获得

《怪物猎人:崛起》天廻龙的厚鳞怎么获得

全球即时:风投公司Bitkraft招募前拳头发行总裁 扩展亚洲业务

世界热议:180沉默传奇手游哪个火 十大180沉默传奇手游版本推荐

环球报道:种田新游《归园田居》Steam页面上线 发售日期待定

【全球时快讯】《街霸6》第一弹DLC四名角色公布 体验版今日上线

外媒爆料:拳头将资助巴西赛区亚军与季军一同前往伦敦集训

天天快看:《怪物猎人:崛起》天廻龙的韧尾怎么获得

世界速递!即使战略《钢铁战队:入侵》Steam页面上线 支持简中

世界要闻:2K移除《小缇娜的奇幻之地》D加密 原因未知

一刀999999变态传奇有哪些 超级变态传奇手游版本合集

要闻:隔离区丧尸末日生存搜刮什么道具比较重要

【天天播资讯】《霓虹序列》发售价仅48元,国内二次元已经开始盯上了动作肉鸽

上海期货交易所4月20日镍仓单下跌

华为宣布成功实现MetaERP研发和替换,重新定义企业核心商业系统

广东队最新消息广东体育不播G2,最新名单出炉,任骏飞被放弃用

天天新消息丨《赛博朋克2077》PC热修复上线 可能会影响Mod使用

全球热文:《怪物猎人:崛起》怪异克服天廻龙掉什么素材

当前关注:《怪物猎人:崛起》岚龙掉什么素材

今日快看!全军覆没!奥恰洛夫狂救11个赛点仍落败!无缘战马龙争四强

每日关注!《全境封锁:中心地带》开场CG动画

全球快报:mtf是什么意思中文_mtf是什么意思

澳媒:枪支暴力事件激增使美国人权状况恶化 美政府放任危机蔓延

环球快看点丨《全境封锁2》第五年更新计划 体验新模式“深潜”

环球今日讯!ESR(01821)连续18日回购,累计回购646.70万股

全球视点!操作小狗引导失心人类《人性》5月16日发售

《街头霸王6》体验版上线PS商店 PC版26日推出

【环球时快讯】如何正确安装角磨机(如何正确安装角磨机切片)

焦点速递!《生化危机2、3》Steam版光追现已重新加回来

两部门印发安全指南 剧本娱乐经营场所应设置火灾自动报警系统等

动态焦点:偷小区配电房的铜板挣钱 杭州一包工头被判了9个月

【环球聚看点】RPG要素来咯《街头霸王6》环球游历模式预告

全球热点!外媒确认《死亡岛2》采用Denuvo防篡改技术

【环球快播报】dnf国服奶弓上线时间介绍

今亮点!索尼收购Firewalk为其开发多人3A游戏新作

疯狂梗传爱如火攻略

每日简讯:法国浮世娱乐收购英国游戏开发商Dovetail Games

环球头条:dnf奶弓技能属性效果分析

当前热议!2023“澳门图书馆周”推广日周六开锣

《崩坏:星穹铁道》冰系角色阵容搭配

每日热点:《暗黑破坏神4》压力测试:5月13日3点至15日3点

今日播报!边境战斗侦查与反侦察攻略分享

焦点播报:《星球大战绝地:幸存者》各平台预载具体时间公布

每日热门:《不朽者传奇》配置公开 最低RTX 2080 Super

观焦点:女子酒驾被查自称是接吻造成_民警只好现场普法教育

全球热头条丨燃动中原丨中集·陕汽郑州“三好发展中心”正式启动!

图标隐藏软件_图标隐藏

重点聚焦!26万人,27年后,凌晨刷爆《灌篮高手》仅仅是“回忆杀”吗?

环球播报:大错特错不要来侮辱我的美我不是你的(大错特错不要来侮辱我的美)

蓝营由谁挂帅出征2024?最新网络民调显示“他”最受欢迎

世界快看:成都多处“拆绿还耕”:网红绿道边种上10万亩农作物

当前热点-吉林省一季度GDP增长8.2% 规上工业增加值增长7.6%

银行工作人员提醒:最好在家里备上1万元现金,关键时刻用处大!

2023琼海五一劳动节旅游景区推荐

你我贷逾期11天延迟还款影响征信吗

每日看点!戴维斯:我喜欢我的投篮,很多的投篮都很接近

天天观天下!2022年下半年睢宁县教资认定时间安排

每日简讯:主销车型63万元 高合HiPhi Z交付量超1,000台

世界观焦点:重庆2023年初级护师考试成绩查询时间

世界今亮点!怀孕10天能测出来吗用试纸_怀孕10天能测出来吗

每日观点:巨头宣布:4000人大裁员!项目经理:一觉醒来发现工作丢了

环球快报:Epic喜加一:《永不孤单》和《深海超越》免费领

Fami通新一周销量榜 《洛克人EXE合集》登顶

焦点要闻:打造皮卡新生活,江铃大道拓展更多应用场景

blew翻译(blew)

天天热门:提前看!23年11月frm报名时间已定!

天天快资讯:政府扶持的农业项目协议 政府扶持的农业项目

【独家】开源证券给予振德医疗买入评级 公司首次覆盖报告:渠道品牌建设+产品产能升级助...

环球微资讯!超62万台!PS5成美国3月份最畅销的游戏主机

中国新能源汽车制造海外竞争力提高 成为智能制造新名片

今天是SIE《战神4》游戏发售5周年

终南山作者_作者是王维-每日焦点

华安小坑新村:乡村振兴 飘出“致富曲”

天天热文:qq飞车手游童话春桃夭夭多少钱

滚动:昆山阳澄湖科技园:“敢”为先 “创”为本 全力推动产业创新高质量发展

环球动态:任天堂独立游戏直面会 Indie World 日服游戏情报汇总

世界快播:梦幻西游手游怎么退出跨服擂台

潮玩国度(北京)科技有限公司确认参展 INDIE GAME 展区火热招商中!

株洲市天元区水利局原局长范宏平接受天元区监委监察调查

全球微资讯!《暗黑破坏神4》野蛮人介绍视频公布 展示战斗场景