在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是否知道其他小组是否能够解释这个问题。我不会认为他们会显示任何明显可以解释所有这些消息的内容。
我想至少了解额外消息是什么,然后是否可以消除部分或全部消息。
答案 0 :(得分:2)
我前几天遇到了同样的错误。 对于那些遇到相同问题的人,CloudAMQP的 doc建议您在启动芹菜时添加一些参数:
--without-gossip --without-mingle --without-heartbeat
"这将大大降低邮件费率。没有这些 标志Celery每秒会发送数百封不同的消息 诊断和冗余心跳消息。"
事实上,到目前为止,解决了这个问题!而且你最终只会收到你的消息。