4

我在 Heroku 上运行的 Django 站点正在使用 CloudAMQP 来处理其计划的 Celery 任务。CloudAMQP 注册的消息比我的任务多得多,我不明白为什么。

例如,在过去的几个小时中,我将运行大约 150 个计划任务(两个每分钟运行一次,另一个每五分钟运行一次),但是 CloudAMQP 控制台的消息计数增加了大约 1,300 个。

我的相关 Django 设置:

BROKER_URL = os.environ.get("CLOUDAMQP_URL", "")
BROKER_POOL_LIMIT = 1
BROKER_HEARTBEAT = None
BROKER_CONNECTION_TIMEOUT = 30
CELERY_ACCEPT_CONTENT = ['json',]
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_RESULT_EXPIRES = 7 * 86400
CELERY_SEND_EVENTS = False
CELERY_EVENT_QUEUE_EXPIRES = 60
CELERY_RESULT_BACKEND = None
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'

我的档案:

web: gunicorn myproject.wsgi --log-file -
main_worker: python manage.py celery worker --beat --without-gossip --without-mingle --without-heartbeat --loglevel=info

查看 Heroku 日志,我只看到了我所期望的正在运行的计划任务的数量。

RabbitMQ 概览图在大多数情况下往往看起来像这样:

RabbitMQ 概述

我对 RabbitMQ 的了解还不够,无法知道其他面板是否能解决这个问题。我认为它们没有显示出任何可以解释所有这些信息的明显信息。

我想至少了解额外的消息是什么,然后是否有办法可以消除部分或全部。

4

1 回答 1

5

几天前我遇到了同样的错误。对于遇到同样问题的人,CloudAMQP 的文档建议您在启动 celery 时添加一些参数:

--without-gossip --without-mingle --without-heartbeat

“这将大大降低消息速率。没有这些标志,Celery 将每秒发送数百条消息,其中包含不同的诊断和冗余心跳消息。”

事实上,这解决了到目前为止的问题!你最终只收到了你的消息。

于 2017-06-26T12:57:58.063 回答