五、虚拟主机和隔离

到现在为止,我们熟悉了 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。

你可能感兴趣的:(五、虚拟主机和隔离)