当前位置:首页 > IT科技类资讯

RabbitMQ 中的 VirtualHost 该如何理解

当我们第一次安装好一个 RabbitMQ 之后,何理我们可能都会通过 Web 页面去管理这个 RabbitMQ,何理默认情况下,何理我们第一次使用的何理默认用户是 guest。

登录成功后,何理在 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:

rabbitmqctl clear_permissions -p myvh guest 

3. 管理页面创建 vhost

当然我们也可以在网页端管理 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 

最后,删除一个用户的命令如下:

rabbitmqctl delete_user javaboy 

5. 小结

好啦,关于 RabbitMQ 的一点琐碎知识,感兴趣的小伙伴可以试试哦~

本文转载自微信公众号「江南一点雨」,可以通过以下二维码关注。转载本文请联系江南一点雨公众号。

分享到:

滇ICP备2023006006号-16