【问题标题】:Celery worker stops consuming from a specific queue while it consumes from other queuesCelery worker 在从其他队列消费时停止从特定队列消费
【发布时间】: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


【解决方案1】:

我在我的代码中发现了问题,

因此,在我的一项任务中,我打开了一个连接以使用挂起的 urllib3 进行解析。

在异步任务中移出该部分后,现在一切正常。

【讨论】:

  • 为什么会挂起?我面临着类似的问题
  • 对我来说,问题是最终所有工作人员都因外部呼叫挂起而被阻止。检查任何可能永远阻止工人的东西。我建议放置足够的日志以获取未执行的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-19
  • 1970-01-01
  • 2011-02-05
相关资源
最近更新 更多