Запуск нескольких экземпляров сельдерея на одном сервере

Я хочу запустить два экземпляра сельдерея на одной машине. Один для версии " 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

In tasks.py в каждом приложении я создаю экземпляр сельдерея следующим образом:

 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(с именем морковь), а не первый из firstapp? Я подозреваю, что мне нужно что-то изменить в конструкторе для сельдерея на первой строке, но я не знаю, что добавить.

2 ответов


я решил это, используя виртуальный хост для сельдерея.

после запуска сервера 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('tasks', backend='amqp', broker='amqp://user:password@localhost:5672/app2

похоже, вы используете AMQP, поэтому я бы рекомендовал решить эту проблему с помощью разных обменов.

Я рекомендую прочитать этот блог о структуре AMQP:http://blogs.digitar.com/jjww/?s=rabbits&x=0&y=0

для сельдерея конкретной информации, посмотрите здесь: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'),
)