使用 Spring Cloud Bus 在微服务之间传递消息示例
(相关资料图)
下面是一个完整的示例,演示如何使用 Spring Cloud Bus 在微服务之间传递消息。该示例包含两个微服务,一个是消息发送者,另一个是消息接收者。
首先,我们需要创建一个 Spring Boot 项目,并添加 Spring Cloud Bus 和 RabbitMQ 的依赖。在 pom.xml 文件中添加以下依赖:
org.springframework.cloud spring-cloud-starter-bus-amqp 2.2.1.RELEASE org.springframework.boot spring-boot-starter-web 2.2.1.RELEASE org.springframework.boot spring-boot-starter-amqp 2.2.1.RELEASE 在创建的项目中,我们定义了一个消息类型 MyMessage,该类型包含一个字符串类型的 content 属性。
javaCopy codepublic class MyMessage implements Serializable { private static final long serialVersionUID = 1L; private String content; public MyMessage(String content) { this.content = content; } public String getContent() { return content; } public void setContent(String content) { this.content = content; }}然后,我们创建了一个消息发送者,该发送者使用 Spring Cloud Bus 发送消息。
@RestControllerpublic class MyController { @Autowired private MessageSender messageSender; @PostMapping("/send") public void sendMessage(@RequestBody MyMessage message) { messageSender.sendMessage(message); }}@Servicepublic class MessageSender { private static final Logger LOGGER = LoggerFactory.getLogger(MessageSender.class); @Autowired private MessageChannel output; public void sendMessage(MyMessage message) { LOGGER.info("Sending message: {}", message.getContent()); output.send(MessageBuilder.withPayload(message).build()); }}@Servicepublic class MessageListener { private static final Logger LOGGER = LoggerFactory.getLogger(MessageListener.class); @StreamListener(target = Sink.INPUT, condition = "headers["type"]=="MyMessage"") public void handleMessage(MyMessage message) { LOGGER.info("Received message: {}", message.getContent()); }}在这个例子中,我们创建了一个 MyController 类,该类定义了一个发送消息的 API 接口,接收一个 MyMessage 类型的参数,将参数传递给 MessageSender 类的 sendMessage() 方法。
MessageSender 类定义了一个 sendMessage() 方法,该方法使用 Spring Cloud Stream 的 output 消息通道发送消息。
MessageListener 类定义了一个 handleMessage() 方法,该方法使用 @StreamListener 注解监听 Spring Cloud Stream 的 input 消息通道,并根据消息类型过滤消息。当有符合条件的消息到达时,handleMessage() 方法会被自动调用,处理接收到的消息。
在以上代码中,我们使用了 @Autowired 注解自动注入了 MessageSender 和 MessageListener 类,这是 Spring Boot 自带的依赖注入功能。
运行应用程序后,我们可以使用 Postman 工具或其他 HTTP 工具发送 HTTP POST 请求,将消息发送到消息发送者的 API 接口,如下所示:
POST http://localhost:8080/send HTTP/1.1Content-Type: application/json{ "content": "Hello, World!"}当消息到达时,消息接收者会打印消息内容,如下所示:
2023-04-19 09:24:47.836 INFO 29740 --- [afka-listener-1] com.example.demo.M 关键词:
责任编辑:hnmd004
- 热点评!沛嘉医疗-B(09996)早盘涨超8%,中期业绩释放多重积极信号2026-08-24
- 中关村连收3个涨停板2026-08-24
- 长春高新:金赛佳®Ⅳ期临床试验聚焦高龄助孕群体2026-08-24
- 蜂亿健品牌:深入养蜂基地抓源头质量,确保顾客吃上绿色放心产品2026-08-24
- 8月24日元件板块跌幅达5%2026-08-24
- AcFan与时共进拥抱AI创作新技术!打造拟真人Vlog栏目,让AC娘走进用户的校园日常2026-08-24
- 乐划锁屏以三重美学体验,点亮指尖日常温柔2026-08-24
- 梁王夺冠为国羽正名!创4纪录颁奖两人脸都笑烂 王祉怡后台送上祝贺2026-08-24
- 巴萨神助攻!曼联捡到天大机会!昔日王牌遭弗里克彻底放弃 每日焦点2026-08-24
- 突破人情干扰,守住工亡认定的公平底线——以基层政务彰显“人民立场”2026-08-24
- 南方稳健成长贰号混合 (202002) 怎么样?202002今日估值2026-08-24
- 安世中国成本下台阶:从5寸到12寸,单颗芯片如何便宜70%2026-08-24
- 易方达优质精选混合 (QDII)(110011) 怎么样?110011基金行情2026-08-24
- 基金定投计算器怎么算收益?计算公式与使用方法详解2026-08-24
- 基金分红是什么意思?分红越多代表基金越好吗?2026-08-24
- 易方达消费行业股票 (110022) 怎么样?110022 基金行情2026-08-24
- 黄金基金有哪些?国泰黄金基金行情2026-08-24
- 005827是什么基金?005827基金行情2026-08-24
- 今日看点:止盈安排为何影响风险控制要关注?2026-08-24
- 每日关注!控股股东拟变更为博泰车联,海鸥住工开盘涨停2026-08-24
- 宏昆酒店集团旗下宝欐品牌携手新东方文旅 深耕西双版纳康养旅居市场2026-08-24
- 【意甲】AC米兰2比1客胜都灵,西塞、拉比奥建功2026-08-24
- ITZY Lia温泉泳装照曝光 蓝格吊带秀直角肩 慵懒眼神引热议_最资讯2026-08-24
- 开盘|国内期货主力合约涨多跌少,集运欧线涨超4%2026-08-24
- 8月24日生意社大豆油基准价为8914.00元/吨2026-08-24
- 前沿资讯!今年前7个月 山西省进出口总值近800亿元2026-08-24
- 上半年营收与净利双增 妙可蓝多推分红计划 当前看点2026-08-24
- 本科生涌入技校后,滤镜碎了2026-08-24
- 焦点讯息:国米替补双星坚持留队!飞翼迫使罗马诺改口 第五前锋计划生变2026-08-24
- 加拿大驻美大使:加美贸易谈判破裂原因涉及多项议题 视讯2026-08-24
