我在
Celery:5.2.7
和 RabbitMQ:3.11
之间遇到问题(通过 Docker
)。我的程序定期向 Celery 发送任务,如下所示:
from tasks import getElements
def collectElements(elements):
for el in elements:
getElements.apply_async(queue="queue_getelements",kwargs={"elDict": el.__dict__})
collectElements(elements)
time.sleep(600)
while(True):
collectElements(elements)
time.sleep(120)
奇怪的是,队列
queue_getelements
在第一次启动collectElements(elements)
(5分/600秒后)后冻结,30分钟后出现消息(这是默认的consumer_timeout
时间):
[2022-10-05 02:45:32,706: CRITICAL/MainProcess] Unrecoverable error: PreconditionFailed(406, 'PRECONDITION_FAILED - delivery acknowledgement on channel 1 timed out. Timeout value used: 1800000 ms. This timeout value can be configured, see consumers doc guide to learn more', (0, 0), '')
我试图通过增加计时器来更改配置中的默认
consumer_timeout
时间(就像被视为解决方案here和here),但冻结仍然发生在我的程序的第一个循环之前。芹菜似乎只在队列中第一次收到任务,然后就冻结了。如果我在停止后重新启动队列,它会再次接收到正在等待 RabbitMQ 的任务:
celery -A tasks worker --loglevel=info -E -Q queue_getelements -c 4
有没有人以前遇到过这个问题?任何帮助将不胜感激,提前谢谢你!
我遇到了同样的问题。请将 rabbitmq 的版本降级到 3.8.14 来解决这个问题。干杯。