如何保证消息的可靠性,避免消息丢失

简介: 如何保证消息的可靠性,避免消息丢失

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

(1)生产者把消息发送到 RabbitMQ Server 的过程中丢失

(2)RabbitMQ Server 收到消息后再持久化之前宕机导致消息 丢失

(3)消费端收到消息还没来得及处理,此时宕机,导致 RabbitMQ Server 认为这个消息已签收,无法重复投递导致消息丢失

 

所以我认为保证消息可靠性从 生产者、MQ、消费者中这三个方面着手就可以了

解决方案:

 

从生产者发送消息到 Server 端的角度:RabbitMQ 提供了事务(transaction)和确认(confirm)两种模式来确保生产者不丢消息。

(1)开启事务 channel.txSelect (),然后发送消息,如果发送过程中出现什么异常,事务就会回滚 channel.txRollback (),如果发送成功则提交事务 channel.txCommit (),但是这种方式是同步的,会导致吞吐量下降;

(2)confirm 确认模式:RabbitMQ 提供了一个 Confirm 消息确认机制,消息从生产者发送到 Server 端以后,如果消息处理成功,Server 端会返回一个 ack 的消息,那么客户端可以根据消息的处理结果,来决定是否要对消息进行重新发送,从而确保消息发送到 Server 端上。

 

从 RabbitMQ Server 端的角度:可以开启消息的持久化机制,也就是收到消息之后持久化到磁盘里面。设置持久化的方式有两个步骤:

(1)创建 Queue 的时候设置为持久化

(2)发送消息的时候,把消息投递模式设置为持久化投递。

 

不过虽然设置了持久化消息,但是有可能也会出现问题,比如消息刷新到磁盘之前,RabbitMQ 的 Server 端宕机,导致消息丢失的一个问题。所以为了确保万无一失,我们需要结合 Confirm 消息确认机制来一起使用。

 

从消费端的角度:我们可以把消息的自动确认机制修改为手动确认,也就是消费端只有手动调用消息确认方法,才表示这个消息已经被签收。

这种方式可能会造成消息的重复消费的问题,这里需要考虑到幂等性的一个设计。

 

以上就是我对保证消息的可靠性的全部理解。

 

image.png


  • 生产者提交给消息服务器时,使用确认机制
  • 消息服务器对应的队列、交换机等都持久化,保证数据的不丢失
  • 消费者关闭 RabbitMQ 自动 ACK,采用消息确认机制,保证数据的不丢失
相关实践学习
消息队列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
相关文章
|
6月前
|
消息中间件 存储 运维
|
6月前
|
消息中间件 安全 Kafka
Kafka保证消息不丢失不重复
Kafka保证消息不丢失不重复
101 6
|
消息中间件 存储 Kafka
如何保证MQ中消息的可靠性传输?
如何保证MQ中消息的可靠性传输?
108 1
|
消息中间件 存储 Kafka
MQ保证消息幂等机制
MQ保证消息幂等机制
247 0
|
6月前
|
消息中间件 存储 负载均衡
【mq】如何保证消息可靠性
【mq】如何保证消息可靠性
141 0
|
6月前
|
消息中间件 存储 Java
MQ怎么确保消息不丢失
MQ怎么确保消息不丢失
|
6月前
|
消息中间件 存储 程序员
RabbitMQ消息丢失的场景,如何保证消息不丢失?(详细讲解,一文看懂)
RabbitMQ消息丢失的场景,如何保证消息不丢失?(详细讲解,一文看懂)
325 0
RabbitMQ消息丢失的场景,如何保证消息不丢失?(详细讲解,一文看懂)
|
消息中间件 NoSQL Kafka
如何保证消息不被重复消费?或者说,如何保证消息消费的幂等性?
为了提高应用程序的性能和可扩展性,很多应用程序开始采用消息队列(MQ)来处理消息。 MQ 可以将消息异步地发送到目的地,从而实现解耦、异步处理和流量控制等功能。 但是,MQ 也带来了一些问题,如消息重复消费和消息消费的幂等性问题。 本文将介绍 MQ 如何保证消息不被重复消费,并讨论如何保证消息消费的幂等性。
|
消息中间件 存储 Kafka
MQ 学习日志(六) 保证消息的可靠性传输
消息的可靠性传输 简述
115 0
|
消息中间件 Kafka 测试技术
MQ 学习日志(七) 保证消息消费的顺序性
保证消息消费的顺序性
179 0