参考来源与基础权限:
Authentication, Authorisation, Access Control | RabbitMQ
四大用户tag:management User can access the management plugin
policymaker User can access the management plugin and manage policies and parameters for the vhosts they have access to.
monitoring User can access the management plugin and see all connections and channels as well as node-related information.
administrator User can do everything monitoring can do, manage users, vhosts and permissions, close other user's connections, and manage policies and parameters for all vhosts.
推荐角色:
management
(基础管理权限)+ 自定义权限(限制对特定资源的访问)。
policymaker
:
适用于需要管理策略(如消息过期、镜像队列)的运维人员,但不建议直接分配给生产者或消费者。monitoring
:
适用于监控系统(如 Prometheus、Grafana),可查看所有连接和节点信息。administrator
:
仅用于系统管理员,拥有最高权限,不适合生产者 / 消费者。
最佳实践
为不同业务创建独立用户:
例如,订单系统和库存系统应使用不同的用户,避免权限交叉。使用虚拟主机(Vhost)隔离环境:
为开发、测试、生产环境创建独立的 Vhost,并分配不同用户。
STOMP 支持多个不同的目标,包括那些假定预先存在的拓扑的目标。
/topic
:发布到没有使用者的主题将导致消息丢失。第一个订阅者 该主题将为其声明一个队列。/exchange
:目标交易所必须存在,否则服务器将报告错误/amq/queue
:目标队列必须存在,否则服务器会报错/queue
:发布到不存在的队列会设置它/temp-queue
:发布到不存在的临时队列会设置
七种工作模式介绍:
RabbitMQ 七种工作模式介绍-腾讯云开发者社区-腾讯云
典型场景示例
场景 1:多生产者并发写入同一 vhost
# 创建两个生产者用户,分别访问不同交换机 rabbitmqctl set_permissions -p my_vhost producer1 ".*" "order_exchange" ".*" rabbitmqctl set_permissions -p my_vhost producer2 ".*" "inventory_exchange" ".*"
- 结果:
producer1
和producer2
可以同时向my_vhost
内的不同交换机发送消息。
场景 2:多消费者并发读取同一队列
# 创建两个消费者用户,访问同一队列 rabbitmqctl set_permissions -p my_vhost consumer1 "work_queue" ".*" "work_queue" rabbitmqctl set_permissions -p my_vhost consumer2 "work_queue" ".*" "work_queue"
结果:
consumer1
和consumer2
可以通过竞争消费模式(Round-Robin)从work_queue
获取消息,实现负载均衡。
场景 3:生产者与消费者协作
# 生产者权限:仅可发布到 order_exchange rabbitmqctl set_permissions -p my_vhost producer ".*" "order_exchange" ".*" # 消费者权限:仅可消费 order_queue rabbitmqctl set_permissions -p my_vhost consumer "order_queue" ".*" "order_queue"
- 结果:生产者发布的消息通过
order_exchange
路由到order_queue
,消费者从队列获取消息,两者互不干扰。
案例:A B C三个设备 通过rabbitmq发送数据给服务1;D F两个设备通过同一个rabbitmq 发送数据给服务2。方案1:选择使用不同/vhost 对应不同服务,方案2:使用同一个/vhost 发布到不同交换机,由服务自己确认读取对应的队列 哪种好 ?
维度 方案 1:多 vhost(推荐) 方案 2:单 vhost + 多交换机 资源隔离性 完全隔离:不同 vhost 拥有独立的用户、交换机、队列、连接。 逻辑隔离:所有资源共享同一 vhost,故障可能相互影响。 一个 vhost 崩溃不影响其他 vhost。 权限管理 清晰:用户权限基于 vhost 划分,如: 复杂:需通过正则表达式精确控制用户对交换机 / 队列的访问,如: - 用户 robot_A 仅能访问 vhost_service1 - 用户 robot_A 仅能访问 service1_* 交换机 - 用户 robot_D 仅能访问 vhost_service2 监控与运维 简单:每个 vhost 可独立监控和维护,管理界面清晰分离。 复杂:所有设备和服务的指标混合,难以快速定位问题。 网络开销 每个 vhost 需单独建立连接,增加少量开销(通常可忽略)。 所有设备共享同一连接,开销略低。 安全风险 低:用户无法跨 vhost 访问资源,如服务 1 的设备无法访问服务 2 的数据。 高:若权限配置不当(如用户误配正则),可能导致数据泄露。 扩展性 好:新增服务只需创建新 vhost,无需修改现有配置。 一般:需在现有 vhost 内新增交换机 / 队列,可能影响现有路由。 配置复杂度 中等:需为每个 vhost 配置独立的用户和权限。 高:需精心设计交换机 / 队列命名规则和权限正则。