【发布时间】:2015-07-31 09:38:45
【问题描述】:
我们有一个基于 Windows 的 Celery/RabbitMQ 服务器,它为我们的 Web 应用程序在进程外执行长时间运行的 python 任务。
例如,它的作用是获取一个 CSV 文件并处理每一行。对于每一行,它都会在我们的数据库中预订一条或多条记录。
这似乎工作正常,我可以看到工作进程正在预订的记录。但是,当我使用管理插件(基于 Web 的管理工具)检查 rabbitMQ 服务器时,我看到排队的消息在增加,并且没有回来。
在连接下,我看到 116 个连接,每个虚拟主机大约 10-15 个,全部“运行”,但是当我单击时,它们中的大多数都将“空闲”作为状态。 我也想知道为什么这些连接仍然打开,如果有什么我需要改变以使它们自己关闭:
在“队列”下,我可以看到超过 6200 个状态为“空闲”的项目,并且没有减少。
所以具体来说,我在问这些是否是正常的统计数据,或者我是否应该担心队列增加但不会恢复,以及似乎没有关闭的持久连接......
除了管理工具中相当简洁的帮助外,我似乎找不到任何关于这些统计数据的含义以及它们是好还是坏的信息。
我还想知道为什么消息在队列中仍然可见,以及为什么它们没有被删除,因为任务似乎没有很好地完成。
感谢任何帮助。
【问题讨论】:
-
您是否发送回 Ack 以确认消息已被处理?虽然连接可能会保留,但我希望排队的消息会下降。
-
嗨@DavinTryon,任务由Celery处理,这使我们可以简单地用@@celery.task装饰一个Python函数,我不知道celery如何在内部处理确认。但是,当我运行 rabbitmqctl list_consumers 时,我得到了一个消费者,它的确认所需的布尔值设置为 False。
-
@DavinTryon;似乎 Celery 的默认设置是在工人拿起任务后立即确认:celery.readthedocs.org/en/latest/userguide/tasks.html