RabbitMQ-消费者确认机制

1、确认模式

  • none:不做任何处理,消息投递到消费者了之后,立即返回ACK,并且从MQ将消息删除,非常不安全,不建议使用。
  • manual:手动模式,需要在业务中调用api,ack或者reject。
  • auto:自动模式,SpringAMQP利用AOP对我们的消息处理做了环绕增强,当业务正常执行时返回ACK,执行异常时,根据异常的情况返回不同的结果:
    • 如果是业务异常,会自动返回nack,nack会再次投递MQ消息。
    • 如果是消息处理或校验异常,自动返回reject,拒绝之后不再投递MQ,删除MQ中的消息。一般是以错误的消息,就会这么错里

2、yml文件配置

XML 复制代码
spring:
  rabbitmq:
    listener:
      simple:
        acknowledge-mode: auto #开启自动模式

3、重试机制

消息失败之后会重新入队,然后再次异常,再次入队,无限循环,这会导致mq消息处理飙升,带来不必要的压力。为了缓解这种压力,利用Spring的retry机制,在消费者出现异常的情况下,利用本地重试,重试次数用完之后,再进行消息的投递或者消息的拒绝。

yml文件配置:

XML 复制代码
spring:
  rabbitmq:
    listener:
      simple:
        retry:
          # 是否启用
          enabled: true
          # 初始时间间隔
          initial-interval: 1000ms
          # 下次失败的等待时长的倍数
          multiplier: 1
          # 最大尝试次数
          max-attempts: 3
          # 无状态
          stateless: true

开启重试之后,当重试次数耗尽的时候,如果消息依然失败,则需要调用MessageRecoverer接口来处理,这个接口有三种实现:

  • RejectAndDontRequeueRecoverer:重试耗尽,直接reject,丢弃消息。默认方式。
  • ImmediateRequeueMessageRecoverer:重试耗尽后,返回nack,消息重新入队。
  • RepublishMessageRecoverer:重试耗尽后,将失败消息投递到指定的交换机。然后交给人工处理。
相关推荐
凯子坚持 c17 分钟前
CANN 生态中的分布式训练利器:深入 `collective-ops` 项目实现高效多卡协同
分布式
惊讶的猫1 小时前
rabbitmq实践小案例
分布式·rabbitmq
禁默2 小时前
打破集群通信“内存墙”:手把手教你用 CANN SHMEM 重构 AIGC 分布式算子
分布式·重构·aigc
AC赳赳老秦2 小时前
代码生成超越 GPT-4:DeepSeek-V4 编程任务实战与 2026 开发者效率提升指南
数据库·数据仓库·人工智能·科技·rabbitmq·memcache·deepseek
惊讶的猫4 小时前
rabbitmq初步介绍
分布式·rabbitmq
小镇敲码人4 小时前
华为CANN框架中HCCL仓库的全面解析:分布式通信的引擎
分布式·华为
User_芊芊君子5 小时前
【分布式训练】CANN SHMEM跨设备内存通信库:构建高效多机多卡训练的关键组件
分布式·深度学习·神经网络·wpf
酷酷的崽7985 小时前
CANN 开源生态解析(四):`cann-dist-train` —— 构建高效可扩展的分布式训练引擎
分布式·开源
惊讶的猫6 小时前
AMQP 与 RabbitMQ 四大模型
分布式·rabbitmq
灰子学技术6 小时前
istio从0到1:如何解决分布式配置同步问题
分布式·云原生·istio