Невозможно передать сообщение с помощью сельдерея - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь использовать встроенную поддержку сельдерея для широковещательной маршрутизации, используя Broadcast и используя rabbitmq в качестве брокера.Я смог успешно опубликовать и получить сообщение, используя прямой обмен по умолчанию, а сейчас я пытаюсь использовать разветвленный обмен, предоставляемый rabbitmq.Для этого кажется, что у сельдерея есть встроенная поддержка с использованием класса Broadcast.

Мой конфет сельдерея выглядит так:

app.conf.task_queues = (Broadcast('broadcast_tasks'),)

app.conf.task_routes = {
  'tasks.tasks.sync_channels': {
      'queue': 'broadcast_tasks',
      'exchange': 'broadcast_tasks'
  }
}

И вот как я определил свою задачу в приложении / задачах/tasks.py

@app.task(name='sync_channels')
def sync_channels(data):
   logger.debug('Received here')
   pass

Вот как я отправляю сообщение rabbitmq с помощью сельдерея:

from app.tasks.tasks import sync_channels
sync_channels.delay([])

Когда я открываю пользовательский интерфейс управления rabbitmq, я вижу, что обмен фанатамисоздается с именем "broadcast_tasks", но когда я пытаюсь отправить сообщение в задачу sync_channels, он автоматически создает обмен по умолчанию (прямой) и очередь по умолчанию, привязанную к обмену по умолчанию, и все мои будущие сообщения в задачу sync_channels передаются вобмен по умолчанию.Кажется, почему-то я не могу настроить функцию Broadcast, которую предоставляет сельдерей.

Ниже приведены некоторые скриншоты, которые могут помочь вам понять проблему:

Rabbitmq management page when celery is not connected A new fanout exchange named broadcast_tasks is created when I start up celery worker A queue created by celery that binds to the broadcast_tasks exchange[![A default exchange and queue created when I try to publish some message to sync_channels task

Мне также нужно немного понять, как работает трансляция сельдерея.Кроме того, вместо использования функции широковещания я попытался создать обмен разветвления, но я пытался привязать очередь к этому обмену, а затем опубликовать сообщение.Любая помощь или любой пример того, как это сделать, будет полезен для меня.

Заранее спасибо

...