如何保证消息的可靠性?可以百分百保证MQ的消息可靠性吗?

简介: 如何保证消息的可靠性?可以百分百保证MQ的消息可靠性吗?

保证MQ消息的可靠性可从几个方面去处理。

  1. 保证生产消息的可靠性
    首先在发送消息时可以开启重试机制,避免因为短暂的网络问题导致发送消息失败。
    RabbitMQ还提供生产者确认机制保证发送消息到MQ的可靠性。
    消息投递成功返回ack,投递失败返回nack。
    消息投递成功但路由失败会返回异常信息。
    我们在发送消息时给每个消息指定一个唯一ID,设置回调方法,如果Publisher Return失败或Publisher Confirm返回nack,我们在回调方法中解析失败消息,并记录到失败表由定时任务去异步重新发送。
  2. 设置消息持久化
    设置交换机持久化:将交换机的定义信息(元数据)持久化到RabbitMQ的数据库中
    队列持久化:将队列的定义信息(元数据)持久化到RabbitMQ的数据库中
    消息持久化:发送消息设置delivery_mode=2,消息进行持久化。
  3. 保证消费消息的可靠性
    RabbitMQ是通过消费者回执来确认消费者是否成功处理消息的:消费者获取消息后,应该向RabbitMQ发送ACK回执,表明自己已经处理完成消息,RabbitMQ收到ACK后删除消息,在处理失败后向MQ发送NACK那么消息会重新投递到消费者。
    RabbitMQ提供三个确认模式:手动ack,自动ack、关闭ack
    本项目使用自动ack模式,当消费消息失败会重试,重试3次如果还失败会将消息投递到固定的交换机,通过交换机将消息转发到失败消息队列,程序监听失败消息队列,接收到失败消息,将失败消息存入失败消息表,通过定时任务进行处理。
  4. 消息队列无法百分百保证可靠性
    消息队列无法百分百保证可靠性,一定要提供补偿机制,比如:支付通知消息发送失败,我们可以在业务层提供支付结果查询接口,由消息消费方调用接口去查询支付结果。
    可以百分百保证MQ的消息可靠性吗?
    无法保证百分百消息可靠,所以使用MQ是针对那些对数据一致性要不是很高的场景。
    当消息出现丢失允许暂时数据不一致最后通过补偿措施保证数据最终一致性即可。
相关实践学习
快速体验阿里云云消息队列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
相关文章
|
消息中间件 存储 数据库
RabbitMQ之MQ的可靠性
RabbitMQ之MQ的可靠性
362 0
|
消息中间件 Java 中间件
MQ四兄弟:如何保证消息可靠性
本文介绍了RabbitMQ、RocketMQ、Kafka和Pulsar四种消息中间件的可靠性机制。这些中间件通过以下几种方式确保消息的可靠传输:1. 消息持久化,确保消息在重启后不会丢失;2. 确认机制,保证消息从生产者到消费者都被成功处理;3. 重试机制,处理失败后的重试;4. 死信队列,处理无法消费的消息。每种中间件的具体实现略有不同,但核心思想相似,都是从生产者、中间件本身和消费者三个角度来保障消息的可靠性。
684 0
|
11月前
|
消息中间件 算法 数据库
如果解决MQ消息堆积问题
如果解决MQ消息堆积问题
|
7月前
|
Arthas 监控 Java
Java死锁 如何定位?如何避免Java死锁?(图解+秒懂+史上最全)
Java死锁 如何定位?如何避免Java死锁?(图解+秒懂+史上最全)
Java死锁 如何定位?如何避免Java死锁?(图解+秒懂+史上最全)
|
11月前
|
NoSQL 数据库 Redis
如何保证MQ幂等性?或 如何防止消息重复消费?
如何保证MQ幂等性?或 如何防止消息重复消费?
|
10月前
|
存储 消息中间件 SQL
数据中台架构与技术体系
本文介绍了数据中台的整体架构设计,涵盖数据采集、存储、计算、服务及治理等多个层面。在数据采集层,通过实时与离线方式整合多类型数据源;存储层采用分层策略,包括原始层、清洗层、服务层和归档层,满足不同访问频率需求;计算层提供批处理、流处理、交互式分析和AI计算能力,支持多样化业务场景。数据服务层封装数据为标准化API,实现灵活调用,同时强调数据治理与安全,确保元数据管理、质量监控、权限控制及加密措施到位,助力企业构建高效、合规的数据管理体系。
2624 13
|
11月前
|
负载均衡 算法 Nacos
服务注册与发现流程
服务注册与发现流程
|
11月前
|
Dubbo Java 应用服务中间件