MQ的一些古怪BUG

news/2025/3/27 9:47:37/文章来源:https://www.cnblogs.com/wcy666/p/18790178

在MQ的使用中我遇到了一个奇怪的BUG,在之前的MQ消费消息可靠性中我说,如果队列中的消息被监听者消费出异常,在你自己未配置的情况下,生产者会不断地向消费者发消息,这就会导致出现类似死循环一样地BUG,而我遇到了一个在MQ数据传输间的BUG。
首先我们确保生产者消费者间的数据传输有格式化:配置如下:
@Configuration
public class MesaageConfig {

@Bean
public MessageConverter messageConverter() {// 定义消息转换器Jackson2JsonMessageConverter jackson2JsonMessageConverter = new Jackson2JsonMessageConverter();//设置消息id,自动生成一个id,可用于消息幂等性处理jackson2JsonMessageConverter.setCreateMessageIds(true);return jackson2JsonMessageConverter;
}

}
并且确保有以下依赖

com.fasterxml.jackson.dataformat
jackson-dataformat-xml
2.9.10

接下来我大概描述我的业务,我的一个生产者需要传输一个Long类型的数据和Set类型的数据,而我选择的方法是将俩种封装到Map<String,Object>中,这样可以保证数据的一次性传输,然后我在消费者那边接到了数据并且正确得打印了出来,但是在接收时确猛报BUG,经过我打一遍遍DEBUG与断点调试,最好发现,传输过来得Long类型变成了Integer类型,你拿Map.get接收时只能能Integer去接收,而Set在传过来时也只能拿List去接不然就报错,有需求只能在接收后强转,以下是我的BUG代码,大家注意注意这个小坑!
生产者:
Map<String ,Object> map=new HashMap<>();
Long orderId =UserContext.getUser();
map.put("orderId",orderId);
map.put("itemIds",itemIds);
System.out.println(map);
rabbitTemplate.convertAndSend("trade.topic","order.create",map);
监听者:
@Autowired
private ICartService cartService;
@RabbitListener(bindings = @QueueBinding(
value = @Queue(name = "cart.clear.queue"),
exchange = @Exchange(name = "trade.topic", type = ExchangeTypes.TOPIC),
key = {"order.create"}
)
)
public void handleTradePaySuccessQueue(Map<String,Object> map){
log.warn("收到订单创建成功消息,订单号为{}",map);
Integer orderId = (Integer) map.get("orderId");
log.warn("orderId={}",orderId);
List itemIds = (List)map.get("itemIds");
log.warn("itemIds={}",itemIds);
cartService.removeByItemIdsAndUserId(Long.valueOf(orderId), itemIds);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/904977.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025西安交大集训Day2:DFS,BFS记忆化搜索,迭代加深搜索,二分搜索

2025西安交大集训Day2:DFS,BFS记忆化搜索,迭代加深搜索,二分搜索

掌握 Postman:高级 GET 请求技术与响应分析

欢迎阅读本指南,它将详细介绍如何在 Postman 中发送 GET 请求并理解 API 响应。对于希望提升 API 测试和开发能力的开发者来说,这是不可或缺的技能。 Postman 对开发者的重要性Postman 是 API 开发和测试中不可或缺的工具。它不仅简化了发送请求和分析响应的过程,还提供了一…

带你一起来熟悉linux文件权限体系

了解 Linux 文件权限对于有效且可靠的linux相关系统管理和安全管理至关重要。通过本文中概述的概念并加以实践,您将可以轻松浏览文件权限并确保 Linux 系统的完整,可靠和安全。下面将从权限的格式,常用设置,修改,解析等方面分别说明。 A).Linux 文件权限由三个权限部分组成…

OP100自动安装背板常见问题

1.运行过程中切手动,回原灯一直闪烁,始终无法执行完成 OP50自动安装座板 OP100自动安装背板 OP280自动安装上盖 这几个工站因为有记忆功能,会记住当前步序以及夹爪/吸盘上有没有物体,如果运行中切换手动,并动了气缸,会导致逻辑错乱,类似升降器的SUB40,遇到这种情况: 1…

20244217 2024-2025-2 《Python程序设计》实验一报告

学号 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级: 2442 姓名: 胡峻豪 学号:20244217 实验教师:王志强 实验日期:2025年3月24日 必修/选修: 公选课 1.实验内容 1.熟悉Python开发环境。首先在官网下载并安装PyCharm专业版,安装完成后打开软…

软件工程日报15

Android studio 实现连接远程mysql数据库,并将数据展示出来,由于之前没接触过,全靠按照博客上的指导和ai生成的代码,之后在学习一下 以下是效果

《Python程序设计》实验一报告

课程:《Python程序设计》 班级: 2441 姓名: 王晓凤 学号:20244127 实验教师:王志强 实验日期:2025年3月24日 必修/选修: 公选课 一.实验内容 1.熟悉Python开发环境:本次实验使用了PyCharm。首先在官网下载并安装PyCharm社区版,安装完成后打开软件,创建一个新的Pytho…

抽象bug:mybatis-xml配置错误(configuration and configLocation can not specified with together)

mybatis-xml配置错误(configuration and configLocation can not specified with together) 操作 我在使用mybatis-XML映射配置时,没有将mappper的xml文件放在同名同包的路径下,而是使用辅助配置,在配置文件中设置XML路径.然而,在配置文件后,没有成功,一直报错. 错误信息:"…

关于pytorch中直接调用对象

基于之前有C++基础,对于python中的一些函数的用法总会有些疑问。 例如,为什么python可以直接调用对象,而不是调用对象里的函数呢? 以下为包含__call__函数的类的调用 除此之外, 在PyTorch 中,所有继承自 nn.Module 的类都继承了一个特殊的 call() 方法。 # 使用ToTensor创…

事务注解@Transactional

目录 1、属性介绍 2、传播机制准备例子总结3、原理 4、失效场景 一、属性介绍 1、isolation 属性 事务的隔离级别,默认值为 Isolation.DEFAULT。可选的值有:Isolation.DEFAULT:使用底层数据库默认的隔离级别Isolation.READ_UNCOMMITTED:读取未提交数据(会出现脏读,不可重…

Nature | 整合空间转录组与GWAS数据绘制人复杂性状细胞空间图谱

这篇文章是2025年3月发表在《Nature》杂志上的一篇研究,标题为“Spatially resolved mapping of cells associated with human complex traits”。这篇文章通过开发一种名为gsMap的计算方法,整合高分辨率空间转录组(ST)数据与全基因组关联研究(GWAS)统计结果,实现对人类…