2014-03-28 36 views
0

我正在使用python的rabbitmq权限。该应用程序有多个客户端和一个服务提供者。我想限制客户端到特定的队列,而服务提供者应该能够读取所有队列而不写入任何队列。我尝试设置权限如下:Rabbitmq权限

对于服务提供商的帐户,我设置了以下

rabbitmqctl set_permissions -p vhost service_provider ".*-client-queues" "" ".*-client-queues" 

对于客户我做

rabbitmqctl set_permissions -p vhost client1 "client1-client-queues" "client1-client-queues" "" 

而且邮件永远不会传递给服务提供商。但是,如果我设置

rabbitmqctl set_permissions -p vhost client1 ".*" ".*" ".*" 

它的工作原理。但我需要限制客户端到特定的队列。 你们有没有人试图实现这样的事情?任何提示将不胜感激。谢谢。

回答

0

我缺少什么是交换名字,而我设置的权限。我已经解决了我的问题有以下权限:(我使用的是默认的Exchange)

对于客户:

rabbitmqctl set_permissions -p vhost client1 "client1-client-queues|amq\.default" "client1-client-queues|amq\.default" "amq\.default" 

对于服务提供商:

set_permissions -p vhost service_provider ".*-client-queues|amq\.default" "amq\.default" ".*-client-queues|amq\.default" 
2

service_providerclient1必须是用户,相应的部件使用,而不是默认(guest)连接到所述的RabbitMQ代理。

您需要创建用户并与rabbitmqctl add_user ...设置自己的密码,然后让各个组件中使用它们。

另请注意,用于发布消息的交换必须与您指定的写入权限相匹配。详情请参阅here

我建议你一个接一个添加的权限,所以你看快你在做什么错。

+0

感谢您的回答。用户和队列已经创建好了,我正在使用默认交换。我缺少的是设置权限时的交换名称。一旦我在设置权限时添加默认交换,它就会按照我想要的方式工作。这不是我正在寻找的答案,但你确实帮助我找出答案。再次感谢! – kyiphyu