首页 > 解决方案 > 异步处理消息时处理异常的 RabbitMQ 最佳实践

问题描述

注册了一个rabbitmq消息的异步消费者。没有得到官方建议如何处理异步消费者操作中的流程异常?
可能需要重试队列消息/将消息重新发布到具有重试次数限制的队列。

标签: rabbitmq

解决方案


从 rabbitMq 中的队列消费时,您可以设置一个名为 noAck 的选项,该选项可以为真或假。

  • true如果发生无法处理的错误,它将确认消息
  • false将自动对消息进行 nack 并留在队列中以供稍后拉取。

(这将取决于您为消费者使用的语言。noAck = nodejs、autoAck = c# 等)

consumer.consume(q.queue, function (message) {
    // your code
}, {noAck: false});

关于设置有限重试,我必须自己通过在我正在传递的消息的标题中传递重试计数来执行此操作,并且必须在将带有修改后的标题的新版本发送回队列之前确认我正在阅读的消息。我使用多个队列来维护消息完整性,但这可以通过一个队列来完成。

我希望这有帮助。


推荐阅读