Django 芹菜和RabbitMQ超时和连接重置

Django 芹菜和RabbitMQ超时和连接重置,django,rabbitmq,celery,Django,Rabbitmq,Celery,我在Django应用程序的Windows10机器上使用RabbitMQ 3.6.0和芹菜3.1.20。一切都在同一台计算机上运行。我已将芹菜配置为晚确认(Cellery\u ACKS\u Late=True),现在我遇到了连接问题 我启动芹菜工作线程,在处理任务50-60秒后,每个工作线程失败,并显示以下消息: 无法确认,原因:ConnectionResetError(10054,“现有连接被远程主机强制关闭”,无,10054,无) (####是任务的编号) 当我查看RabbitMQ日志时,我看

我在Django应用程序的Windows10机器上使用RabbitMQ 3.6.0和芹菜3.1.20。一切都在同一台计算机上运行。我已将芹菜配置为晚确认(
Cellery\u ACKS\u Late=True
),现在我遇到了连接问题

我启动芹菜工作线程,在处理任务50-60秒后,每个工作线程失败,并显示以下消息:

无法确认,原因:ConnectionResetError(10054,“现有连接被远程主机强制关闭”,无,10054,无)

(####是任务的编号)

当我查看RabbitMQ日志时,我看到:

=信息报告===2016年2月10日::22:16:16=== 接受AMQP连接(127.0.0.1:55372->127.0.0.1:5672)

=信息报告===2016年2月10日::22:16:16=== 接受AMQP连接(127.0.0.1:55373->127.0.0.1:5672)

=错误报告===2016年2月10日::22:17:14=== 关闭AMQP连接(127.0.0.1:55372->127.0.0.1:5672): {写入程序,发送失败,{错误,超时}

错误正好发生在芹菜工人重新设置连接时


我认为这是一个AMQP心跳问题,所以我在芹菜设置中添加了
BROKER\u Heartbeat=15
,但没有任何区别。

我在长时间运行的Windows上遇到了芹菜的类似问题 并发性为1的任务。以下配置最终适用于 我:

我还使用-Ofair选项启动了芹菜工人守护进程:

celery -A test worker -l info -Ofair
在我有限的理解中,CELERYD_PREFETCH_乘数设置了这个数字 位于特定芹菜工作者队列中的消息。通过 默认设置为4。如果将其设置为1,则每个工人仅 使用一条消息并在它使用另一条消息之前完成任务 消息我对长时间运行的任务有问题,因为 连接到RabBMQ一直持续在长期任务的中间,但 如果有任何其他消息/任务正在等待,则重新尝试该任务 在芹菜队列中

以下选项也针对我的情况:

CELERYD_CONCURRENCY = 1
将并发性设置为1对我来说是有意义的,因为我有很长的运行时间
需要大量RAM的任务,因此每个任务都需要单独运行。

@bbaker带芹菜的解决方案(即芹菜4x中的
task\u ACKS\u LATE
)本身对我不起作用。我的员工在Kubernetes吊舱中,必须使用
--pool solo
运行,每个任务需要30-60秒

我通过包含
broker\u heartbeat=0

broker_pool_limit = None
task_acks_late = True
broker_heartbeat = 0
worker_prefetch_multiplier = 1

谢谢你的建议。我真的找不到其他任何东西来解决这个问题。我的ConnectionResetError与@zmbq完全相同。我在Windows上,并且有
solo
的并发池。我正在从Adwords API中提取数据。由于发布了此答案,Windows对芹菜的支持已被取消,因此请恕我直言。在Windows上尝试了此操作,但仍然面临相同的问题。您是否偶然发现了此问题?在我的情况下,我的代理url末尾有一个端口。移除端口解决了此问题。我认为该端口是由芹菜自动处理的,由于代理可能会根据可用性在多个端口上运行,因此硬编码端口并不理想。
broker_pool_limit = None
task_acks_late = True
broker_heartbeat = 0
worker_prefetch_multiplier = 1