RabbitMQ消息丢失怎么办

简介: RabbitMQ消息丢失怎么办

消息丢失怎么办

可能出现消息丢失的三种情况:

  • 生产者发送消息到RabbitMQ服务器后,RabbitMQ服务器出现宕机(生产者发送成功,mq宕机)
  • RabbitMQ服务器出现类似脑裂问题后重启服务()
  • 消费者接收到MQ消息后出现宕机或者业务处理异常(接收者接收到消息之后宕机/业务异常)

应对以上三种情况,有以下对应的解决方法:

生产者confirm模式

针对生产者发送消息后MQ宕机问题,生产者开启事务消息可以保证消息到达MQ服务器。经过测试开启事务消息会降低2~10倍的吞吐量,而且会使生产者和应用程序产生同步。

所以,RabbitMQ团队有更好的方案来保证消息投递:发送方确认模式。当然你需要告诉Rabbit将信道设置成confirm模式


消息持久化

MQ服务器出现类似脑裂问题后重启服务器导致消息对视问题,如果MQ重启后,队列和交换机都会消失(随同里面的消息)。原因是因为每个队列和交换机默认的durable默认方式是false,确定了交换机和队列需要重新建立,我们将值设置为true就不会出现重新建立交换机和队列的情况,但是消息还是会消失。但是可以从奔溃的MQ中恢复的消息我们称为消息的持久化。只需将要投递的消息标记为持久化。RMQ的持久化,是不承诺100%消息不丢失的。


消息者补偿机制

MQ发送消息后消费者宕机或者消费者处理消息时出现异常的场景。消息丢失取决于消费者端是手动ack还是自动ack,如果业务量不大的情况可以使用手动ack,这样MQ就不会发送完消息之后马上删除消息,需要消费者确定消息处理完成之后才删除消息。如果业务量大的情况下使用手动ack会影响系统的吞吐量,可以出现消息积压现象。因此业务量大的话我们会选择自动ack,如何保证消息步丢失呢?

我们做了一下消息补偿机制:

其中的ES可以替换为其他非关系型数据库,MangoDB,Redis...

生产者发送消息

1.1 生产者发送消息到RabbitMQ服务器

1.2 RabbitMQ通过异步confirm方式通知生产者消息接收完成

1.3 生产者可以异步将消息存入ES(备份消息),防止MQ服务器重启导致消息丢失,当然交换机、队列和消息现在是持久化状态

消费者消费消息

2.1 消费者接收数据

2.2 接收到消息首先写入ES

2.3 业务处理完成后删除ES中备份的消息

补发定时任务

3 定时任务补发消费失败消息并更新补发次数

报警定时任务

4 定时任务抓取补发超过3次消息邮件报警人工干预

相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
机器学习/深度学习 传感器 前端开发
Bootstrap区间预测 | Matlab Bootstrap区间预测 为您的点预测提供置信区间
Bootstrap区间预测 | Matlab Bootstrap区间预测 为您的点预测提供置信区间
|
JSON Prometheus 监控
使用redis exporter轻松实现redis监控
上一篇我们讲到使用prometheus和grafana可以实现监控平台,本篇我们以监控redis为例展示如何对中间件进行监控配置。
5733 0
|
5月前
|
安全 Serverless API
MCP Server 之旅第 5 站:服务鉴权体系解密
本文深入探讨了MCP协议在授权机制上的演进与函数计算对MCP场景下Auth的支持。文章从MCP协议的授权发展入手,分析了2024-11-05无授权支持到2025-03-26基于OAuth 2.1的授权机制,再到最新Draft中引入Protected Resource Metadata(RFC9728)的变化。同时,详细介绍了函数计算如何通过Bearer认证方式解决MCP场景下的授权问题,帮助开发者降低开发成本并提升安全性。
|
安全 网络安全 数据安全/隐私保护
内网IP地址实现HTTPS加密访问教程
在内网环境中,为确保数据传输的安全性,绑定SSL证书搭建HTTPS服务器至关重要。本文介绍了内网IP地址的前期准备、申请SSL证书的步骤以及客户端配置方法。具体包括选择合适的CA、注册账号、提交申请、下载证书,并在客户端导入根证书,确保通信数据的安全加密。推荐使用JoySSL提供的技术解决方案,确保内网设备通信安全。
内网IP地址实现HTTPS加密访问教程
|
消息中间件 存储 监控
Kraft模式下Kafka脚本的使用
【9月更文挑战第9天】在Kraft模式下,使用Kafka脚本涉及以下几个关键步骤:启动Zookeeper和Kafka服务、创建主题、发送与消费消息、查看主题列表及描述主题详情。通过指定配置文件与相关参数,如`--replication-factor`和`--partitions`,可以灵活管理主题。此外,确保根据实际需求调整配置文件中的参数,并监控日志以维持最佳性能与及时问题处理。
515 8
|
Shell Linux Python
python执行linux系统命令的几种方法(python3经典编程案例)
文章介绍了多种使用Python执行Linux系统命令的方法,包括使用os模块的不同函数以及subprocess模块来调用shell命令并处理其输出。
604 0
|
JSON 前端开发 数据格式
如何在Django中正确解析POST请求参数
如何在Django中正确解析POST请求参数
400 1
|
传感器 存储 机器学习/深度学习
cartographer环境建立以及建图测试(详细级)
cartographer环境建立以及建图测试(详细级)
1760 1
cartographer环境建立以及建图测试(详细级)
|
机器学习/深度学习 数据采集 运维
数据挖掘实践(金融风控):金融风控之贷款违约预测挑战赛(上篇)[xgboots/lightgbm/Catboost等模型]–模型融合:stacking、blending
数据挖掘实践(金融风控):金融风控之贷款违约预测挑战赛(上篇)[xgboots/lightgbm/Catboost等模型]–模型融合:stacking、blending
|
测试技术 双11 缓存
独家揭秘 | 阿里怎么做双11全链路压测?
本文是《Performance Test Together》(简称PTT)系列专题分享的第7期,该专题将从性能压测的设计、实现、执行、监控、问题定位和分析、应用场景等多个纬度对性能压测的全过程进行拆解,以帮助大家构建完整的性能压测的理论体系,并提供有例可依的实战。
7560 89