每一个RabbitMQ服务器都能创建虚拟的消息服务器,我们称之为虚拟主机(virtual host),简称vhost.
每一个vhost本质上都是一个独立的小型RabbitMQ服务器,拥有独立的队列,交换器以及绑定关系等,并且拥有独立的权限。vhost就像是虚拟机与物理服务器一样,它们在各个实例之间提供逻辑上的分离。
vhost是绝对隔离的,无法将vhost1中的交换器与vhost2中的队列进行绑定,保证了安全,如果使用RabbitMQ到达一定规模时,建立用户对业务功能、场景进行分类、分区、并分配独立的vhost.
vhost是AMQP概念的基础,客户端在连接是必须制定一个vhost。RabbitMQ默认创建的vhost为 "/".
创建一个新的vhost:
root@song-PC:/home/song# rabbitmqctl add_vhost song_vhost
Creating vhost "song_vhost" ...
查看vhost列表 :
root@song-PC:/home/song# rabbitmqctl list_vhosts
Listing vhosts ...
/
song_vhost
root@song-PC:/home/song#
root@song-PC:/home/song# rabbitmqctl list_vhosts name tracing
Listing vhosts ...
/ false
song_vhost false
开启trace功能:
root@song-PC:/home/song# rabbitmqctl trace_on
Starting tracing for vhost "/" ...
root@song-PC:/home/song# rabbitmqctl list_vhosts name tracing
Listing vhosts ...
/ true
song_vhost false
删除vhost:
root@song-PC:/home/song# rabbitmqctl delete_vhost song_vhost
Deleting vhost "song_vhost" ...
root@song-PC:/home/song# rabbitmqctl list_vhosts name tracing
Listing vhosts ...
/ true
root@song-PC:/home/song#
RabbitMQ中,权限控制是以vhost为单位的。当创建一个用户时,通常会被指派至少一个vhost,并且只能访问被指派的vhost内的队列、交换器和绑定关系等
授予权限:
rabbitmqctl set_permissions [-p vhost] {user} {config} {write} {read}
vhost: 授予用户访问权限的vhost名称
user: 可以访问指定vhost的用户
config: 可配置权限,队列、交换器创建和删除操作等
write: 发布消息
read: 与消息相关的操作,读取消息和清空整个队列
root@song-PC:/home/song# rabbitmqctl set_permissions -p song_vhost root ".*" ".*" ".*"
Setting permissions for user "root" in vhost "song_vhost" ...
root@song-PC:/home/song#
清空权限命令:
root@song-PC:/home/song# rabbitmqctl clear_permissions -p song_vhost root
Clearing permissions for user "root" in vhost "song_vhost" ...
root@song-PC:/home/song#
显示主机上的权限:
root@song-PC:/home/song# rabbitmqctl list_permissions -p /
Listing permissions in vhost "/" ...
guest .* .* .*
root .* .* .*
显示用户的权限 :
root@song-PC:/home/song# rabbitmqctl list_user_permissions root
Listing permissions for user "root" ...
/ .* .* .*
root@song-PC:/home/song#