16

我可能会误解这是如何工作的(这就是我要问的原因),但我认为当芹菜工人从 RabbitMQ 消费一项任务时,它会锁定它——可以这么说——然后必须承认它完成了该任务一旦完成。所以说我有 4 个工作人员,它们的预取设置都为 1,并且需要很长时间才能排队 6 个任务。一旦我启动这些工人并运行:

rabbitmqctl -q list_queues name messages messages_ready messages_unacknowledged

我希望看到类似的东西:

celery  6       2       4

表示有 4 个任务正在运行(但尚未确认),其中 2 个已准备好使用。

我认为我的理解是错误的,因为我实际看到的是:

celery  2       0       2

因此,就好像在工作人员收到消息时发生确认,但在该工作人员完成处理该任务之前。

总而言之,我的问题是,芹菜工人什么时候承认自己有任务?似乎它是在收到该任务并开始处理它时,而不是在它完成处理时。有人可以确认吗?

4

1 回答 1

22

常见问题解答中提到了这一点,但我不能怪你没有找到它: http ://docs.celeryproject.org/en/latest/faq.html#should-i-use-retry-or-acks-late

early ack 的默认行为是存在的,因为我们不想强制用户编写幂等任务。

于 2012-09-26T10:39:24.937 回答