登录成功后,在 admin 选项卡可以查看所有用户:
可以看到,每个用户都有一个 Can access virtual hosts 属性,这个属性是啥意思呢?
本日松哥来和大家轻微捋一捋。
1. 多租户
RabbitMQ 中有一个观点叫做多租户,怎么理解呢?
我们安装一个 RabbitMQ 做事器,每一个 RabbitMQ 做事器都能创建出许多虚拟的做事器,这些虚拟的做事器便是我们所说的虚拟主机(virtual host),一样平常简称为 vhost。
实质上,每一个 vhost 都是一个独立的小型 RabbitMQ 做事器,这个 vhost 中会有自己的行列步队、交流机以及相应的绑定关系等等,并且拥有自己独立的权限,不同的 vhost 中的行列步队和交流机不能相互绑定,这样技能担保运行安全又能避免命名冲突。
我们并不须要特殊的去看待 vhost,他就跟普通的物理 RabbitMQ 一样,不同的 vhost 能够供应逻辑上的分离,确保不同的运用行列步队能够安全独立运行。
要我来说,我们该怎么看待 vhost 和 RabbitMQ 的关系呢?RabbitMQ 相称于一个 Excel 文件,而 vhost 则是 Excel 文件中的一个个 sheet,我们所有的操作都是在某一个 sheet 上进行操作。
❝
实质上来说,vhost 算是 AMQP 协议中的观点。
2. 命令行创建 vhost先来看看如何通过命令行创建 vhost。
由于松哥这里的 RabbitMQ 是用 docker 安装的,以是我们首先进入到 docker 容器中:
docker exec -it some-rabbit /bin/bash
然后实行如下命令创建一个名为 /myvh 的 vhost:
rabbitmqctl add_vhost myvh
终极实行结果如下:
然后通过如下命令可以查看已有的 vhost:
rabbitmqctl list_vhosts
当然这个命令也可以添加两个选项 name 和 tracing,name 表示 vhost 的名称,tracing 则表示是否利用了 tracing 功能(tracing 可以帮助追踪 RabbitMQ 中的流入流出情形),如下图:
可以通过如下命令删除一个 vhost:
rabbitmqctl delete_vhost myvh
当删除一个 vhost 的时候,与这个 vhost 干系的行列步队、交流机以及绑定关系等,统统都会被删除。
给一个用户设置 vhost:
rabbitmqctl set_permissions -p myvh guest "." "." "."
前面参数都好说,末了面三个 "." 含义分别如下:
用户在所有资源上都拥有可配置权限(创建/删除行列步队、创建/删除交流机等)。用户在所有资源上都拥有写权限(发)。用户在所有资源上都拥有读权限(消费,清空行列步队等)。禁止一个用户访问某个 vhost:
3. 管理页面创建 vhost
rabbitmqctl clear_permissions -p myvh guest
当然我们也可以在网页端管理 vhost:
在 admin 选项卡中,点击右边的 Virtual Hosts,如下:
然后点击下边的 Add a new virtual host ,可以添加一个新的 vhost:
进入到某一个 vhost 之后,可以修正其权限以及删除一个 vhost,如下图:
4. 用户管理
由于 vhost 常日跟用户一起涌现,以是这里我也顺便说下 user 的干系操作。
添加一个用户名为 javaboy,密码为 123 的用户,办法如下:
rabbitmqctl add_user javaboy 123
通过如下命令可以修正用户密码(将 javaboy 的密码改为 123456):
rabbitmqctl change_password javaboy 123456
通过如下命令可以验证用户密码:
rabbitmqctl authenticate_user javaboy 123456
验证成功和验证失落败的情形分别如下:
通过如下命令可以查看当前的所有用户:
第一列是用户名,第二列是用户角色。
关于用户角色,我在上篇文章中已经聊过了,这里就不再赘述。传送门:RabbitMQ 管理页面该如何利用。
给用户设置角色的命令如下(给 javaboy 设置 administrator 角色):
rabbitmqctl set_user_tags javaboy administrator
末了,删除一个用户的命令如下:
5. 小结
rabbitmqctl delete_user javaboy
好啦,关于 RabbitMQ 的一点噜苏知识,感兴趣的小伙伴可以试试哦~