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

Bia*_*cki 12 rabbitmq celery

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

rabbitmqctl -q list_queues name messages messages_ready messages_unacknowledged
Run Code Online (Sandbox Code Playgroud)

我希望看到类似的东西:

celery  6       2       4
Run Code Online (Sandbox Code Playgroud)

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

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

celery  2       0       2
Run Code Online (Sandbox Code Playgroud)

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

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

ask*_*sol 15

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

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

  • 太棒了,正是我想要的.感谢芹菜顺便说一下,它太棒了. (2认同)