当前位置: 代码迷 >> 综合 >> RabbitMQ多租户与权限
  详细解决方案

RabbitMQ多租户与权限

热度:40   发布时间:2023-10-08 18:09:36.0

   每一个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#