使用芹菜,将async_apply发送到特定的VHOST



我有一个用例,我希望能够让许多客户连接到RabbitMQ,但他们看不到彼此的消息。我相信使用VHOST是保持工人之间隐私的最佳方法?

我认为我能够将virtual_host参数传递给apply_async,但这是行不通的,我相信我必须建立这样的自定义连接:

from kombu import Connection
my_connection = Connection(virtual_host='new_virtual_host')
task.apply_async(connection=my_connection)

但是,我敢打赌,使用我已经配置的设置并通过适当的频道在芹菜内进行内置的方式,以防我切换后端。什么是内部"获得连接"功能?

这是使用芹菜3.1

编辑:

当前尝试,不起作用,它似乎只是使用指定的虚拟主机返回常规连接 ...

from celery.app import app_or_default
app = app_or_default()
with app.broker_connection(virtual_host='other') as new_connection:
    task.apply_async((data,), connection=new_connection)

如果我检查 new_connection virtual_host kwarg被忽略了..嗯...

a ha!因此,事实证明芹菜接受broker_url,然后忽略virtual_host,因为设置了broker_url。这样做似乎很好,可以手动设置我们想要的属性:

from celery.app import app_or_default
app = app_or_default()
with app.connection() as new_connection:
    # setting here instead of kwargs above
    new_connection.virtual_host = 'other' 
    task.apply_async((data,), connection=new_connection)

当我更改任何常规CELERYBROKER设置时,它也将适用于这些新连接 - 是的!

相关内容

  • 没有找到相关文章

最新更新