四、RabbitMQ 快速使用 - RabbitMQ 管理之 vhost
hi,我是温新,一名 PHPer
版本:erlang-25.2.1、rabbitmq_server-3.11.9
系统版本:Rocky Linux 9.1
学习目标:掌握 vhost 相关操作
本篇文章结合官方文档编写及参考网络资料编写,虽非全部原创,但也是结合了自己的理解,若转载请附带本文 URL,编写不易,持续编写更不易,谢谢!
每一个 RabbitMQ 服务器都能创建虚拟消息服务器 ,即虚拟主机(Virtual host),简称 vhost。
vhost 本质是一个独立的小型 RabbitMQ 服务器,拥有自己对立的队列、交换器、绑定关系等,耐用还拥有自己独立的权限。
每个 vhost 之间都是绝对隔壁的,因此可以避免队列和交换机等命名冲突。举例来说 ,无法把 vhost1 中的交换机与 vhost2 中的队列进行绑定。
使用 RabbitMQ 时,可以基于业务功能设置不同的场景区分并独立配置 vhost。
vhost 是 AMQP 概念的基础,客户端连接服务器必须指定一个 vhost。若没有指定 vhost 时,会连接默认的 vhost /
。
创建 vhost
语法
$ rabbitmqctl add_vhost 虚拟主机名
案例
$ rabbitmqctl add_vhost sms
查看 vhost
语法
$ rabbitmqctl list_vhosts [vhostinfoitem...]
# 参数说明:
# name: vhost 名称
# tracing:表示是否使用了 RabbitMQ 的 trace 功能
案例
# 方式一
$ rabbitmqctl list_vhosts
# 方式二
$ rabbitmqctl list_vhosts name tracing
删除 vhost
语法
$ rabbitmqctl delete_vhost 虚拟主机名
案例
$ rabbitmqctl delete_vhost sms
删除一个 vhost ,同时也会删除下面的队列、交换器、绑定关系、用户权限、参数和策略等信息。
权限配置(set_premissions)
AMQP 协议中并没有指定权限在 vhost 级别还是在服务器级别实现,由具体的应用自定义。
在 RabbitMQ 中,权限以 vhost 为单位。在 创建一个用户时,用户通常会被 指派给至少一个 vhost,意味着该用户只能访问被指派的 vhost 内的资源。
rabbitmqctl set_permissions [-p vhost] {user} {conf} {write} {read}
# 参数说明
# -p vhost:给哪一个 vhost 授权用户访问权限
# user:给哪一个用户指定权限
# conf:用于匹配用户在哪些资源上拥有可配置权限的正则表达式;指:队列和交换器的创建及删除之类的操作
# write:用于匹配用户在哪些资源上拥有可写权限的正则表达式;指:发布消息
# read:用于匹配用户在哪些资源上拥有可读权限的正则表达式;指:与消息有关的操作,包括读取消息及清空整个队列等
AMQP 命令列表与对应的权限:
AMQP 命令 | 可配置 | 可写 | 可读 |
---|---|---|---|
Exchange.Declare |
exchange | ||
Exchange.Declare(with AE) |
exchange | exchange(AE) | exchange |
Exchange.Delete |
exchange | ||
Queue.Declare |
queue | ||
Queue.Declare(with DLX) |
queue | exchange(DLX) | queue |
Queue.Delete |
queue | ||
Exchange.Bind |
exchange(destination) | exchange(source) | |
Exchange.Unbind |
exchange(destination) | exchange(source) | |
Queue.Bind |
queue | exchange | |
Queue.Unbind |
queue | exchange | |
Basic.Publish |
exchange | ||
Basic.Get |
queue | ||
Basic.Consume |
queue | ||
Queue.Purge |
queue |
配置权限案例
# 授予 test 用户可以访问虚拟主机 sms;
# 并且在所有资源上具有可配置、可写、可读权限
$ rabbitmqctl set_permissions -p sms test ".*" ".*" ".*"
查看 vhost 权限
语法
$ rabbitmqctl list_permissions [-p vhost]
案例
$ rabbitmqctl list_permissions -p sms
查看用户权限
语法
$ rabbitmqctl list_user_permissions {username}
案例
$ rabbitmqctl list_user_permissions test
删除用户权限
语法
$ rabbitmqctl clear_permissions [-p vhost] {username}
案例
$ rabbitmqctl clear_permissions -p sms test
请登录后再评论