为什么我在Heroku上使用CloudAMQP拥有这么多Celery消息?

时间:2016-09-20 14:17:33

标签: django heroku rabbitmq celery cloudamqp

在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'

我的Procfile:

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 overview

我不明白RabbitMQ是否知道其他小组是否能够解释这个问题。我不会认为他们会显示任何明显可以解释所有这些消息的内容。

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

1 个答案:

答案 0 :(得分:2)

我前几天遇到了同样的错误。 对于那些遇到相同问题的人,CloudAMQP的 doc建议您在启动芹菜时添加一些参数

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

"这将大大降低邮件费率。没有这些   标志Celery每秒会发送数百封不同的消息   诊断和冗余心跳消息。"

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