RabbitMQ-消费者确认机制

打印 上一主题 下一主题

主题 544|帖子 544|积分 1632

1、确认模式

   

  • none:不做任何处置惩罚,消息投递到消费者了之后,立即返回ACK,并且从MQ将消息删除,非常不安全,不建议使用。
  • manual:手动模式,需要在业务中调用api,ack大概reject。
  • auto:自动模式,SpringAMQP利用AOP对我们的消息处置惩罚做了环绕增强,当业务正常实行时返回ACK,实行异常时,根据异常的环境返回不同的结果:

    • 如果是业务异常,会自动返回nack,nack会再次投递MQ消息。
    • 如果是消息处置惩罚或校验异常,自动返回reject,拒绝之后不再投递MQ,删除MQ中的消息。一般是以错误的消息,就会这么错里

  2、yml文件设置 

  1. spring:
  2.   rabbitmq:
  3.     listener:
  4.       simple:
  5.         acknowledge-mode: auto #开启自动模式
复制代码
3、重试机制

消息失败之后会重新入队,然后再次异常,再次入队,无穷循环,这会导致mq消息处置惩罚飙升,带来不须要的压力。为了缓解这种压力,利用Spring的retry机制,在消费者出现异常的环境下,利用本地重试,重试次数用完之后,再进行消息的投递大概消息的拒绝。
yml文件设置:
  1. spring:
  2.   rabbitmq:
  3.     listener:
  4.       simple:
  5.         retry:
  6.           # 是否启用
  7.           enabled: true
  8.           # 初始时间间隔
  9.           initial-interval: 1000ms
  10.           # 下次失败的等待时长的倍数
  11.           multiplier: 1
  12.           # 最大尝试次数
  13.           max-attempts: 3
  14.           # 无状态
  15.           stateless: true
复制代码
开启重试之后,当重试次数耗尽的时候,如果消息依然失败,则需要调用MessageRecoverer接口来处置惩罚,这个接口有三种实现:
   

  • RejectAndDontRequeueRecoverer:重试耗尽,直接reject,抛弃消息。默认方式。
  • ImmediateRequeueMessageRecoverer:重试耗尽后,返回nack,消息重新入队。
  • RepublishMessageRecoverer:重试耗尽后,将失败消息投递到指定的交换机。然后交给人工处置惩罚。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

兜兜零元

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表