13

是否可以对使用 celery 的多个项目使用相同的 redis 数据库?就像使用一个键前缀为多个项目使用同一个数据库作为缓存一样。还是我必须为每次安装使用单独的数据库?

4

2 回答 2

20

总结这篇有用的博客文章: http: //kfalck.net/2013/02/21/run-multiple-celeries-on-a-single-redis

  • 为每个项目指定不同的数据库编号,例如 redis://localhost/0 和 redis://localhost/1
  • 为不同的项目定义和使用不同的队列名称。在任务端,定义 CELERY_DEFAULT_QUEUE,并在启动你的 worker 时,使用 -Q 参数指定该队列。在此处阅读有关路由的更多信息:http: //docs.celeryproject.org/en/latest/userguide/routing.html
于 2013-04-08T08:12:43.237 回答
2

我为 celery 使用了 redis 后端,同时还使用了带有前缀缓存数据的相同 redis db。我在开发过程中这样做了,我只将 redis 用于结果后端而不是对任务进行排队,并且生产部署最终都是 AMQP(redis 仅用于缓存)。我没有任何问题,也不明白为什么会这样(除了性能问题)。

对于运行具有不同任务定义的多个 celery 项目,我认为问题在于如果您有两种不同类型的工人,每种工人只能处理工作类型的子集。如果没有单独的数据库,我不确定工人们将如何判断他们可以处理哪些工作。

我可能希望确保所有工作人员都定义了所有任务类型并且可以处理任何事情,或者希望将单独的项目保存在单独的数据库中。这不需要安装任何额外的东西,您只需在您的芹菜项目之一中指定 REDIS_DB=1 。可能有另一种方法可以做到这一点。我不确定是否需要多个数据库,但这有点道理。

如果您仅将 redis 用于结果后端,也许这适用于在一个 redis db 上拥有多个 celery 项目......我不太确定。

于 2012-08-23T10:50:29.740 回答