【问题标题】:Rabbitmq permissionsRabbitMQ 权限
【发布时间】:2026-01-11 00:10:02
【问题描述】:

我正在使用 python 处理 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 ".*" ".*" ".*"

它有效。但是我需要将客户端限制在特定的队列中。 你们中的任何人都试图实现这样的目标吗?任何提示将不胜感激。谢谢。

【问题讨论】:

    标签: rabbitmq pika


    【解决方案1】:

    service_providerclient1 必须是各个组件使用的用户,而不是默认用户 (guest) 才能连接到 RabbitMQ 代理。

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

    另请注意,您用于向其发布消息的 exchanges 必须与您指定的写入权限匹配。详情请见here

    我建议你一个一个添加权限,这样你就可以快速看到你做错了什么。

    【讨论】:

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

    我在设置权限时缺少交换名称。我已经通过以下权限解决了我的问题:(我正在使用默认交换)

    对于客户:

    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"
    

    【讨论】: