我们在第一次安装RabbitMQ的时候,可能会通过Web页面来管理RabbitMQ。默认情况下,我们第一次使用的默认用户是guest。登录成功后,在admin选项卡中可以查看所有用户:可以看到每个用户都有一个Canaccessvirtualhosts属性,这个属性是什么意思?宋哥今天就来和大家分享一下。1.多租户RabbitMQ中有一个概念叫多租户,怎么理解呢?我们安装了一个RabbitMQ服务器,每个RabbitMQ服务器可以创建很多虚拟的消息服务器。这些虚拟消息服务器就是我们所说的虚拟主机,一般简称为vhosts。从本质上讲,每个vhost都是一个独立的小型RabbitMQ服务器。这个vhost会有自己的消息队列、消息开关和对应的绑定关系等,有自己独立的权限。queue和Switch之间不能绑定,这样skill才能保证安全运行,避免命名冲突。我们不需要特别关注vhost。它就像普通的物理RabbitMQ。不同的虚拟主机可以提供逻辑分离,保证不同的应用消息队列可以安全独立的运行。对我来说,我们应该如何看待vhost和RabbitMQ的关系呢?RabbitMQ相当于一个Excel文件,vhost就是Excel文件中的一个sheet。我们所有的操作都是在一张纸上进行的。vhost本质上是AMQP协议中的一个概念。2.通过命令行创建vhost先来看看如何通过命令行创建vhost。因为这里的RabbitMQ安装了docker,所以我们先进入docker容器:dockerexec-itsome-rabbit/bin/bash然后执行下面的命令创建一个名为/myvh的vhost:rabbitmqctladd_vhostmyvh最后执行结果如下:然后可以通过以下命令查看已有的vhosts:rabbitmqctllist_vhosts当然这个命令还可以加上name和tracing两个选项,name表示vhost的名字,tracing表示是否使用tracing功能(tracing可以帮助trackRabbitMQInflowandoutflowofmessages),如下图所示:可以通过以下命令删除一个vhost:rabbitmqctldelete_vhostmyvh当一个vhost被删除时,与该vhost相关的消息队列、交换机、绑定关系都将被删除被删除。给一个用户设置一个vhost:rabbitmqctlset_permissions-pmyvhguest".*"".*"".*"前面的参数好说,后面三个“.*”的含义如下:用户有可配置资源对所有资源的权限(创建/删除消息队列、创建/删除交换等)。用户对所有资源具有写入权限(发送消息)。用户对所有资源(消息消费、清除队列等)有读取权限。禁止用户访问虚拟主机:rabbitmqctlclear_permissions-pmyvhguest3。在管理页面创建vhost当然我们也可以在网页管理vhosts:在admin选项卡中,点击右侧的VirtualHosts,如下:然后点击下方的AddanewVirtualhost,可以添加一个newvhost:进入某个vhost后,可以修改其权限,删除一个vhost,如下图:4.用户管理因为vhost一般是和用户一起出现的,所以这里也顺便提一下用户的相关操作.添加用户名为javaboy,密码为123的用户,如下:rabbitmqctladd_userjavaboy123使用如下命令修改用户密码(将javaboy的密码修改为123456):rabbitmqctlchange_passwordjavaboy123456使用以下命令验证用户密码:rabbitmqctlauthenticate_userjavaboy123456认证成功和认证失败的条件如下:可以通过以下命令查看当前所有用户:第一列为用户名,第二列为用户角色。关于用户角色,我在之前的文章中已经讲过了,这里不再赘述。传送门:RabbitMQ管理页面使用方法。为用户设置角色的命令如下(为javaboy设置管理员角色):rabbitmqctlset_user_tagsjavaboyadministrator最后,删除用户的命令如下:rabbitmqctldelete_userjavaboy5。试试~
