博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RabbitMQ管理(1)——多租户与权限
阅读量:5820 次
发布时间:2019-06-18

本文共 3700 字,大约阅读时间需要 12 分钟。

每一个RabbitMQ服务器都能创建虚拟的消息服务器,我们称之为虚拟主机(virtual host),简称为vhost。每一个vhost本质上是一个独立的小型RabbitMQ服务器,拥有自己独立的队列、交换器以及绑定关系等待,并且它拥有自己独立的权限。vhost就像是虚拟机与物理服务器一样,它们在各个实例间提供逻辑上的分离,允许你为不同程序安全保密地运行数据,它既能将同一个RabbitMQ的中众多客户区分开,又可以避免队列和交换器等命令冲突。vhost之间是绝对隔离的,你无法将vhost1中的交换器与vhost2中的队列进行绑定,这样既保证了安全性,又可以确保可移植性。如果在使用RabbitMQ达到一定规模的时候,建议用户对业务功能、场景进行归类区分,并为之分配独立的vhost。

vhost是AMQP概念的基础,客户端在连接的时候必须制定一个vhost。RabbitMQ默认已创建的vhost为“/”,如果不需要多个vhost或者对vhost的概念不是很理解,那么就用这个默认的vhost也是非常合理的,使用默认的用户名guest和密码guest就可以访问它。但是为了安全以及方便,建议重新建立一个新的用户来访问它。

可以使用rabbitmqctl add_vhost {vhost}命令创建一个新的vhost,大括号里的参数表示vhost的名称。示例如下:

[root@node1 ~]# rabbitmqctl add_vhost vhost1Creating vhost "vhost1" ```可以使用rabbitmqctl list_vhosts [vhostinfoitem...]来罗列当前vhost的相关信息。目前vhostinfoitem的取值有2个:  1. name:表示vhost的名称。  2. tracing:表示是否使用了RabbitMQ的trace功能。有关trace功能,详细可以参考10.1章节。示例如下: ```[root@node1 ~]# rabbitmqctl list_vhosts name tracingListing vhostsvhost1      false/       false[root@node1 ~]# rabbitmqctl trace_onStarting tracing for vhost "/"[root@node1 ~]# rabbitmqctl list_vhosts name tracingListing vhostsvhost1      false/       true

对应的删除的vhost的命令是:rabbitmqctl delete_vhost {vhost},其中大括号里面的参数表示vhost的名称。删除一个vhost同时也会删除其下所有的队列、交换器、绑定关系、用户权限、参数以及策略等信息。示例如下:

[root@node1 ~]# rabbitmqctl delete_vhost vhost1Deleting vhost "vhost1"[root@node1 ~]# rabbitmqctl list_vhostsListing vhosts

AMQP协议中并没有指定权限在vhost级别还是在服务器端级别实现,由具体的应用自定义。在RabbitMQ中,权限控制则是以vhost为单位的。当创建一个用户时,用户通常会被指派给至少一个vhost,并且只能访问被指派vhost内的队列、交换器以及绑定关系。因此,RabbitMQ中的授予权限是指在vhost级别对用户而言的权限授予。

相关的授予权限命令为:rabbitmqctl set_permissions [-p vhost] {user} {conf} {write} {read}。其中各个参数的含义为:

  1. vhost:授予用户访问权限的vhost名称,可以缺省,即vhost为”/”。
  2. user:可以访问指定vhost的用户名称。
  3. conf:一个用于匹配用户在哪些资源上拥有可配置权限的正则表达式。
  4. write:一个用于匹配用户在哪些资源上拥有可写权限的正则表达式。
  5. read:一个用于匹配用户在哪些资源上有用可读权限的正则表达式。

注:可配置指的是队列和交换器的创建以及删除之类的操作;可写指的是发布消息;可读指与消息有关的操作,包括读取消息以及清空整个队列等。

授予用户root可访问虚拟主机vhost1,并在所有资源上都具备可配置、可写以及可读的权限。示例如下:

[root@node1 ~]# rabbitmqctl set_permissions -p vhost1 root ".*" ".*" ".*"Setting permissions for user "root" in vhost "vhost1"

