赞
踩
RabbitMQ 是多租户系统:连接、交换、队列、绑定、用户权限、保单和其他一些东西属于虚拟主机、实体的逻辑组。如果你熟悉 Apache virtual hosts 或 Nginx server blocks,它们的功能是类似的。然而,有一个重要的区别:Apache 中的虚拟主机是在配置文件中定义的;RabbitMQ 并不是这样的:它的虚拟主机是使用 rabbitmqctl
或 HTTP API
创建的。
虚拟主机提供逻辑分组和资源分离。物理资源的分离不是虚拟主机的目标,应该被视为实现细节。
vhost
本质上是一个 mini 版的 RabbitMQ 服务器,拥有自己的队列、交换器和绑定等等vhost
就像是虚拟机之与物理服务器一样:他们在各个实例间提供逻辑上的分离,允许你为不同程序安全保密地运行数据,它既能将同一个Rabbit的众多客户区分开来,又可以避免队列和交换器命名冲突guest
用户名和密码 guest
就可以访问默认的 vhostvhost
,整个集群上都会创建该 vhost
,vhost
不仅消除了为基础架构中的每一层运行一个 RabbitMQ 服务器的需要,同样也避免了为每一层创建不同集群虚拟主机有一个名称。当 AMQP 0-9-1 客户端连接到 RabbitMQ 时,它指定要连接的虚拟主机的名称。如果身份验证成功,并且所提供的用户名 被授予虚拟主机的权限,则建立连接。
与虚拟主机的连接只能在虚拟主机中进行交换、队列、绑定等操作。当一个应用程序同时连接到两个虚拟主机时,只可能在不同的虚拟主机中“互连”。例如,一个应用程序可以从一个虚拟主机中消费,然后重新发布到另一个主机上。这个场景可能涉及到不同集群或同一集群(或单个节点)中的虚拟主机。RabbitMQ Shovel 插件就是此类应用的一个例子。
就像 AMQP-9-1
一样,STOMP
包含了虚拟主机概念。详情请参 STOMP 指南。
与 AMQP 0-9-1
和 STOMP
不同,MQTT
没有虚拟主机的概念。MQTT
连接默认使用单个 RabbitMQ
主机。有一些特殊的于 mqtt 约定和特性,使得客户端可以连接到特定的虚拟主机,而无需进行任何客户机库修改。有关详细信息,请参见 MQTT 指南。
在某些情况下,最好在虚拟主机中限制队列或并发客户端连接的最大允许数量。在RabbitMQ 3.7.0
中,这是通过 per-vhost
来实现限制的。
这些限制可以使用 rabbitmqctl
或 HTTP API
进行配置。
rabbitmqctl set_vhost_limits
是通过命令行来定义虚拟主机限制。它需要一个虚拟主机参数和一个限制定义的 JSON
文档。
要限制虚拟主机 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}'
为了限制虚拟主机 vhost_name
中的队列总数,请使用下列限制定义
rabbitmqctl set_vhost_limits -p vhost_name '{"max-queues": 1024}'
如果想取消限制,可以把它设置成负值
rabbitmqctl set_vhost_limits -p vhost_name '{"max-queues": -1}'
原文地址:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。