Celery 和 RabbitMQ 的先决条件失败

问题描述 投票:0回答:1

我在

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
时间(就像被视为解决方案herehere),但冻结仍然发生在我的程序的第一个循环之前。芹菜似乎只在队列中第一次收到任务,然后就冻结了。如果我在停止后重新启动队列,它会再次接收到正在等待 RabbitMQ 的任务:

celery -A tasks worker --loglevel=info -E -Q queue_getelements -c 4

有没有人以前遇到过这个问题?任何帮助将不胜感激,提前谢谢你!

python docker rabbitmq celery
1个回答
0
投票

我遇到了同样的问题。请将 rabbitmq 的版本降级到 3.8.14 来解决这个问题。干杯。

Rabbitmq-celery-超时解决方案

© www.soinside.com 2019 - 2024. All rights reserved.