我在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),但冻结仍然发生在我的程序的第一次循环之前。Celery似乎只在队列中第一次接收任务,之后冻结。如果我在停止队列后重新启动队列,它再次接收RabbitMQ上等待的任务:
celery -A tasks worker --loglevel=info -E -Q queue_getelements -c 4
以前有人遇到过这个问题吗?任何帮助都将不胜感激,提前感谢!
1条答案
按热度按时间vx6bjr1n1#
我也遇到过同样的问题。请将rabbitmq的版本降级到3.8.14来解决这个问题。干杯。
Rabbitmq-celery-Timeout-Solutions