RabbitMQ-如何保证消息不丢失

RabbitMQ-如何保证消息不丢失

使用场景

  1. 异步发送(验证码、短信、邮件...)
  2. MYSQL和Redis、ES之间的数据同步
  3. 分布式事务
  4. 削锋填谷
  5. ...

  1. 生产者确认机制,RabbitMQ提供了publisher confirm机制来避免消息发送到MQ过程中丢失。消息一旦发送到MQ后,会返回一个结果给发送者,表示消息是否处理成功。

  2. 消息持久化,MQ默认是保存在内存当中的,开启持久化功能可以确保缓存在MQ中的消息不丢失。

    1. 持久化交换机
    2. 队列持久化
    3. 消息持久化,SptingAMQP中的消息默认就是持久化的。
  3. 消费者确认机制,消费者处理消息后可以向MQ发送ack回执,MQ收到ack回执后才会删除该消息,SpringAMQP支持3中模式

    1. manual,手动ack,需要在业务代码结束后,调用API发送ack
    2. auto,自动ack,由Spring检测代码是否出现异常,没有异常返回ack,抛出异常返回nack
    3. none,关闭ack,MQ假定消费者获取消息后会成功处理,因此该消息被投递后会立即删除

    一般配合重试机制使用,在消费者出现异常时利用本地重试,达到一定次数后,如果消息依然失败,将消息投递到异常交换机,交由人工处理了。

RabbitMQ-如何保证消息不丢失?

  1. 生产者确认机制,当消息成功投递到MQ后,回执一个ack,如果投递失败回执nack
  2. 消息持久化,开启消息持久化后,MQ中缓存的数据就不会丢失
  3. 消费者确认机制,当消息投递到消费者后,消费者如果成功消费那么就回执一个ack,MQ就会删除这个消息,如果出现异常那么就回执nack。如果我们配置了重试,那么重试一定次数后依旧失败,这个消息就应该被投递到异常交换机中,交由人工处理。

相关推荐
编程彩机2 小时前
互联网大厂Java面试:从微服务到分布式缓存的技术场景解析
redis·spring cloud·消息队列·微服务架构·openfeign·java面试·分布式缓存
编程彩机5 小时前
互联网大厂Java面试:从分布式缓存到消息队列的技术场景解析
java·redis·面试·kafka·消息队列·微服务架构·分布式缓存
AC赳赳老秦6 小时前
外文文献精读:DeepSeek翻译并解析顶会论文核心技术要点
前端·flutter·zookeeper·自动化·rabbitmq·prometheus·deepseek
编程彩机1 天前
互联网大厂Java面试:从Spring Boot到微服务的技术场景解读
spring boot·微服务·消息队列·java面试·分布式系统
invicinble1 天前
关于Rabbitmq在逻辑主体层面的配置
spring boot·rabbitmq·java-rabbitmq
I_Jln.1 天前
RabbitMQ+SpringAMQP 从入门到精通
分布式·rabbitmq
编程彩机2 天前
互联网大厂Java面试:从Spring Boot到消息队列的技术场景解析
java·spring boot·分布式·面试·kafka·消息队列·rabbitmq
洛阳纸贵2 天前
JAVA高级工程师--RabbitMQ消费者消息限流、超时、死信队列以及若依集成升级
java·rabbitmq·java-rabbitmq
编程彩机2 天前
互联网大厂Java面试:从消息队列到微服务架构场景解析
kafka·消息队列·分布式事务·微服务架构·java面试
福赖2 天前
《微服务即使通讯中RabbitMQ的作用》
c++·微服务·架构·rabbitmq