gpt4 book ai didi

python - RabbitMQ 排队的消息不断增加

转载 作者:太空狗 更新时间:2023-10-30 03:00:08 24 4
gpt4 key购买 nike

我们有一个基于 Windows 的 Celery/RabbitMQ 服务器,可以在进程外为我们的 Web 应用程序执行长时间运行的 Python 任务。
例如,它的作用是获取一个 CSV 文件并处理每一行。对于每一行,它都会在我们的数据库中登记一条或多条记录。

这似乎工作正常,我可以看到工作进程正在预订的记录。但是,当我使用管理插件(基于 Web 的管理工具)检查 rabbitMQ 服务器时,我看到排队的消息在增加,并且没有恢复。 Queued messages chart

在连接下,我看到 116 个连接,每个虚拟主机大约 10-15 个,所有连接都在“运行”,但是当我点击通过时,它们中的大多数都处于“空闲”状态。我也想知道为什么这些连接仍然打开,如果我需要更改某些内容以使它们自行关闭: enter image description here

在“队列”下,我可以看到超过 6200 个状态为“空闲”的项目,并且没有减少。

所以具体来说,我想问的是这些是否是正常的统计数据,或者我是否应该担心队列增加但不会回落以及似乎没有关闭的持久连接......

除了管理工具中相当简洁的帮​​助外,我似乎找不到任何关于这些统计数据的含义以及它们是好是坏的信息。

我还想知道为什么消息在队列中仍然可见,以及为什么它们没有被删除,因为任务似乎没有很好地完成。

感谢任何帮助。

最佳答案

回答我自己的问题;

Celery 为调用代码中的每个任务发回一条结果消息。此消息通过相同的 AMPQ 队列发回。这就是为什么任务正在运行,但队列不断填​​满的原因。我们没有处理这些结果,甚至对它们不感兴趣。

我将 ignore_result=True 添加到 celery 任务中,因此该任务不会将结果消息发送回队列。这是问题的主要解决方案。

此外,还添加了配置选项 CELERY_SEND_EVENTS=False 以加速 celery。如果设置为 TRUE,此选项会让 Celery 为外部监控工具发送事件。

除此之外,CELERY_TASK_RESULT_EXPIRES=3600 现在确保即使结果被发回,如果没有被拾取/确认,它们也会在一小时后过期。

最后 CELERY_RESULT_PERSISTENT 被设置为 False,这将配置 celery 不将这些结果消息存储在磁盘上。当服务器崩溃时它们会消失,这对我们来说很好,因为我们不使用它们。

简而言之;如果您的应用程序不需要有关任务是否完成以及何时完成的反馈,请在 celery 任务上使用 ignore_result=True,这样就不会发回任何消息。如果您确实需要该信息,请确保您选择并处理结果,以便队列停止填满。

关于python - RabbitMQ 排队的消息不断增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30327670/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com