我有一个用例,我希望能够让许多客户连接到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)
当我更改任何常规CELERY
或BROKER
设置时,它也将适用于这些新连接 - 是的!