美文网首页
rabbit mq消息队列导致的死循环如何预防

rabbit mq消息队列导致的死循环如何预防

作者: 提米锅锅 | 来源:发表于2022-10-18 12:02 被阅读0次

    昨天本地启动一个服务的时候,发现一个消费rabbit mq的地方抛出异常,而且不断的重复执行,debug发现每次都是消费的都是同样的数据,查资料发现是mq的自动确认机制导致的。
    可参考这个
    https://www.jianshu.com/p/f10161bf19c7
    推荐使用自动重试机制。

    自动重试机制会在本地重试一定次数,如果还是失败,则把消息放到死信队列,这样消息就不会无限重推了,但是此时需要专门写代码去处理死信队列的消息,不然无法检测消息失败的情况。

    问题?
    我在代码并没有调用ack,客户端是如何确认的消息?
    原来是spring rabbit提供的自动确认的设置, acknowledge-mode=auto
    的话,如果代码不抛异常,会帮我们提交ack到mq服务端,这也是为什么代码有异常之后,消息就无法确认了。

    可参考
    https://www.jianshu.com/p/8127ca9b8f35
    最后,个人推荐的MQ设置方法:
    1 生产者设置为人工ack,避免丢消息。
    2 消费端设置自动重试1次,失败后丢入死信队列。
    3 监控死信队列做业务报警。

    相关文章

      网友评论

          本文标题:rabbit mq消息队列导致的死循环如何预防

          本文链接:https://www.haomeiwen.com/subject/ufmjzrtx.html