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