Celery和RabbitMQ的PreconditionFailed

kt06eoxx  于 2023-04-20  发布在  RabbitMQ
关注(0)|答案(1)|浏览(295)

我在Celery:5.2.7RabbitMQ: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),但冻结仍然发生在我的程序的第一次循环之前。Celery似乎只在队列中第一次接收任务,之后冻结。如果我在停止队列后重新启动队列,它再次接收RabbitMQ上等待的任务:
celery -A tasks worker --loglevel=info -E -Q queue_getelements -c 4
以前有人遇到过这个问题吗?任何帮助都将不胜感激,提前感谢!

vx6bjr1n

vx6bjr1n1#

我也遇到过同样的问题。请将rabbitmq的版本降级到3.8.14来解决这个问题。干杯。
Rabbitmq-celery-Timeout-Solutions

相关问题