首页 > 解决方案 > 在 RabbitMQ 队列中缺少从 Celery 发送的消息

问题描述

我有一个脚本send_task在名为vv. 使用rabbitmqadmin list queues命令,我注意到队列中只有 2870 条消息,没有任何工作人员连接到vv队列。

你自己有没有经历过这种行为?它只是一个显示错误rabbitmqadmin吗?

提前感谢您的帮助,如果您需要有关脚本的更多详细信息,我将完成我的问题!

编辑:脚本看起来像这样,包含大量文档并由celery-beat

from celery import Celery

app = Celery()
app.config_from_object('celeryconfig')

@app.task
def document_monitoring(index, query, kind):
    # generate random messages
    documents = [{'_id': str(i)} for i in range(10000)]

    for document in documents:
        app.send_task(
                "vv_consumer", 
                kwargs=document,
                queue='vv'
        )

    return 0

标签: pythonrabbitmqcelery

解决方案


在深入研究我的 RabbitMQ 实例的日志后,我发现我达到了由变量定义的内存警报vm_memory_high_watermark的限制。默认值设置为 0.4,这意味着一旦使用了 40% 的实例 RAM,RabbitMQ 就会阻止发布者(如示例中的脚本)并停止接收新消息。由于这种行为,我错过了最初发送到队列的几条消息。

为了解决这个问题,我的解决方案是:

  • 硬件方面:增加我的实例的 RAM
  • 软件方面:将vm_memory_high_watermark值增加到 0.7(按照文档

推荐阅读