我正在尝试使用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提供的“广播”功能。
下面是一些屏幕快照,可以帮助您理解问题:
我还需要对芹菜广播的工作原理有所了解。 另外,我没有使用广播功能,而是尝试创建扇出交换,但是在将队列绑定到该交换并发布消息方面遇到了困难。任何帮助或示例说明都将对我有用。
预先感谢