基于消息的事件驱动是一种常见的微服务架构设计模式,它将不同的微服务之间通过消息进行通信,实现松耦合、高可伸缩性和高可靠性。在这种架构下,每个微服务都是独立的,它们可以在消息传递的过程中进行异步操作,这使得整个系统的性能得到了很大的提升。
在 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 监听到并处理了。
基于消息的事件驱动是一种常见的微服务架构设计模式,它将不同的微服务之间通过消息进行通信,实现松耦合、高可伸缩性和高可靠性。在这种架构
民警在县实验中学向学生讲解反邪教知识。红网时刻新闻4月18日讯(通讯员蒋佰平苏小红)4月18日,邵阳市绥宁县组织干警和志愿者在县实验中学开
红网时刻新闻4月18日讯(通讯员包寅)4月14日,攸县公安局黄丰桥派出所破获一起入户盗窃案,抓获犯罪嫌疑人1名,为群众挽回损失8000余元。4月
4月19日盘中消息,11点21分朗特智能(300916)触及涨停板。目前价格48 47,上涨20 0%。其所属行业消费电子目前上涨。领涨股为朗特智能。该股为
环境审核,关于环境审核介绍这个很多人还不知道,我们一起来看看!1、环境审核(environrnentalauditing)由独立的审核员或审核小组对企业或
海报新闻记者丛萍吕乐济南报道4月1日,规范整合后的山东省口腔种植医疗服务价格项目正式落地实施,定价形式由市场调节价调整为政府指导价。4月
新甘肃客户端讯(新甘肃·每日甘肃网记者王宇晨)记者从甘肃省商务厅获悉,4月10日至15日在海南举行的第三届中国国际消费品博览会上,我省围绕
记者:魏玉坤、韩佳诺制图:贾稀荃编辑:牛昊新华社国内部出品编辑:海霞责任编辑:孔令定
人民日报记者常碧罗车联网先导区示意图。 罗国顺制图两江新区的智慧路口。 两江新区提供重庆(两江新区)国家级车联网先导区物理信息融
党的二十大擘画了以中国式现代化全面推进中华民族伟大复兴的宏伟蓝图,吹响了奋进新征程的时代号角。今天,全面推进乡村振兴呈现新图景、重大
同花顺数据中心显示,软控股份4月18日获融资买入1191 77万元,占当日买入金额的31 46%,当前融资余额4 09亿元,占流通市值的6 28%,低于历史40
小众类目到常规品类,Whatnot能给在美国的直播电商平台增长打个样吗?来源:apptopia这让笔者想起来去年盘点过的几个独立直播电商产品,包括NTWRK、
今年的车展显示,汽车企业之间的竞争比往年更激烈。4月18日,第二十届上海国际汽车工业展览会(下称“上海车展”)正式开幕。作为今年全球第一
提升技能人才培养能力和水平。
4月18日,聚飞光电(300303)融资买入6382 9万元,融资偿还5713 82万元,融资净买入669 08万元,融资余额2 58亿元,近20个交易日中有14个交易
民族日报·中国临夏网记者史有东最美人间四月天,正是春花烂漫时。眼下,随着天气转暖,我州黄河两岸柳绿花开,春意盎然。炳灵丹霞莲花旅游码
民族日报·中国临夏网记者史有东最美人间四月天,正是春花烂漫时。眼下,随着天气转暖,我州黄河两岸柳绿花开,春意盎然。炳灵丹霞莲花旅游码
民族日报·中国临夏网报记者赵怀斌梁永吉麻红梅“东乡手抓羊肉”名扬天下,是东乡县地域品牌,也是一块金字招牌;金招牌赢得金项目——在东乡
近日,由中铁三局天津公司承建的临大黄河大桥连续梁全桥顺利合龙,为临大高速公路全线贯通按下“加速键”。该桥长548米,宽25 5米,是临大高速
民族日报·中国临夏网讯(记者马博文)4月18日上午,州委副书记、州长何东在东乡县调研督导项目建设工作。在东乡县东乡码头、折达路至东乡码头
关于室内消毒用什么消毒剂的内容,包含室内消杀用什么消毒剂室内消毒喷雾用什么消毒液好室内消毒用什么好呢?室内消毒用什么室内消毒用什么消毒
直播吧4月19日讯今日NBA季后赛,太阳将在主场迎战快船。赛前,太阳主帅蒙蒂-威廉姆斯接受了记者的采访,并在采访中谈到
白糖逻辑:周二,白糖2307合约震荡偏强运行,收盘报价6829元 吨,较前一交易日结算价上涨94元 吨,涨幅1 40%;交易所前二十期货公司会员持仓中
乌拉特后旗气象台发布大风蓝色预警【IV级 一般】【2023-04-19】
1、形态差异:雪糕指的是硬雪糕(外观坚硬),雪糕指的是软雪糕(半流质固体型)。从字面上来说,冰淇淋和冰淇淋可以分别代表硬
民族日报·中国临夏网讯(记者马玉兴通讯员褚宗仁)为进一步深化东西部协作,近日,济南·天桥—临夏·永靖2023年东西部劳务协作技能培训(第
民族日报·中国临夏网讯(记者马健)4月18日,临夏州社会治安综合治理中心工作座谈会召开,回顾总结前一阶段全州综治中心工作,安排部署全州综
近年来,临夏县投资2 2亿元,流转土地2300多亩,在尹集镇新兴村、大滩涧村、新寨村和刁祁镇龙泉村建设砖墙全钢骨架高效节能日光温室534座,种
民族日报·中国临夏网讯(记者马健)4月18日,临夏州社会治安综合治理中心服务大厅、临夏州矛盾纠纷调处服务中心新址正式揭牌启用,标志着我州
民族日报·中国临夏网记者马瑞鹏四月的和政大地塔吊林立、机械轰鸣,全县上下铆足干劲,掀起大干快干建设热潮,让项目建设跑出了“加速度”。