授予用户root可访问虚拟主机vhost2,在以“queue”开头的资源上具备可配置权限,并在所有资源上拥有可写、可读的权限,示例如下:

[root@node1 ~]# rabbitmqctl set_permissions -p vhost2 root "^queue.*" ".*" ".*"Setting permissions for user "root" in vhost "vhost2"

清除权限也是在vhost级别对用户而言的清除权限。清除权限的命令为:rabbitmqctl clear_permissions [-p vhost] {username}。其中vhost用于设置禁止用户访问的虚拟主机的名称,默认为“/”;username表示禁止访问特定虚拟主机的用户名称。示例如下:

[root@node1 ~]# rabbitmqctl clear_permissions -p vhost1 rootClearing permissions for user "root" in vhost "vhost1"

在RabbitMQ中有两个shell命令可以列举权限信息。第一个命令是:rabbitmqctl list_permissions [-p vhost],用来显示虚拟主机上的权限;第二个命令是:rabbitmqctl list_user_permissions {username},用来显示用户的权限。示例如下:

[root@node1 ~]# rabbitmqctl list_permissions -p vhost1Listing permissions in vhost "vhost1"root .*      .*      .*[root@node1 ~]# rabbitmqctl list_user_permissions rootListing permissions for user "root"/       .*      .*      .*vhost1      .*      .*      .*

细心的读者可能会注意到本章节中用到的所有命令都是rabbitmqctl工具的扩展命令,rabbitmqctl工具是用来管理RabbitMQ中间件的命令行工具,它通过连接各个RabbitMQ节点来执行所有操作。如果有节点没有运行,将会显示诊断信息、不能到达,或因不匹配的Erlang cookie(有关Erlang cookie的细节可以参考7.1章节)而拒绝连接。rabbitmqctl工具的标准语法如下:

rabbitmqctl [-n node] [-t timeout] [-q] {
command} [command options...]

[-n node]

默认节点是”rabbit@hostname”,此处的hostname是主机名称。在一个名为”node.hidden.com”的主机上, RabbitMQ Erlang node 的节点名称通常是rabbit@node (除非RABBITMQ_NODENAME参数在启动时设置了非默认值)。 hostname -s 的输出通常是”@” 标志后的东西。
[-q]
使用-q标志来启用quiet模式,这样可以屏蔽一些消息的输出。 默认不开启quiet模式。
[-t timeout]
操作超时时间(秒为单位)。只适用于“list”类型的命令。 默认是无穷大。
下面来演示下[-q]和[-t timeout]参数的用法和效果:

[root@node1 ~]# rabbitmqctl list_vhostsListing vhosts/[root@node1 ~]# rabbitmqctl list_vhosts -q/[root@node1 ~]# rabbitmqctl list_vhosts -q -t 1/[root@node1 ~]# rabbitmqctl list_vhosts -q -t 0Error: {timeout,0.0}

转载地址:http://uqzdx.baihongyu.com/

你可能感兴趣的文章
html5纲要,细谈HTML 5新增的元素
查看>>
Android应用集成支付宝接口的简化
查看>>
[分享]Ubuntu12.04安装基础教程(图文)
查看>>
WCF
查看>>
django 目录结构修改
查看>>
win8 关闭防火墙
查看>>
CSS——(2)与标准流盒模型
查看>>
MYSQL 基本SQL语句
查看>>
C#中的Marshal
查看>>
linux命令:ls
查看>>
Using RequireJS in AngularJS Applications
查看>>
hdu 2444(二分图最大匹配)
查看>>
shell编程笔记六:实现ll命令
查看>>
【SAP HANA】关于SAP HANA中带层次结构的计算视图Cacultation View创建、激活状况下在系统中生成对象的研究...
查看>>
《Linux内核修炼之道》 之 高效学习Linux内核
查看>>
DevOps 前世今生 | mPaaS 线上直播 CodeHub #1 回顾
查看>>
iOS 解决UITabelView刷新闪动
查看>>
Web前端JQuery入门实战案例
查看>>
CentOS 7 装vim遇到的问题和解决方法
查看>>
JavaScript基础教程1-20160612
查看>>