运行时参数
概述
虽然 RabbitMQ 的大部分配置都存放在配置文件中,但有些配置项并不适合通过配置文件来管理
- 如果它们需要在集群中的所有节点上保持一致
- 如果它们需要在运行时动态变更
RabbitMQ 将这些项称为参数 (parameters)。参数可以通过调用 rabbitmqctl 或通过 HTTP API 进行设置。
参数有两种类型:虚拟主机作用域参数和全局参数。顾名思义,前者绑定到某个虚拟主机,由组件名称、参数名称和参数值组成。
例如,动态 shovel 就是使用运行时参数定义的。它隶属于某个虚拟主机,拥有一个名称,且其组件类型被设置为 "shovel"。
全局参数不绑定到特定的虚拟主机,仅由名称和值组成。
参数用法的一个重要示例是策略 (policies)
虚拟主机作用域参数
如上所述,参数分为虚拟主机作用域参数和全局参数。虚拟主机作用域参数的一个例子是联邦上游 (federation upstream):它针对某个组件 (federation-upstream),拥有一个标识它的名称,绑定到某个虚拟主机(联邦链接将指向该虚拟主机的某些资源),并且其值定义了连接到上游代理的参数。
虚拟主机作用域参数可以被设置、清除和列出
- 使用 rabbitmqctl (bash)
- 使用 rabbitmqadmin (bash)
- 使用 rabbitmqctl (PowerShell)
- 使用 rabbitmqadmin (PowerShell)
- HTTP API
# sets a runtime parameter in a virtual host
rabbitmqctl set_parameter [-p vhost] <component_name> <name> <value>
# lists runtime parameters in a virtual host
rabbitmqctl list_parameters [-p vhost]
# clears (unsets) a runtime parameter in a virtual host
rabbitmqctl clear_parameter [-p vhost] <component_name> <name>
# Note: for federation upstreams and shovels, use the dedicated 'federation' and 'shovels' command groups instead
# sets a runtime parameter in a virtual host
rabbitmqadmin --vhost "vhost-1" parameters set \
--name "upstream-1" \
--component "federation-upstream" \
--value '{"uri": "amqp://target.hostname/vhost"}'
# lists runtime parameters in a virtual host
rabbitmqadmin --vhost "vhost-1" parameters list
# clears (unsets) a runtime parameter in a virtual host
rabbitmqadmin --vhost "vhost-1" parameters clear \
--name "upstream-1" \
--component "federation-upstream"
# sets a runtime parameter in a virtual host
rabbitmqctl.bat set_parameter [-p vhost] <component_name> <name> <value>
# lists runtime parameters in a virtual host
rabbitmqctl.bat list_parameters [-p vhost]
# clears (unsets) a runtime parameter in a virtual host
rabbitmqctl.bat clear_parameter [-p vhost] <component_name> <name>
# Note: for federation upstreams and shovels, use the dedicated 'federation' and 'shovels' command groups instead
# sets a runtime parameter in a virtual host
rabbitmqadmin.exe --vhost "vhost-1" parameters set ^
--name "upstream-1" ^
--component "federation-upstream" ^
--value "{""uri"": ""amqp://target.hostname/vhost""}"
# lists runtime parameters in a virtual host
rabbitmqadmin.exe --vhost "vhost-1" parameters list
# clears (unsets) a runtime parameter in a virtual host
rabbitmqadmin.exe --vhost "vhost-1" parameters clear ^
--name "upstream-1" ^
--component "federation-upstream"
PUT /api/parameters/{component_name}/{vhost}/{name}
GET /api/parameters
DELETE /api/parameters/{component_name}/{vhost}/{name}
全局参数
全局参数是另一种参数。全局参数的一个例子是集群名称。全局参数可以被设置、清除和列出
- 使用 rabbitmqctl (bash)
- 使用 rabbitmqadmin (bash)
- 使用 rabbitmqctl (PowerShell)
- 使用 rabbitmqadmin (PowerShell)
- HTTP API
# sets a global (virtual-host-independent) runtime parameter
rabbitmqctl set_global_parameter <name> <value>
# lists global (virtual-host-independent) runtime parameters
rabbitmqctl list_global_parameters
# clears (unsets) a global (virtual-host-independent) runtime parameter
rabbitmqctl clear_global_parameter <name>
# sets a global (virtual-host-independent) runtime parameter
rabbitmqadmin global_parameters set --name "cluster_tags" --value '{"region": "ca-central-1"}'
# lists global (virtual-host-independent) runtime parameters
rabbitmqadmin global_parameters list
# clears (unsets) a global (virtual-host-independent) runtime parameter
rabbitmqadmin global_parameters clear --name "cluster_tags"
# sets a global (virtual-host-independent) runtime parameter
rabbitmqctl.bat set_global_parameter <name> <value>
# lists global (virtual-host-independent) runtime parameters
rabbitmqctl.bat list_global_parameters
# clears (unsets) a global (virtual-host-independent) runtime parameter
rabbitmqctl.bat clear_global_parameter <name>
# sets a global (virtual-host-independent) runtime parameter
rabbitmqadmin.exe global_parameters set --name "cluster_tags" --value "{""region"": ""ca-central-1""}"
# lists global (virtual-host-independent) runtime parameters
rabbitmqadmin.exe global_parameters list
# clears (unsets) a global (virtual-host-independent) runtime parameter
rabbitmqadmin.exe global_parameters clear --name "cluster_tags"
PUT /api/global-parameters/name
GET /api/global-parameters
DELETE /api/global-parameters/name
由于参数值是一个 JSON 文档,因此在命令行中使用 rabbitmqctl 创建参数时,通常需要对其进行引用。在 Unix 系统上,通常最简单的方法是用单引号包裹整个文档,并在内部使用双引号。在 Windows 上,则必须对每个双引号进行转义。出于这个原因,我们提供了 Unix 和 Windows 两种平台的示例。
参数存储在 RabbitMQ 用于定义虚拟主机、交换器、队列、绑定、用户和权限的数据库中。当使用管理插件的导出功能时,参数会与其他对象定义一起被导出。
虚拟主机作用域参数由联邦 (federation) 和 shovel 插件使用。
全局参数用于存储各种集群级元数据,例如集群名称、集群标签,以及内部节点元数据(如已导入的 definitions 哈希值)。
集群名称
集群名称存储在全局运行时参数中。它可以使用专门的 CLI 命令进行更新。
- 使用 rabbitmqctl (bash)
- 使用 rabbitmqctl (PowerShell)
rabbitmqctl set_cluster_name rabbit@id-3942837
rabbitmqctl.bat set_cluster_name rabbit@id-3942837
集群标签
集群标签是描述集群的任意键值对。运维人员可以使用它们来附加特定于部署的信息。
集群标签存储在名为 cluster_tags 的全局参数中。它们也可以使用 rabbitmq.conf 进行预配置
cluster_tags.series = 4.1.x
cluster_tags.purpose = iot_ingress
cluster_tags.region = ca-central-1
cluster_tags.environment = production
要检索标签列表,请列出全局运行时参数或获取名为 cluster_tags 的全局运行时参数,或者使用 rabbitmqadmin v2 的 snow overview 命令。
- 使用 rabbitmqctl (bash)
- 使用 rabbitmqadmin (bash)
- PowerShell
- 使用 rabbitmqadmin (PowerShell)
- HTTP API
# lists global (virtual-host-independent) runtime parameters
rabbitmqctl list_global_parameters
# lists global (virtual-host-independent) runtime parameters
rabbitmqadmin global_parameters list
# another command that includes certain global parameters in its
# output, namely node and cluster tags
rabbitmqadmin show overview
# lists global (virtual-host-independent) runtime parameters
rabbitmqctl.bat list_global_parameters
# lists global (virtual-host-independent) runtime parameters
rabbitmqadmin.exe global_parameters list
# another command that includes certain global parameters in its
# output, namely node and cluster tags
rabbitmqadmin.exe show overview
GET /api/global-parameters
GET /api/global-parameters/cluster_tags
策略
策略现已记录在专门的指南中。
运营商策略
操作员策略现已记录在策略指南中。