10

我想在同一台机器上运行两个芹菜实例。一个用于我的应用程序的“A”版本,另一个用于“B”版本。

我有两个实例,我是这样开始的:

(env1)/home/me/firstapp$ celery -A app.tasks worker --config celeryconfig
(env2)/home/me/secondapp$ celery -A app.tasks worker -n Carrot --config celeryconfig

在每个应用程序的 tasks.py 中,我创建了一个像这样的 celery 实例:

 celery = Celery('tasks', backend='amqp', broker='amqp://guest@127.0.0..1.5672//')
 @celery.task
 def run_a_task():
     do_stuff()

在 env2 的 task.py 中,如何指定我想使用 secondapp 中的第二个 celery 实例(名为 Carrot),而不是 firstapp 中的第一个?我怀疑我需要在第一行的 celery 的构造函数中更改某些内容,但我不知道要添加什么。

4

2 回答 2

18

我通过使用 celery 的虚拟主机解决了这个问题。

一旦 rabbitmq 服务器运行,我会发出以下命令:

rabbitmqctl add_user user password
rabbitmqctl add_vhost app2
rabbitmqctl set_permissions -p app2 user ".*" ".*" ".*"

然后我开始芹菜:

celery -A tasks worker --broker=amqp://user:password@localhost/app2

通过我的任务,我像这样初始化 celery 对象:

celery = Celery('tasks', backend='amqp', broker='amqp://user:password@localhost:5672/app2
于 2013-04-29T18:16:40.340 回答
7

看起来您正在使用 AMQP,所以我建议您使用不同的交易所来解决这个问题。

我建议阅读有关 AMQP 结构的博文:http: //blogs.digitar.com/jjww/ ?s=rabbits&x=0&y=0

有关 Celery 的特定信息,请查看此处:http ://docs.celeryproject.org/en/latest/userguide/routing.html

您可以做的一个简短版本是为应用程序提供不同的默认队列:

from kombu import Exchange, Queue

CELERY_DEFAULT_QUEUE = 'app1'
CELERY_QUEUES = (
    Queue('app1', Exchange('app1'), routing_key='app1'),
)
于 2013-04-24T21:06:46.960 回答