RabbitMQ 队列发布访问被拒绝

RabbitMQ queue publish access refused

为用户设置仅向特定队列发布的权限 Q1

权限

配置:“”

写入:^(Q1)|(amqp.default)$

阅读:“”

使用的协议:STOMP

RMQ 版本:3.6.X

使用上述权限发布到 Q1 时访问被拒绝。

如果 Configure 设置为 ^(Q1)$ 它可以正常工作。但是设置配置权限也将允许用户对 Q1.

进行 queue.delete 和 queue.declare 操作

案例:从 backend/RMQ 管理创建一个队列,以便 stomp 客户端可以通过直接 amqp.default 交换和路由键作为队列名称发布到它。这样客户端只有对队列的写入权限,没有配置或读取权限

如果用户只需要发布到队列而不需要读取或配置队列,那么最好的解决方案是什么?

首先,请记住您发布到 RabbitMQ 中的 exchanges,而不是队列。然后,阅读 this table 以确定如何将配置、写入和读取权限应用于您要执行的操作。

最后,由于使用了STOMP插件,用户必须有configure权限才能创建回复队列。这是由于 STOMP 在 RabbitMQ 中的实现方式 (code)。


注意: RabbitMQ 团队监控 the rabbitmq-users mailing list 并且有时仅在 Whosebug 上回答问题。

STOMP协议需要配置权限,所以不得不想出一个不同的方法。(RabbitMQ code)

创建了一个交换 E1 并授予用户 写入 权限

将队列 Q1 绑定到 E1 因此发布到 E1 的每条消息都会路由到 Q1

在这种方法中,STOMP 客户端只需要写入权限即可发布到交换 E1 而无需读取或配置权限