RocketMQ重复消费的症状以及解决方案
创始人
2024-06-01 04:28:43

RocketMQ重复消费的症状以及解决方案

生产消息时重复

症状

当一条消息已被成功发送到 消费者 并完成持久化,此时出现了网络闪断或者客户端宕机,导致服务端对客户端应答失败。 如果此时 生产者 意识到消息发送失败并尝试再次发送消息,消费者 后续会收到两条内容相同并且 ID 也相同的消息。
在这里插入图片描述

方案

  • 避免消费重复产生,找到原因,并做代码的限制。
  • 消费数据时利用Java代码做ID的重复校验,重复则放弃,并返回异常信息。也可以考虑针对数据库有条件的插入语句,限制重复插入。
  • 消费数据时,通过订阅的记录和消费的结果来判断,此消息是否重复订阅过,如果重复订阅,则不在数据库中插入数据。

消费消息时重复

症状

消息已投递到 消费者 并完成业务处理,当 消费者MQ 反馈应答的时候网络闪断。 为了保证消息至少被消费一次,消息队列 MQ 的服务端将在网络恢复后再次尝试投递之前已被处理过的消息,消费者 后续会收到两条内容相同并且 ID 也相同的消息。
在这里插入图片描述

方案

  • 消费数据时利用Java代码做ID的重复校验,重复则放弃,并返回异常信息。也可以考虑针对数据库有条件的插入语句,限制重复插入。

消费时出现异常

症状

消息已投递到 消费者 并完成 业务A 处理,但是 业务B 处理时,发生异常,造成该条消息会标记 消费失败 ,那么为了保证消息至少被消费一次,该条消息会消费多次,直到达到消费16次,会自动放入死信队列。
在这里插入图片描述

方案

  • 分布式事务锁(一般是zookeeper和redis搭建)

相关内容

热门资讯

原创 秦... 在电视剧《大秦帝国·纵横》中,秦惠文王与相国张仪通过演员精湛的表演和编剧的叙事,让这对君臣CP成为观...
思政课如何讲深讲透讲活新质生产... □ 杨若琳 作为马克思主义生产力理论中国化时代化的最新成果,习近平总书记提出的新质生产力理论,展现出...
吉林最新或2023(历届)退休... 吉林最新或2023(历届)退休职工涨工资最新消息,吉林省企业退休人员最新或2023(历届)涨工资  ...
吉林最新或2023(历届)退休... 吉林最新或2023(历届)退休工资调整方案,吉林省企业退休人员最新或2023(历届)涨工资  我省企...
最新或2023(历届)山东公务... 山东是经济大省,但是工资与江浙及珠三角相比工资相差很大,甚至都没有西部省份的高,很多岗位在三千以下,...