我在工作很长一段时间后正在使用芹菜与烧瓶使用,我的芹菜显示出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数据库进行结果也很好。