基于消息的事件驱动是一种常见的微服务架构设计模式,它将不同的微服务之间通过消息进行通信,实现松耦合、高可伸缩性和高可靠性。在这种架构下,每个微服务都是独立的,它们可以在消息传递的过程中进行异步操作,这使得整个系统的性能得到了很大的提升。
在 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 Cloud Stream 集成实现基于消息的事件驱动基于消息的事件驱动是一种常见的微服务架构设计模式,它将不同的微服务之间通过消息进行通信,实现松耦合、
-
沙特阿美:首批获认证的低碳氨由沙特运往日本,将用于清洁发电-即时看据了解,这批氨被认定为“低碳”,主要因为对其制造过程产生的二氧化碳进行了捕集并应用于下游业务
-
准备和谐共处?网易UU上架腾讯WeGame平台有网友发现,网易UU加速器于4月18日上架了腾讯WeGame商店,而这也是网易与腾讯这两大互联网巨头之间少见的
-
世界快消息!广陵经济开发区:深化调查研究 推动园区高质量发展以高质量调研促进园区高质量发展,4月19日下午,广陵区委书记张伟调研走访广陵经济开发区,深入了解园区及
-
浪漫公寓宾馆(浪漫公寓)1、浪漫满屋公寓居于重庆市渝北区黄泥塝,处于观音桥商圈,紧邻重庆中央CBD的江北城;项目所在五黄大社区为
-
猪场排粪污老板被行拘 养猪若污染环境处罚很严重养猪行情:猪场老板在未作任何报备的情况下,擅自从事生猪养殖。养殖过程中,直接将养猪场的污水及生猪粪便
-
消息!以“迅”应“汛” 莆田市公路局紧急疏通路面积水以“迅”应“汛”莆田市公路局紧急疏通路面积水
-
今日讯!科洛斯2私服 科洛斯私服今天来聊聊关于科洛斯2私服,科洛斯私服的文章,现在就为大家来简单介绍下科洛斯2私服,科洛斯私服,希望对
-
金融服务“直达”体检现场 新动态新湖南客户端4月20日讯(通讯员张琪汶郭益江)“真是太方便了,在等待体检的闲暇时光,还能把银行卡开了,
-
天天热头条丨龙卷风袭击美国俄克拉何马州新华社休斯敦4月19日电美国中南部俄克拉何马州小镇科尔19日夜间遭遇龙卷风袭击,造成至少两人死亡。综合当
-
长赣高铁详细建设方案公示,总投资846.23亿元_环球关注App4月19日消息,《新建长沙至赣州高速铁路环境影响评价第二次公示》17日在湖南省、江西省人民政府网站发布
-
P R N D S代表什么档位图片 自动挡汽车的P、R、N、D、S、L分别代表什么意思?一句口诀教会你 天天简讯随着社会经济的不断发展,人们的生活水平也得到了不断的提高。而目前随着汽车行业的不断发展,汽车从原先的
-
观点 | 宏观暖风及低库存提振镍价 阶段修复中期下行压力仍存摘要:2023年4月以来,镍价显现较强的企稳反弹意愿,并逐渐再接近20万元,涨幅已超12%,几乎收复了3月失地
-
【全球快播报】宏碁掠夺者刀锋X游戏本发布:顶配24核i9-13900HX+RTX 4090快科技4月21日消息,宏碁在全球春季新品发布会上发布全新电竞游戏本——掠夺者刀锋X,顶配为i9-13900HX+RTX
-
今日快看!华润材料:4月20日融券卖出1800股,融资融券余额7887.36万元4月20日,华润材料(301090)融资买入189 73万元,融资偿还313 24万元,融资净卖出123 51万元,融资余额7859 76万元。
-
万得全A指数遭主力资金净卖出逾200亿元,基本金属净卖出33.26亿元居首|今日播报4月20日,Wind数据显示,万得全A指数遭主力资金净卖出逾200亿元,连续12日净卖出,累计近2900亿元。基本金属净
-
天天讯息:索朗曲扎:戍守西藏阿里典角村,“我就是这里的监控探头”索朗曲扎:戍守西藏阿里典角村,“我就是这里的监控探头”
-
“套盒”还是“套路” 婆婆去杭州莉薇养生馆做足疗 “套盒”专门定制? 全球观速讯“套盒”还是“套路”婆婆去杭州莉薇养生馆做足疗“套盒”专门定制?
-
考驾照新规2023年4月1日新规定明细_考驾照新规1、考驾照有新规定:增加课时,增加考证的难度,电子路考拟增加3项,以后拿驾照可能难度大了,苏州、南京
-
别慌,农业银行已到了强弩之末。别慌,农业银行已到了强弩之末。,农行,上冲,开盘,股票,没有机会,中国农业银行
-
盈康生命肿瘤防治科普宣传第二期:便秘与直肠癌的关系 全球观点盈康生命肿瘤防治科普宣传第二期:便秘与直肠癌的关系 2023年第29个全国肿瘤防治宣传周,盈康生命推出肿
-
联想lj2600d打印机清零步骤 环球快播报1、打印机清零一般分两种:一种是手工清零,另一种是软件清零。2、网上也流传的一些清零方法,但在使用之后
-
烧光400亿,销量为0!为啥还有人信贾跃亭? 全球微头条烧光400亿,销量为0!为啥还有人信贾跃亭?,乐视,马云,贾跃亭,特斯拉,马化腾,陈雪峰,财务报表,财务会计
-
每日看点!光荣控股(09998.HK)获授三份建筑合约 合约总额约3.015亿新加坡元格隆汇4月20日丨光荣控股(09998 HK)公告,集团(透过其全资附属公司光荣建筑私人有限公司)获授三份建筑合约,详情
-
百事通!手机导航如何与车载导航连接使用_手机导航如何与车载导航连接1、用手机数据线连接汽车与手机,USB接口头连接汽车的车上的HDMI插口。2、注意:HDMI插口,一般打开储物盒
-
当前快播:泰安围绕校城融合召开专题协商会 助力经济和社会高质量发展齐鲁网·闪电新闻4月19日讯4月19日上午,“推动校城融合助力经济和社会高质量发展”双月专题协商会召开,泰
-
全球快看:行诉公安局的抗诉书范文(精选9篇)行诉公安局的抗诉书范文第1篇申请人:王xx,男,汉族,19xx年x月x日出生,住大理市xx。申请人因不服XX省XX
-
四川发布地灾3级黄色预警,广元、绵阳、巴中、南充、阿坝州等地请注意 天天头条四川经济网讯(记者兰爽)4月20日,四川省地质灾害指挥部办公室发布地质灾害气象风险3级黄色预警,涉及广元
-
天天滚动:女子在mini展台直播起冲突_警方回应:事实没有网传那么严重没想到,上海车展时隔三年回归,最大的新闻竟然是宝马mini展台工作人员派发冰淇淋区别对待中国人和外国人,
-
系好安全带!大行警告:流动性峰值已过,未来几周将出现至少6000亿美元“逆流”来源:华尔街见闻 韩旭阳花旗认为,几乎所有推动市场上涨的流动性因素都将陷入停滞或彻底逆转,这可能会在