什么时候芹菜工人向RabbitMQ承认它有任务?

时间:2012-09-26 04:58:18

标签: rabbitmq celery

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

rabbitmqctl -q list_queues name messages messages_ready messages_unacknowledged

我希望看到类似的内容:

celery  6       2       4

表示4个任务正在运行(但尚未确认),2个已准备就绪。

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

celery  2       0       2

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

总而言之,我的问题是,芹菜工人什么时候承认它有任务?似乎它曾经接收过该任务并开始研究它,而不是当它完成工作时在上面。有人可以证实吗?

1 个答案:

答案 0 :(得分:15)

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

早期确认的默认行为是因为我们不想强制执行用户 写出幂等的任务。