我们有一个应用程序,它以两种方式使用 Celery 实例:实例的 .task
属性用作我们的任务装饰器,当我们调用 celery worker
s 时,我们将实例作为 -A (--app) 参数传递。此工作流对生产和消费使用相同的 Celery 实例,并且它已奏效,但我们对生产者(任务)和使用者(芹菜工作人员)使用相同的 Celery 实例。
现在,我们正在考虑使用Bigwig RabbitMQ,这是一个AMQP服务提供商,他们发布了两个不同的URL,一个针对消息生产者进行了优化,另一个针对消息消费者进行了优化。
我们修改设置以利用单独的代理端点的最佳方式是什么?我假设单个 Celery 实例只能使用单个代理 URL(通过 BROKER_URL 设置)。除了BROKER_URL设置之外,我们是否应该使用配置相同的两个不同的 Celery 实例?
将在 Celery 4.0 中提供: http://docs.celeryproject.org/en/master/whatsnew-4.0.html#configure-broker-url-for-read-write-separately
是的,您是对的,一个芹菜实例只能使用一个代理 URL。正如你所说,唯一的方法是使用 2 个工人,只有不同的BROKER_URL一个用于消费,一个用于生产。
从技术上讲是微不足道的,你可以利用这一点(http://celery.readthedocs.org/en/latest/reference/celery.html#celery.Celery.config_from_object),但当然你会有两个工人在运行,但我认为这不会带来任何问题。
这里还解释了另一种选择,但我会避免它。