到现在为止,我们熟悉了 AMQ 模型在逻辑上定义的三大组件的特性,这三个组件的搭配确定了消息的路由行为。接下来继续了解 AMQ 模型另一个概念:vhost。
vhost 的概念
每一个 RabbitMQ 服务器都能创建虚拟消息服务器,我们称之为虚拟主机(vhost)。每一个 vhost 本质上是一个 mini 版的 RabbitMQ 服务器,vhost 之于 Rabbit 就像虚拟机之于物理服务器一样。
vhost 的特征
每个 vhost 拥有自己的队列、交换器和绑定…… 更重要的是,它拥有自己的权限机制。他们之间提供逻辑上分离,为不同应用程序安全保密地运行数据。它既能将同一 Rabbit 的众多客户区分开来,又可以避免队列和交换器的命名冲突。
需要注意的是:AMQP 协议并没有指定权限控制是在 vhost 级别还是在服务器端级别实现。这留给了服务器的开发者去决定。在 RabbitMQ 中,权限控制是以 vhost 为单位的。
vhost 与用户
RabbitMQ 包含了默认的 vhost :“/”。如果不需要多个vhost的话,使用默认的 vhost 就足够了。它有一个缺省的账户,用户名:guest;密码:guest。
在Rabbit里创建一个用户时,用户通常会被指派给至少一个 vhost,并且只能访问被指派vhost内的队列、交换器和绑定。
vhost 的管理
vhost 和权限控制非常独特,它们是AMQP中唯一无法通过 AMQP 协议创建的基元(不同于队列,交换器和绑定)。对于 RabbitMQ 来说,你需要通过 RabbitMQ 的安装路径下./sbin/
目录中的 rabbitmqctl 工具来创建。通过简单地运行rabbitmqctl add_vhost [vhost_name]
就可以创建一个 vhost。其中[vhost_name]就是你想要创建的 vhost。创建成功之后,就可以连接上去并开始添加队列和交换器了。
删除 vhost 同样简单,运行rabbitmqctl delete_vhost [vhost_name]
即可。
想要知道特定 Rabbit 服务器上运行着哪些 vhost 时,运行rabbitmqctl list_vhosts
即可。
注意:通常情况下,你将在服务器上直接运行 rabbitmqctl 来管理自己的 RabbitMQ 节点。不过,你也可以通过指定
–n rabbit@[server_name]
选项来管理远程 RabbitMQ 节点。@符号将节点标识符(rabbit@[server_name])分成两部分:左边的是 Erlang 应用程序名称,在这里永远都是 rabbit。右边是服务器主机名或者 IP 地址。你需要确保运行 Rabbit 节点的服务器和运行 rabbitmqctl 的工作站安装了相同的 Erlang cookie。
网友评论