确认芹菜发布的正确方法是什么?

What is the correct way to confirm a publish in celery?

我正在考虑调整我的 celery/rabbitmq 安装,我找到了这篇文章:

http://www.lshift.net/blog/2015/04/30/making-celery-play-nice-with-rabbitmq-and-bigwig/

它提到如果您想保证消息传递(我这样做),请执行设置 BROKER_TRANSPORT_OPTIONS = {'confirm_publish': True}。我在为 rabbitmq 或 celery 找到有关此设置的任何文档时遇到问题。

使用 rabbitmq 在 celery 中确认发布的正确方法是什么?所述功能的文档在哪里?

confirm_publish 选项被 py-amqphttps://github.com/celery/py-amqp 使用 它强制发布阻止连接,直到收到来自 RabbitMQ 的确认。 此处描述了 RabbitMQ 确认:https://www.rabbitmq.com/confirms.html

所以回答我自己的问题:目前没有文档。

也就是说,我挖了大半个上午的源代码,在这里找到了答案:

https://github.com/celery/py-amqp/blob/24df1032db4a566e165f736ccb6b4a15cc94bcaa/amqp/channel.py#L1770-L1776

py-amqp 是 celery 最终使用的库(通过 kombu——伙计们,这里有两个包!)。 py-amqp 读取该设置并在设置 confirm_publish 选项时等待。这有效地使排队过程同步。