8、RabbitMQ Virtual Hosts

RabbitMQ 是多租户系统:连接、交换、队列、绑定、用户权限、保单和其他一些东西属于虚拟主机、实体的逻辑组。如果你熟悉 Apache virtual hostsNginx server blocks,它们的功能是类似的。然而,有一个重要的区别:Apache 中的虚拟主机是在配置文件中定义的;RabbitMQ 并不是这样的:它的虚拟主机是使用 rabbitmqctlHTTP API 创建的。

1、逻辑和物理分离

虚拟主机提供逻辑分组和资源分离。物理资源的分离不是虚拟主机的目标,应该被视为实现细节。

  • 每个 RabbitMQ 服务器都能创建虚拟的消息服务器,我们称之为虚拟主机(vhost)每一个 vhost 本质上是一个 mini 版的 RabbitMQ 服务器,拥有自己的队列、交换器和绑定等等
  • 更重要的是,他拥有自己的权限机制,这使得你能够安全地使用一个 RabbitMQ 服务器来服务众多的应用程序
  • vhost 就像是虚拟机之与物理服务器一样:他们在各个实例间提供逻辑上的分离,允许你为不同程序安全保密地运行数据,它既能将同一个Rabbit的众多客户区分开来,又可以避免队列和交换器命名冲突
  • vhost是AMQP概念的基础,你必须在连接时进行指定
  • RabbitMQ 包含了一个开箱即用的默认vhost:”/“,如果你不需要多个 vhost,那么就使用默认的吧,使用缺省的 guest 用户名和密码 guest 就可以访问默认的 vhost
  • 当你在 RabbitMQ 集群上创建 vhost,整个集群上都会创建该 vhostvhost 不仅消除了为基础架构中的每一层运行一个 RabbitMQ 服务器的需要,同样也避免了为每一层创建不同集群

2、虚拟主机和客户端连接

虚拟主机有一个名称。当 AMQP 0-9-1 客户端连接到 RabbitMQ 时,它指定要连接的虚拟主机的名称。如果身份验证成功,并且所提供的用户名 被授予虚拟主机的权限,则建立连接。

与虚拟主机的连接只能在虚拟主机中进行交换、队列、绑定等操作。当一个应用程序同时连接到两个虚拟主机时,只可能在不同的虚拟主机中“互连”。例如,一个应用程序可以从一个虚拟主机中消费,然后重新发布到另一个主机上。这个场景可能涉及到不同集群或同一集群(或单个节点)中的虚拟主机。RabbitMQ Shovel 插件就是此类应用的一个例子。

3、虚拟主机和 STOMP

就像 AMQP-9-1 一样,STOMP 包含了虚拟主机概念。详情请参 STOMP 指南

4、虚拟主机和 MQTT

AMQP 0-9-1STOMP 不同,MQTT 没有虚拟主机的概念。MQTT 连接默认使用单个 RabbitMQ 主机。有一些特殊的于 mqtt 约定和特性,使得客户端可以连接到特定的虚拟主机,而无需进行任何客户机库修改。有关详细信息,请参见 MQTT 指南

5、限制

在某些情况下,最好在虚拟主机中限制队列或并发客户端连接的最大允许数量。在RabbitMQ 3.7.0中,这是通过 per-vhost 来实现限制的。

这些限制可以使用 rabbitmqctlHTTP API 进行配置。

5.1 使用 rabbitmqctl 配置限制

rabbitmqctl set_vhost_limits 是通过命令行来定义虚拟主机限制。它需要一个虚拟主机参数和一个限制定义的 JSON 文档。

5.2 配置最大连接限制

要限制虚拟主机 vhost_name 连接中连接并发客户端连接的总数,请使用以下限制定义:

rabbitmqctl set_vhost_limits -p vhost_name '{"max-connections": 256}'

要禁用客户端连接到虚拟主机,请将上限设置为 0

rabbitmqctl set_vhost_limits -p vhost_name '{"max-connections": 0}'

如果想取消限制,可以把它设置成负值

rabbitmqctl set_vhost_limits -p vhost_name '{"max-connections": -1}'
5.3 配置最大队列数

为了限制虚拟主机 vhost_name中的队列总数,请使用下列限制定义

rabbitmqctl set_vhost_limits -p vhost_name '{"max-queues": 1024}'

如果想取消限制,可以把它设置成负值

rabbitmqctl set_vhost_limits -p vhost_name '{"max-queues": -1}'

原文地址:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值