无法使用芹菜广播消息

时间:2019-05-08 16:10:53

标签: django rabbitmq celery rabbitmq-exchange

我正在尝试使用celery的构建来支持使用Broadcast并使用Rabbitmq作为代理的广播路由。 我已经能够使用默认的直接交换成功发布和接收消息,现在我正尝试使用Rabbitmq提供的扇出交换。为此,芹菜似乎具有使用Broadcast类的内置支持。

我的芹菜conf看起来像这样:

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

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

以下是我在app / 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管理UI时,可以看到创建了名为“ broadcast_tasks”的扇出交换,但是当我尝试将消息推送到sync_channels任务时,它将自动创建一个默认(直接)交换和一个默认队列绑定到默认交换,我以后所有要发送到sync_channels任务的消息都被推送到默认交换。似乎我无法配置celery提供的“广播”功能。

下面是一些屏幕快照,可以帮助您理解问题:

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

我还需要对芹菜广播的工作原理有所了解。 另外,我没有使用广播功能,而是尝试创建扇出交换,但是在将队列绑定到该交换并发布消息方面遇到了困难。任何帮助或示例说明都将对我有用。

预先感谢

0 个答案:

没有答案