基于SpringBoot+RabbitMQ完成应用通信

作为一个消息队列,RabbitMQ 也可以作为应用程序之间的通信.

消费者代码生产者代码放在不同的应用中即可完成不同应用程序之间的通信

下面以订单程序为例,展示的就是一种基于 Spring + RabbitMQ 实现的应用间的通信

需求描述:

用户下单成功后,,通知物流系统,进行发货(此处只进行应用间通信,不实现其他的具体功能)

订单系统作为一个生产者,物流系统作为一个消费者

1. 创建项目

这里我把两个项目放到一个项目里面,也可以进行拆开

1~ 创建一个空项目(一个空的文件夹)

2~ 在项目中,创建 Module

3~ 后面的流程和创建 SpringBoot 相同

此处创建出两个项目 1) logistics-service 2) order-service

如果创建的项目出现如下情况,说明该项目没有被加载成 Maven 项目

pom 文件图标显示不同

正常情况


修改配置文件

最终结构

2. 订单系统(生产者)

声明队列

编写下单接口,下单成功后,发送订单消息

查看消息

3. 物流系统(消费者)

监听队列

@RabbitListener(queues = "order.queue") 可以加在类上, 也可以加在方法上, 用于定于一个类或者方法作为消息的监听器
@RabbitHandler 是一个方法级别的注解, 当使用 @RabbitHandler 注解时, 这个方法将被调用处理特定的消息

(从队列中获取到的消息类型可能会不同,该注解会根据消息的类型去匹配不同方法的参数,调用不同的方法)

访问订单系统的接口,在物流系统的日志中观察到下单消息

发送消息的格式为对象

创建 OrderInfo 实体类,并实现 Serializable 接口(不需要重写)

修改生产者代码

发送消息

上述消息是被序列化为 二进制 的结果,难以观察
如果通过 RabbitTemplate 发送一个对象作为消息, 我们需要对该对象进行序列化
Spring AMQP推荐使用JSON序列化,Spring AMQP提供了 Jackson2JsonMessageConverter 和
MappingJackson2MessageConverter 等转换器, 我们需要把一个 MessageConverter 设置到RabbitTemplate 中

  1. 修改生产者代码

    将消息序列化
  2. 修改消费者代码

    此处将 order-service 打成一个 jar 包供 消费者引用(非正常情况)
    --> 可以将 OrderInfo 提取出来分别供生产者和消费者使用
    生产者把消息序列化,消费者也需要把消息序列化

    重启服务,发送消息

相关推荐
努力也学不会java15 小时前
【Spring】Spring事务和事务传播机制
java·开发语言·人工智能·spring boot·后端·spring
IT·陈寒16 小时前
从 Spring 到 SpringBoot,再到 SpringAI:框架的进化与思考
java·spring boot·spring
张较瘦_17 小时前
Springboot | 初识Springboot 从“手动做饭”到“点外卖”的编程革命
java·spring boot·后端
一个龙的传说18 小时前
springboot优雅停止的流程梳理
java·spring boot·rpc
摇滚侠18 小时前
Spring Boot 3零基础教程,WEB 开发 国际化 Spring Boot + Thymeleaf 笔记45
spring boot·笔记·后端
韩立学长19 小时前
【开题答辩实录分享】以《智能垃圾回收小程序》为例进行答辩实录分享
spring boot·小程序
lang201509281 天前
Spring Boot优雅关闭全解析
java·spring boot·后端
刘一说1 天前
Spring Boot 启动慢?启动过程深度解析与优化策略
java·spring boot·后端
lang201509281 天前
Spring Boot缓存机制全解析
spring boot·后端·缓存
摇滚侠1 天前
Spring Boot 3零基础教程,WEB 开发 默认页签图标 Favicon 笔记29
java·spring boot·笔记