如何解析芹菜.backends.rpc.backloglimitexceeded错误



我在工作很长一段时间后正在使用芹菜与烧瓶使用,我的芹菜显示出celery.backends.rpc.BacklogLimitExceeded错误。我的配置值下面:

CELERY_BROKER_URL = 'amqp://'
CELERY_TRACK_STARTED = True
CELERY_RESULT_BACKEND = 'rpc'
CELERY_RESULT_PERSISTENT = False

谁能解释为什么出现错误以及如何解决该错误?我已经检查了这里的文档,该文档没有为该问题提供任何解决方案。

可能是因为您的过程消耗结果并没有跟上产生结果的过程?这可能导致大量未经处理的结果构建 - 这是"积压"。当积压的大小超过任意限制时,BacklogLimitExceeded会由芹菜升高。

您可以尝试添加更多的消费者来处理结果?或为result_expires设置设置一个较短的值?

有关此封闭芹菜问题的讨论可能会有所帮助:

似乎数据库后端更适合此目的。 AMQP/RPC结果后端需要每个状态更新发送一条消息,而对于基于数据库的后端(REDIS,SQLA,DJANGO,MONGODB,CACHE等((每个新的状态更新都会覆盖旧的。

根本不建议使用" AMQP"结果后端,因为它会创建一个队列每个任务,这是模仿基于数据库的后端需要多个过程可以检索结果所必需的。

RPC结果后端是RPC风格的调用,只有启动任务的过程才能检索结果。

但是,如果您想要持续的多消费者结果,则应将它们存储在数据库中。

使用RabbitMQ作为经纪人,Redis进行结果是一个很好的组合,但是使用SQL数据库进行结果也很好。

相关内容

  • 没有找到相关文章

最新更新