基于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 提取出来分别供生产者和消费者使用
    生产者把消息序列化,消费者也需要把消息序列化

    重启服务,发送消息

相关推荐
励志码农1 小时前
JavaWeb 30 天入门:第二十三天 —— 监听器(Listener)
java·开发语言·spring boot·学习·servlet
哈喽姥爷5 小时前
Spring Boot---自动配置原理和自定义Starter
java·spring boot·后端·自定义starter·自动配置原理
小蒜学长6 小时前
基于springboot 校园餐厅预约点餐微信小程序的设计与实现(代码+数据库+LW)
数据库·spring boot·微信小程序
老华带你飞7 小时前
考研论坛平台|考研论坛小程序系统|基于java和微信小程序的考研论坛平台小程序设计与实现(源码+数据库+文档)
java·vue.js·spring boot·考研·小程序·毕设·考研论坛平台小程序
dazhong20128 小时前
Spring Boot 项目新增 Module 完整指南
java·spring boot·后端
xrkhy9 小时前
SpringBoot之日志处理(logback和AOP记录操作日志)
java·spring boot·logback
上官浩仁10 小时前
springboot synchronized 本地锁入门与实战
java·spring boot·spring
m0_7484613911 小时前
Spring Boot + Vue 项目中使用 Redis 分布式锁案例
vue.js·spring boot·redis
山东小木11 小时前
JBoltAI需求分析大师:基于SpringBoot的大模型智能需求文档生成解决方案
人工智能·spring boot·后端·需求分析·jboltai·javaai·aigs
哈喽姥爷12 小时前
Spring Boot--Bean的扫描和注册
java·spring boot·后端·bean的扫描和注册