Итак, у меня есть два рабочих сервера (celeryd), которые используют два виртуальных хоста на одном сервере rabbitmq. Я передаю переменную в свой файл messagecenter.py, чтобы указать, какой URL-адрес брокера следует использовать для публикации задачи. После отладки некоторое время я обнаружил, что как только сельдерей устанавливает соединение с URL-адресом брокера, он не отключается от предыдущего виртуального хоста и не подключается к новому. Я точно не знаю, как обмены и привязки работают в сельдерее. Так что любая помощь высоко ценится.
messagecenter.py/
from celery import Celery
MESSAGE_SETTINGS = {
"WORKER1": "amqp://user1:pass1@server-name:5672/vhost1",
"WORKER2": "amqp://user2:pass2@server-name:5672/vhost2"
}
class MessageCenter(object):
def __init__(self, config):
self._config = config
self._celery = Celery()
def produce_task(self, name, uuid, params):
self._celery.conf.update(
BROKER_URL = self._config[name])
self._celery.send_task(uuid, params)
И я передаю либо «WORKER1», либо «WORKER2» вместе с необходимыми параметрами для публикации задачи, то есть send_task. Я надеюсь, что есть способ правильно направить мою задачу на разные серверы. Любая помощь будет высоко оценена.