使用 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 监听到并处理了。
标签:
您可能也感兴趣:
今日热点
为您推荐
全球通讯!张坤、刘格菘等顶流发声!刘格菘:重点持仓光伏、储能、新能源车
全球时讯:拜登将签令限制美企对华关键经济领域投资?外交部:坚决反对
上海证券交易所原副总经理刘逖接受监察调查
排行
- 浦东新区概念共有多少支个股?8月25日涨幅较大的个股是中远海...
- 基站概念股9月5日整体上涨0.96%:领涨股为宇晶股份 领跌股为和而泰
- 贝肯能源2022年第二季度营收是多少?贝肯能源5日内股价上涨8.62%
- 民爆板块9月6日午后报涨:雪峰科技领涨 凯龙股份、同德化工等跟涨
- 杭叉集团2022年第二季度营收是多少?宁德时代概念9月6日报涨...
- 传动板块9月7日午后报涨:双环传动领涨 泉峰汽车、德恩精工等跟涨
- 光伏电池概念共有多少支个股?9月7日涨幅较大的个股是沐邦高...
- 便携式储能概念共有多少支个股?9月8日涨幅较大的个股是隆鑫...
- TOPCON电池概念股9月8日早盘涨:钧达股份领涨 ST中利、星帅...
- 瑞康医药2022年第二季度营业总收入是多少?牙科医疗概念股9月...
精彩推送
- 使用 Spring Cloud Bus 和 Spring Cloud Stream 集成实现基于消息的事件驱动
- “十八少年”对话叶舟:打开《凉州十八拍》的N种方式-天天热资讯
- 国内商品期货收盘 铁矿石跌近5%-世界快资讯
- 世界动态:国家发展改革委负责同志与澳大利亚西澳州州长麦高文...
- 发改委:研究推动做好能源电力安全保供相关工作 焦点信息
- 环球速读:沪深港通交易日历优化下周一正式上线实施 有力提...
- 全球通讯!张坤、刘格菘等顶流发声!刘格菘:重点持仓光伏、...
- 宝利翔源 | 持续深化科技创新发展,助力财富管理步入数字化时代
- 财报速递:有友食品2023年一季度净利润4745.12万元,总体财务...
- 全球时讯:拜登将签令限制美企对华关键经济领域投资?外交部...
- 当前聚焦:号称“史上最强火箭”的“星舰”,发射失败
- 贝特瑞:为鼓励投资者长期持有上市公司股票,目前分红享有税...
- 环球观热点:屹通新材:公司风电类产品预计明年上半年建成投...
- 上海证券交易所原副总经理刘逖接受监察调查
- 世界即时看!CCBN2023 | 让“视”界超越梦想
- 实时焦点:朗进科技2022年亏5799万元 2019年上市东北证券保荐
- 宝丰能源拟定增募不超100亿元 2019年上市募81.5亿
- 全球微头条丨塔人网络2022年净利1855.97万同比增长0.96% 营业利润下降
- 欧晶科技拟发不超6.2亿可转债 2022年上市募资5.38亿_全球热文
- 精湛脊柱微创 重撑生命脊梁_全球热推荐
- 兆信股份2022年净利1460.20万同比增长127.66% 销售市场的陆...
- 湖北广电是一家什么企业?湖北广电获得过哪些荣誉?
- 北京互联网法院:数字教育著作权纠纷案件收案量增幅明显 新...
- 前沿生物股票代码是多少?前沿生物股票行情怎么样?
- 美将限制对华高科技投资?权威解读:实质影响不大 A股不必反...
- 正帆科技于上海新设数字科技子公司-天天消息
- 午间公告:长春高新部分董监高增持公司股份;东方雨虹一季度...
- A股异动 | 新华制药(000756.SZ)涨6% 一季度归母净利同比增长39.72%
- 上海市房管局:严禁房地产经纪机构捏造散布涨价信息 将加大...
- 1加元等于多少人民币(2023年4月21日)
- 我天文学家为银河系精确“称重”_焦点观察
- 东方园林主营业务是什么?东方园林股票价格是多少?
- 焦点要闻:1韩元等于多少人民币(2023年4月21日)
- 吉林敖东主营业务是什么?吉林敖东股票价格是多少?
- 4月21日人民币对美元中间价报6.8752 上调235个基点
- 一欧元换多少人民币(2023年4月21日)_天天通讯
- 惠凯医疗完成数千万A+轮投资_天天滚动
- 胡润2023全球独角兽榜揭晓 连连数字连续五次登榜
- 孟晚舟要去美国出差?华为最新声明 当前通讯
- 泰福泵业:公司在手订单充足,生产人员正在努力交付订单,不...
- 亿利达:公司未涉及人工智能领域业务
- 大中矿业收购上游原料厂纵向整合产业链 “董监高” 未来6个...
- 利好袭来 工业互联网核心产业规模新突破!16只军工概念股一...
- A股异动 | 格林精密跌超15% 一季度净亏损超千万元
- 濮耐股份:公司目前没有产品应用到固态储氢,不过公司正在推...
- 微速讯:野村:重申网易-S(09999)“买入”评级 目标价上调至168港元
- 天天观速讯丨嗨!白山新闻来了
- 张文宏:做好应对新冠二次感染的准备!XBB.1.16会致结膜炎吗...
- 环球快报:港股异动丨中国春来逆势涨超8%创历史新高,即将于4...
- 大行评级 | 花旗:中电信首季盈利符预期 维持“买入”评级...
- 高速公路边坡建设管理与实践_关于高速公路边坡建设管理与实践...
- “糖高宗”再刷近年高点!期价已逼近7000元/吨 概念股涨50%...
- “星舰”重型运载火箭在发射升空后不久发生爆炸
- 焦点关注:工商银行筑梦中华金条20克价格今天多少一克(2023...
- 【天天快播报】apparently怎么读的_apparently
- 当前快看:【午报】10股涨停!医药股活跃 宁王逆势上涨
- 央行:中长期看,我国经济不存在长期通缩或通胀基础
- 沪指跌超1% 军工、医药板块逆势活跃 人工智能概念大幅下挫
- 绿茵生态:公司全资子公司森氧文旅,聚焦城市新文旅,生态文...
- 新动态:新型超滤分离法“降伏”核废料镅
- 央行公布2023年第一季度拒收人民币现金处罚情况
- 港股异动 | 呷哺呷哺跌6% 北水连续5日减仓
- 南宁糖业主营业务是什么?南宁糖业股票价格是多少?
- ETF追踪:昨日ETF净申购8.51亿元 资金加仓上证50ETF
- 棕榈股份主要从事什么业务?棕榈股份获得过哪些荣誉?
- 世龙实业:公司氯化亚砜产品业务基本面并未发生重大改变,下...
- 三湘印象前身是什么公司?三湘印象获得过哪些企业荣誉?
- 午评:两市走低 中药、贵金属板块涨幅居前 前沿热点
- 奥运五环是什么颜色_奥运五环分别是什么颜色
- 通讯!孩子王不超10.4亿可转债获深交所通过 华泰联合建功
- 今日最新!申万宏源全资子公司新增被执行人 执行标的3.88万元
- 利柏特公司总部位于哪里?利柏特股票价格是多少?
- 利柏特公司总部位于哪里?利柏特股票价格是多少?
- 今日热讯:合盛硅业首季净利降51% 2022年净利降37%现金流转负
- 银之杰主营业务是什么?银之杰股票价格是多少?
- 南京医药创建于哪一年?南京医药获得过哪些荣誉?
- 期指交割日效应是什么意思?影响期指交割日效应的因素介绍
- 莱特光电成立于哪一年?莱特光电核心产品是什么?
- 港股异动丨Q1业绩公布,三大中资电信运营商均逆势涨超1%-速读
- 系误会!MINI中国再致歉 “老外”是员工 每天300份冰激凌需...
- 宝钢股份六大战略产品是什么?宝钢股份获得过哪些荣誉?
- 逾期提示付款待签收_提示付款待签收
- 国防军工板块持续走高 华如科技20%涨停_全球快消息
- 天天热议:A股异动 | 三美股份放量跌超7% 首季净利同比下降90%
- 一季度外汇收支数据发布-新视野
- 央行:3月末,住户部门贷款同比多增4490亿元|全球热点
- 当前速讯:国家外汇局:国内股票估值低 投资收益前景良好
- 证通电子中标2.63亿元中原大数据中心项目-焦点热讯
- 宝马MINI被指区别对待中国人?最新回应
- 4月25日见!它们来参与长沙4宗“熔断”地块摇号_天天报资讯
- 讯息:4月21日人民币对美元汇率中间价上调235个基点
- 高德红外四大业务板块分别是什么?高德红外获得过哪些荣誉?
- 两部门联合发文:每局剧本娱乐活动结束后必须进行一次防火巡查
- 焦点热门:央行:2023年一季度金融运行总体平稳
- 常友科技过会:今年IPO过关第95家 海通证券过8单
- 西部矿业是哪一年上市的?西部矿业获得过哪些荣誉?
- 英镑疲软并推高英国食品的价格 微动态
- 江海股份:公司已有产品应用于AI硬件,在技术性能和产能方面...
- 【天天聚看点】新增21种新专业,最新大学专业热在哪?冷在哪?
- XBB.1.16流行情况如何?会导致结膜炎吗?国家疾控局回应