乐趣区

关于java: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 的一点琐碎常识,感兴趣的小伙伴能够试试哦~

退出移动版