我在检查celery 代码。一旦任务函数通过(task_trace)运行,就会调用Acks_late。然而,在Redis中,一旦收到一个任务(即从Redis队列中弹出),RedisWorkerController就会为其创建一个任务请求。在工作节点死亡的情况下,它如何再次排队?
7ajki6be1#
如果消息没有被确认,它们就不会再次排队(如果工人死亡,这将是不可能的。它们在Redis中确实存在,但未被承认)。根据celery文档,Redis代理有一个可见性超时机制。因此,如果消息在可见性超时内没有得到确认,我们应该能够期望消息再次被传递给worker。结果就是这样。如果在acks_late任务的处理过程中断电,则在可见性超时之后,该任务将再次由在线工作线程接收。
1条答案
按热度按时间7ajki6be1#
如果消息没有被确认,它们就不会再次排队(如果工人死亡,这将是不可能的。它们在Redis中确实存在,但未被承认)。
根据celery文档,Redis代理有一个可见性超时机制。
因此,如果消息在可见性超时内没有得到确认,我们应该能够期望消息再次被传递给worker。结果就是这样。如果在acks_late任务的处理过程中断电,则在可见性超时之后,该任务将再次由在线工作线程接收。