RabbitMQ 中的绝大多数配置都可以通过修改 rabbitrnq.config 配置文件来实现,但是其中有些配置并不太适合在 rabbitmq.config 配置文件中去实现。
例如:某项配置不需要同步到集群中的其它节点,或者某项配置需要在运行时更改(因为修改 rabbitmq.config 配置需要重启 Broker 才能生效)。这种类型的配置在 RabbitMQ 中的另一种称呼为参数(Parameter),也可以称之为运行时参数(Runtime Parameter)。
RabbitMQ 的运行时参数可以通过 rabbitmqctl 工具或者 RabbitMQ Management 插件提供的 HTTP API 接口来设置。RabbitMQ 中一共有两种类型的运行时参数:
vhost 级别的运行时参数:vhost 级别的运行时参数由一个组件名称(component name)、名称(name)和值(value)组成。
global 级别的运行时参数:而 global 级别的参数由一个名称(name)和值(value)组成。
注意:不管是 vhost 级别还是 global 级别的运行时参数,其所对应的值都是 JSON 类型的。
vhost 级别的运行时参数对应的 rabbitmqctl 如下三个命令:
用来设置一个参数,命令格式:
rabbitmqctl set_parameter [-p vhost] {component_name} {name} {value}
示例:演示 Federation upstream的运行时参数设置,需要先开启 rabbitmq_federation 插件。
# 启动 rabbitmq_federation 插件 D:\server\rabbitmq_server-3.9.11\sbin> rabbitmq-plugins.bat enable rabbitmq_federation Enabling plugins on node hello@hxstrive: rabbitmq_federation The following plugins have been configured: rabbitmq_federation rabbitmq_management rabbitmq_management_agent rabbitmq_web_dispatch Applying plugin configuration to hello@hxstrive... The following plugins have been enabled: rabbitmq_federation started 1 plugins. # 为 federation-upstream 组件添加 my-upstream 参数 D:\server\rabbitmq_server-3.9.11\sbin> rabbitmqctl.bat set_parameter federation-upstream my-upstream "{""uri"":""amqp://target.hostname"",""expires"":3600000}" Setting runtime parameter "my-upstream" for component "federation-upstream" to "{"uri":"amqp://target.hostname","expires":3600000}" in vhost "/" ...
用来列出指定虚拟主机上所有的运行时参数,命令格式:
rabbitmqctl list_parameters [-p vhost]
示例
(1)默认将列出默认虚拟主机下面的运行时参数
D:\server\rabbitmq_server-3.9.11\sbin> rabbitmqctl list_parameters Listing runtime parameters for vhost "/" ... component name value federation-upstream my-upstream {"expires":3600000,"uri":"amqp://target.hostname"}
(2)列出 vhost1 虚拟主机下面的运行时参数
D:\server\rabbitmq_server-3.9.11\sbin> rabbitmqctl list_parameters -p vhost1 Listing runtime parameters for vhost "vhost1" ... component name value federation-upstream my-upstream2 {"expires":3600000,"uri":"amqp://target.hostname"}
用来清除指定的运行时参数,命令格式:
rabbitmqctl clear_parameter [-p vhost] {componenet_name} {key}
例如:清除 vhost1 虚拟主机下 federation-upstream 组件中的 my-upstream2 运行时参数
# 清理 vhost1 虚拟机下 federation-upstream 中的 my-upstream2 运行时参数 D:\server\rabbitmq_server-3.9.11\sbin> rabbitmqctl clear_parameter -p vhost1 federation-upstream my-upstream2 Clearing runtime parameter "my-upstream2" for component "federation-upstream" on vhost "vhost1" ... # 验证清除结果 D:\server\rabbitmq_server-3.9.11\sbin> rabbitmqctl list_parameters -p vhost1 Listing runtime parameters for vhost "vhost1" ...
下面是与 rabbitmqctl 工具相对应的 HTTP API 接口如下:
使用 HTTP 的 PUT 方法访问接口设置运行时参数,如下图:
上图中,将在 vhost1 虚拟机下面创建名为 myName 的运行时参数,参数值为“{"expires":3600000,"uri":"amqp://target.hostname"}”。
注意,调用 API 创建运行时参数需要授权(用户名密码均为 guest),授权采用 HTTP 基础授权方式,如下图:
使用 HTTP 的 DELETE 方法访问接口从 RabbitMQ 中删除运行时参数,如下图:
注意,删除运行时参数也需要进行授权,采用 HTTP 基础授权方式,用户名和密码均为 guest。
使用 HTTP 的 GET 方法访问接口获取所有参数,如下图:
如果仅想查询指定组件下面的运行时参数,可使用方式,例如:
http://localhost:15672/api/parameters/federation-upstream
上面 URL 将获取 federation-upstream 组件下面的所有运行时参数。
如果想查询指定组件在指定虚拟机下面的运行时参数,可使用方式,例如:
http://localhost:15672/api/parameters/federation-upstream/vhost1
上面 URL 将获取 federation-upstream 组件下面,在 vhost1 虚拟机中的运行时参数。
如果想查询指定组件下、指定虚拟机中的某个参数信息,可使用 / 方式,例如:
http://localhost:15672/api/parameters/federation-upstream/vhost1/my-upstream2
上面 URL 将获取 federation-upstream 组件下面,在 vhost1 虚拟机中的 my-upstream2 运行时参数