四、RabbitMQ 快速使用 - RabbitMQ 管理之 vhost

作者: 温新

分类: 【PHP RabbitMQ】

阅读: 2121

时间: 2023-02-27 07:19:27

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
请登录后再评论