天天速递!使用 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

标签:

最近更新

天天速递!使用 Spring Cloud Bus 在微服务之间传递消息示例
2023-04-21 16:06:11
特斯拉赛博皮卡Q3举行交付活动 明年开始批量生产-环球动态
2023-04-21 15:11:03
微速讯:泰聚泰2022年净利75.05万 同比减少52.80% 补助减少
2023-04-21 15:00:07
瑞达恩2022年净利833.24万同比扭亏为盈 营业收入大幅度增加_当前快报
2023-04-21 15:06:10
每日热门:繁昌县气象局发布大风蓝色预警【IV级/一般】
2023-04-21 14:48:55
V观财报|张小泉:2022年净利同比降47.3% 预计舆情负面影响会逐渐减弱 当前时讯
2023-04-21 14:36:56
Lordstown收到退市警示函|世界看热讯
2023-04-21 13:52:57
芳菲四月,邂逅一场特别的草地音乐会_每日焦点
2023-04-21 13:46:47
快资讯:全民健身五年工作总结(推荐47篇)
2023-04-21 13:22:05
青岛警方通报“山东科技大学校外伤人案”:致1死6伤 嫌疑人当场抓获-每日精选
2023-04-21 13:26:11
延庆新一轮老旧小区改造全速推进
2023-04-21 12:51:57
世界最资讯丨海南农垦荣光农场公司桂花香荔枝抢“鲜”上市
2023-04-21 12:25:33
【世界新视野】员工解除劳动合同赔偿金怎么算_员工解除劳动合同赔偿
2023-04-21 11:48:47
加强知识产权法治保障 激发市场主体创新活力-天天热点评
2023-04-21 11:24:18
打击侵权假冒 昆明连续三年考核第一-今日聚焦
2023-04-21 11:08:58
【环球时快讯】去德国留学入学条件有哪些?
2023-04-21 10:34:38
广联达:4月20日融资买入1341.58万元,融资融券余额2.87亿元_快资讯
2023-04-21 10:21:14
V观财报|生产成本上升!中顺洁柔2022年净利润减少近四成
2023-04-21 09:52:17
最大起重量720吨 全球最大塔式起重机湖南常德下线
2023-04-21 09:25:28
浓眉:我很期待G3&我会反弹 恨不得明天就直接打下一场_世界今日讯
2023-04-21 09:36:36
质量强国建设纲要宣贯会举办|天天精选
2023-04-21 09:26:49
执掌篮网近两年学到了什么?马克斯:学到太多 已经可以出书了 环球热议
2023-04-21 08:39:34
祖峰和梅婷主演的电视剧_梅婷主演的电视剧
2023-04-21 08:11:19
婚事简办 文明新风入人心(深阅读·关注婚俗改革)
2023-04-21 07:59:53
最资讯丨片仔癀现7笔大宗交易 总成交金额6142.50万元
2023-04-21 07:51:17
广州美术学院中国画学院教学实践基地在肇庆揭牌
2023-04-21 07:12:53
视点!面部立体感如何打造?如何拥有好看的眉弓?听听上海丽质卢九宁怎么说
2023-04-21 07:01:35
小宝宝睡着了ppt_宝宝睡着就吐奶是什么原因|微动态
2023-04-21 07:02:07
手机如何远程控制电脑(手机远程控制电脑app) 世界快资讯
2023-04-21 06:18:43
一季度广义财政收支差1.6万亿 二季度收入加快已有迹象
2023-04-21 05:47:46