RabbitMQ 重新传递被拒绝的重新排队消息的退避?
RabbitMQ redelivery backoff of rejected requeued messages?
我有一个简单的服务,可以订阅来自 RabbitMQ 的消息并将它们写入数据存储区。有时,此数据存储会在短时间内(有时是几秒钟,有时是几分钟)不可用。如果发生这种情况,我们会对失败的消息执行 basic.reject
,并将 requeue
设置为 true
。虽然这有效,但消息似乎会立即重新传递。我希望 RabbitMQ 优雅地取消重新交付。例如,首先尝试重新传送 "immediately",然后在 2、3、5、8、13 秒等之后。这可能吗?如果可能的话如何?
除了 Louis F. 作为评论发布的内容,请查看延迟消息交换插件 https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/
您可以使用延迟消息交换类型设置一个 dead-letter 交换,并且可以非常轻松地完成此操作,而无需进行大量配置并使用那样的 TTL。
我有一个简单的服务,可以订阅来自 RabbitMQ 的消息并将它们写入数据存储区。有时,此数据存储会在短时间内(有时是几秒钟,有时是几分钟)不可用。如果发生这种情况,我们会对失败的消息执行 basic.reject
,并将 requeue
设置为 true
。虽然这有效,但消息似乎会立即重新传递。我希望 RabbitMQ 优雅地取消重新交付。例如,首先尝试重新传送 "immediately",然后在 2、3、5、8、13 秒等之后。这可能吗?如果可能的话如何?
除了 Louis F. 作为评论发布的内容,请查看延迟消息交换插件 https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/
您可以使用延迟消息交换类型设置一个 dead-letter 交换,并且可以非常轻松地完成此操作,而无需进行大量配置并使用那样的 TTL。