当前位置: 首页 > news >正文

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

相关文章:

  • Hadoop集群部署
  • 如何解决大模型返回的JSON数据前后加上```的情况
  • OpenGL Chan视频学习-7 Writing a Shader inOpenGL
  • 使用队列实现栈和使用栈实现队列
  • vue + ant-design + xlsx 实现表格导出进度提示功能
  • 牛客round94E
  • vue3 数值计算 保留小数位
  • 嵌入式学习之系统编程(五)进程(2)
  • day8补充(中断驱动和队列缓冲实现高效数据处理)
  • 文件管理(第八章、九)
  • PDF处理控件Aspose.PDF教程:以编程方式合并PDF文档
  • 一文带你彻底理清C 语言核心知识 与 面试高频考点:从栈溢出到指针 全面解析 附带笔者手写2.4k行代码加注释
  • DP KVM 为何更难实现 EDID 模拟器?
  • day38python打卡
  • 主流Agent Memory工具or框架对比(Mem0、LangMem、Letta)
  • 若依框架中返回自定义实体类分页数据和总记录数的实现方法
  • 【鸿蒙开发】Hi3861学习笔记-雨滴传感器
  • 433M射频接收芯片 XL520 产品特性,空旷环境下通讯距离可达200米
  • liunx、ubantu22.04安装neo4j数据库并设置开机自启
  • 【多智能体系统开发框架AutoGen解析与实践】
  • 五屏网站建设代理商/福州关键词排名优化
  • 南山做网站的/万能优化大师下载
  • 南京建站推广公司/seo培训赚钱
  • 图片发到哪些网站 seo/seo对网店推广的作用
  • 长春网站优化指导/2345网址导航浏览器
  • 网站建设服务费怎么做会计分录/聊城优化seo