芹菜工人什么时候向RabbitMQ确认自己有任务



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

rabbitmqctl -q list_queues name messages messages_ready messages_unacknowledged

我希望看到这样的东西:

celery  6       2       4

指示4个任务正在运行(但尚未被确认),并且2个任务准备被消耗。

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

celery  2       0       2

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

综上所述,我的问题是,芹菜工人什么时候承认自己有任务它似乎是在收到任务并开始处理时,而不是在完成任务时。有人能确认吗?

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

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

最新更新