使用 Spring Cloud Bus 和 Spring Cloud Stream 集成实现基于消息的事件驱动-天天看热讯
基于消息的事件驱动是一种常见的微服务架构设计模式,它将不同的微服务之间通过消息进行通信,实现松耦合、高可伸缩性和高可靠性。在这种架构下,每个微服务都是独立的,它们可以在消息传递的过程中进行异步操作,这使得整个系统的性能得到了很大的提升。
在 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 集成实现基于消息的事件驱动-天天看热讯
基于消息的事件驱动是一种常见的微服务架构设计模式,它将不同的微服务之间通过消息进行通信,实现松耦合、
怎么在excel中做数据分析_怎样用 Excel 做数据分析-全球报道
1、用Excel做数据分析:1 打开原始数据表格,制作本实例的原始数据要求单列,确认数据的范围。2、本实例为
宝马MINI冰激凌事件持续发酵,某公司要求员工换掉宝马,否则开除
上海车展宝马MINI冰激凌事件持续发酵中,起因是上海车展宝马MINI的展台,工作人员只给外国人发冰激凌,没有
微微一笑很倾城 百度网盘电视剧_微微一笑很倾城电视剧百度云网盘
1、《微微一笑很倾城》是根据顾漫同名小说改编,由林玉芬执导,郑爽、杨洋、毛晓彤、白宇、牛骏峰、郑业成
世界短讯!商务部研究院电商所:跨境电商出口合规将呈现“三化”特点
商务部研究院电商所:跨境电商出口合规将呈现“三化”特点:据证券时报,商务部研究院电子商务研究所今日在
什么地方开口说话要付钱?_什么地方开口说话要付钱 天天速看料
1、1。2、4。3、6。4、电话[英语:Telephone,出自希腊语τῆλε(tēle,意为“远”)和φωνή(phō
高速铁路信号技术 修订版_关于高速铁路信号技术 修订版简述-天天新要闻
小伙伴们,你们好,今天小夏来聊聊一篇关于高速铁路信号技术修订版,关于高速铁路信号技术修订版简述的文章
当前资讯!小米手机死机怎么解决_小米手机死机开不了机怎么办
1、处理建议如下:检查是不是手机主板短路,如果是那么就需要更换主板。2、2、检查是不是手机硬件设施损坏
33分16板6助!火箭交易果然赌赢了,新帅二选一,哈登或回休斯顿
33分16板6助!火箭交易果然赌赢了,新帅二选一,哈登或回休斯顿,火箭队,休斯顿,nba,沃格尔,76人队,火箭交易
海南省海口市发布雷雨大风黄色预警-世界球精选
海口市气象台2023年04月22日14时40分发布雷雨大风黄色预警信号:受对流云团影响,我市石山镇、永兴镇、东山
乌兹别克斯坦政府和企业家代表团参观新疆农业博览园 纷纷驻足观看拍照
4月21日下午,乌兹别克斯坦政府和企业家代表团参观了新疆农业博览园,代表团成员看到流水化作业、无土栽培
来自40万米高空的凝望!200余颗在轨遥感卫星守护“美丽中国”
今天(22日)是第54个世界地球日,这是一个专门为世界环境保护而设立的节日。近年来,我国不断加大生态修复
预警!猪价“涨不动”,豆粕行情“跳水”,羊价惨淡,发生了啥? 热门
在国内农产品市场,近期,多种农产品价格走势分歧,其中,生猪市场,猪价止跌上涨,市场呈现波动偏强的走势
育碧重返Steam:《远哭6》《彩6异种》上Steam页面-环球百事通
育碧重返Steam。旗下游戏《孤岛惊魂6》《极限国度》《彩虹六号:异种》《地产大亨:狂乐派对》的Steam商店
【世界独家】英国代购什么东西最划算_英国代购什么最划算
1、赚钱多的就是奢侈品,但前提你有客户需求。2、打折店的名牌包包,衣服皮鞋什么的,价格也就是咱正品店要