【发布时间】:2015-08-06 19:12:56
【问题描述】:
我使用 rabbitmq 作为代理,只有在我的生产环境中才会发生奇怪的行为。有时我的 celery 会随机停止使用队列中的消息,而会使用其他队列中的消息。
这会导致队列中的消息堆积,如果我重新启动 celeryd,一切都会开始正常工作。
"/var/logs/celeryd/worker" 不表示任何错误。我什至不确定从哪里开始寻找,因为我是 python/django 的新手。
任何帮助将不胜感激。
【问题讨论】:
-
/var/log/rabbitmq 中有什么注意事项?也许尝试调高芹菜的日志记录详细程度。也许数据库窒息了,您的任务是否正在写入数据库?我们可以从 settings.py 中看到一些与您的配置和/或您用于处理队列的代码相关的行吗?
-
你的芹菜中各种队列的优先级是什么?它是否会恢复您抱怨的队列?
-
@chris : rabbitmq 日志正常 ::
-
数据库工作正常,因为来自不同队列的其他任务被提取并写入同一个数据库。
class OrderInfoConsumerStep(ConsumerStep):<br/> queue = Queue(settings.QUEUES)<br/> def get_consumers(self, channel):<br/> return [Consumer(channel, queues=[self.queue, ],<br/> callbacks=[self.handle_message, ], accept=['json', ])]<br/> def handle_message(self, body, message):<br/> data = json.loads(body)//storeData<br/> message.ack()<br/> celery_app.steps['consumer'].add(OrderInfoConsumerStep)<br/> -
@Rajesh :一旦我重新启动芹菜,它就会恢复。我们一个小时没有重新启动一次,它也没有从队列中消耗一个小时。此外,所有队列的优先级都是相同的,队列没有偏好,但是没有卡住的另一个队列发布的消息比被阻塞的队列多。
标签: python django rabbitmq celery