RabbitMQ消息丢失、积压、重复等解决方案

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: RabbitMQ消息丢失、积压、重复等解决方案

消息丢失

1、只要订单完成我们就会发送一条消息给MQ,这个途中突然MQ服务器网络中断,导致消息无法抵达

做好容错方法需要在消息发送前加上异常处理

try {
  rabbitTemplate.convertAndSend("order-event-exchange", "order.release.other", orderTo);
    } 
catch (Exception e) {
   //将没法送成功的消息进行重试发送
    }

还可以将消息存入数据库,把失败的消息定期重新再发一遍

2、当消息发送给MQ,通过Brock通过交换机抵达队列,MQ关机了,只有抵达队列才能实现消息持久化

这时候需要使用生产者的确认机制

393467f9aa45a26b75ff2ef2017531ac_202110212047750.png

只要消息收到了会自动持久化,如果进入另一个回调方法说明报错了,需要修改数据库使消息重发

3、自动ACK的状态下。消费者收到消息,但没来得及消息然后宕机

一定开启手动ACK,消费成功才移除,失败或者没来得及处理就noAck并重新入队

消息重复

1、消息消费成功,事务已经提交,ack时,机器宕机。导致没有ack成功,Broker的消息重新由unack变为ready,并发送给其他消费者

e1cb1e14b7bb6d11d0fb7c55d2f1ded3_202110212056474.png

在ack的时候宕机,导致消息没有确认,又需要重新发送

2、消息消费失败,由于重试机制,自动又将消息发送出去

a30cfb556076144bd0ede39a37884108_202110212059806.png

关闭订单的时候,没有成功,又重新进入队列再次执行,这种是可以允许的

解决办法:

  • 消费者的业务消费接口应该设计为幂等性的。比如扣库存有工作单的状态标志
  • 使用防重表(redis/mysql),发送消息每一个都有业务的唯一标识,处理过就不用处理
  • rabbitMQ的每一个消息都有redelivered字段,可以获取是否是被重新投递过来的,而不是第一次投递过来的

02cd0b51ebffb4b36f31a25e9d4c5a7b_202110212107872.png

判断当前消息是否是第二次及以后被派发过来的

消息积压

  • 消费者宕机积压
  • 消费者消费能力不足积压
  • 发送者发送流量太大
  • 上线更多的消费者,进行正常消费
  • 上线专门的队列消费服务,将消息先批量取出来,记录数据库,离线慢慢处理

这也是实现了柔性事务-可靠消息+最终一致性解决方案

做好消息确认机制(生产者、消费者)+手动确认机制

并把消息在数据库做好记录

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
10天前
|
消息中间件 运维 监控
云消息队列RabbitMQ实践解决方案评测报告
本报告旨在对《云消息队列RabbitMQ实践》解决方案进行综合评测。通过对该方案的原理理解、部署体验、设计验证以及实际应用价值等方面进行全面分析,为用户提供详尽的反馈与建议。
43 15
|
9天前
|
消息中间件 弹性计算 运维
阿里云云消息队列RabbitMQ实践解决方案评测报告
阿里云云消息队列RabbitMQ实践解决方案评测报告
35 9
|
5天前
|
消息中间件 监控 数据处理
解决方案 | 云消息队列RabbitMQ实践
解决方案 | 云消息队列RabbitMQ实践
14 1
|
9天前
|
消息中间件 监控 持续交付
《云消息队列RabbitMQ实践》解决方案测评报告
《云消息队列RabbitMQ实践》解决方案通过RabbitMQ实现业务解耦、异步处理和高可用性。其核心优势包括消息持久化、灵活路由及高可靠性。文档详细介绍了部署步骤、配置方法及监控手段,帮助用户快速搭建消息队列系统。方案适用于电商、金融和实时数据处理等高并发场景,通过异步处理提升系统性能。建议增加自动化部署、复杂场景示例及更详尽的日志解析,进一步提升用户体验。
|
5月前
|
消息中间件 人工智能 Java
RocketMQ重复消费的症状以及解决方案
RocketMQ重复消费的症状以及解决方案
|
5月前
|
消息中间件 Java 数据库
秒杀系统库存超卖问题:从传统解决方案到引入RabbitMQ
秒杀系统库存超卖问题:从传统解决方案到引入RabbitMQ
397 0
|
消息中间件 Linux
3、RabbitMQ教程-在Linux上安装RabbitMQ报错解决方案
3、RabbitMQ教程-在Linux上安装RabbitMQ报错解决方案
217 0
3、RabbitMQ教程-在Linux上安装RabbitMQ报错解决方案
EMQ
|
机器学习/深度学习 传感器 存储
基于 EMQX 和 Neuron 的工业物联网 MQTT Sparkplug 解决方案
在本文中,我们将使用开源分布式 MQTT Broker EMQX,以及边缘工业协议网关软件 Neuron,来构建一个可扩展和稳健的平台,用于实现 Sparkplug 解决方案。
EMQ
184 0
基于 EMQX 和 Neuron 的工业物联网 MQTT Sparkplug 解决方案
|
消息中间件 数据库
RabbitMQ保证消息的一致性解决方案RabbitMQ保证消息的一致性解决方案
RabbitMQ保证消息的一致性解决方案RabbitMQ保证消息的一致性解决方案
|
消息中间件 存储 SQL
【ELK解决方案】ELK集群+RabbitMQ部署方案以及快速开发RabbitMQ生产者与消费者基础服务
大概一年多前写过一个部署ELK系列的博客文章,前不久刚好在部署一个ELK的解决方案,我顺便就把一些基础的部分拎出来,再整合成一期文章。大概内容包括:搭建ELK集群,以及写一个简单的MQ服务。
560 0
【ELK解决方案】ELK集群+RabbitMQ部署方案以及快速开发RabbitMQ生产者与消费者基础服务

热门文章

最新文章

下一篇
无影云桌面