如何保证消息的可靠性?可以百分百保证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的可靠性
460 0
|
开发工具 数据安全/隐私保护 git
Git报错 Incorrect username or password (access token) 的解决方式
Git报错 Incorrect username or password (access token) 的解决方式
4232 0
Git报错 Incorrect username or password (access token) 的解决方式
|
10月前
|
消息中间件 Java 数据库
Spring 微服务中的数据一致性:最终一致性与强一致性
本文探讨了在Spring微服务中实现数据一致性的策略,重点分析了最终一致性和强一致性的定义、优缺点及适用场景。结合Spring Boot与Spring Cloud框架,介绍了如何根据业务需求选择合适的一致性模型,并提供了实现建议,帮助开发者在分布式系统中确保数据的可靠性与同步性。
616 0
|
负载均衡 Java Nacos
Spring Cloud五大组件
Spring Cloud五大组件
|
消息中间件 Java 中间件
MQ四兄弟:如何保证消息可靠性
本文介绍了RabbitMQ、RocketMQ、Kafka和Pulsar四种消息中间件的可靠性机制。这些中间件通过以下几种方式确保消息的可靠传输:1. 消息持久化,确保消息在重启后不会丢失;2. 确认机制,保证消息从生产者到消费者都被成功处理;3. 重试机制,处理失败后的重试;4. 死信队列,处理无法消费的消息。每种中间件的具体实现略有不同,但核心思想相似,都是从生产者、中间件本身和消费者三个角度来保障消息的可靠性。
886 0
|
canal 缓存 NoSQL
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
根据对一致性的要求程度,提出多种解决方案:同步删除、同步删除+可靠消息、延时双删、异步监听+可靠消息、多重保障方案
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
|
12月前
|
Arthas 监控 Java
Java死锁 如何定位?如何避免Java死锁?(图解+秒懂+史上最全)
Java死锁 如何定位?如何避免Java死锁?(图解+秒懂+史上最全)
Java死锁 如何定位?如何避免Java死锁?(图解+秒懂+史上最全)
|
Java 编译器
有关电脑中idea编译报错问题java: No implementation was created for AdminUserConverter due to having a problem in
有关电脑中idea编译报错问题java: No implementation was created for AdminUserConverter due to having a problem in
1485 0
|
缓存 监控 NoSQL
Redis--缓存击穿、缓存穿透、缓存雪崩
缓存击穿、缓存穿透和缓存雪崩是Redis使用过程中可能遇到的常见问题。理解这些问题的成因并采取相应的解决措施,可以有效提升系统的稳定性和性能。在实际应用中,应根据具体场景,选择合适的解决方案,并持续监控和优化缓存策略,以应对不断变化的业务需求。
2246 29

热门文章

最新文章