【问题标题】:RabbitMQ best practice to handle exceptions when process a message asynchronously异步处理消息时处理异常的 RabbitMQ 最佳实践
【发布时间】:2018-11-14 15:11:01
【问题描述】:

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

【问题讨论】:

    标签: rabbitmq


    【解决方案1】:

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

    • true 如果发生无法处理的错误,它将确认消息
    • false 会自动回复消息并停留在 队列稍后被拉。

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

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

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

    我希望这会有所帮助。

    【讨论】:

      最近更新 更多