命令行工具
目录
本指南涵盖了与 RabbitMQ 命令行工具使用相关的多个主题
- 概述
- 安装和要求用于运行命令行工具
- 如何命令行工具如何向 RabbitMQ 节点进行身份验证以及如何排查身份验证失败问题
- 命令行用法
- 命令行工具和集群
- 如何寻址特定节点
- 关于命令行工具的注意事项在容器化环境中的使用
概述
标准 RabbitMQ 命令行工具
RabbitMQ 附带多个命令行工具,每个工具都有一组相关的命令
rabbitmqctl
用于服务管理和通用操作员任务rabbitmq-diagnostics
用于诊断监控和健康检查rabbitmq-plugins
用于插件管理rabbitmq-queues
用于关于队列的维护任务,特别是仲裁队列rabbitmq-streams
用于关于流的维护任务rabbitmq-upgrade
用于与升级相关的维护任务
在 Windows 上,上述工具名称将以 .bat
结尾,例如,Windows 安装中的 rabbitmqctl
将被命名为 rabbitmqctl.bat
。
其他工具
其他工具是可选的,可以从 GitHub 获取
rabbitmqadmin
v2用于通过HTTP API进行操作员任务rabbitmq-collect-env
用于收集相关的集群和环境信息以及服务器日志。此工具特定于 Linux 和类 UNIX 操作系统。
不同的工具涵盖不同的使用场景。例如,rabbitmqctl
通常仅供 RabbitMQ 管理员使用,因为它提供对节点的完全控制,包括虚拟主机、用户和权限管理、对节点数据的破坏性操作等等。
rabbitmqadmin
构建于 HTTP API 之上并使用不同的机制,并且仅要求HTTP API端口对外连接开放。
即使命令行工具随服务器一起提供,大多数命令可以用于操作远程节点。插件可以提供命令行命令,这些命令将被命令行工具发现,用于显式启用的插件。
系统和环境要求
RabbitMQ 命令行工具需要一个兼容的 Erlang/OTP版本已安装。
这些工具假定系统区域设置为 UTF-8 (例如 en_GB.UTF-8
或 en_US.UTF-8
)。如果不是这种情况,这些工具可能仍然可以正常运行,但这不能保证。在非 UTF-8 区域设置中将发出警告。
安装
除了 rabbitmqadmin
之外,上述所有工具都随 RabbitMQ 一起提供,并且可以在安装根目录下的 sbin
目录中找到。对于大多数软件包类型,该目录在安装时会添加到 PATH
中。这意味着诸如 rabbitmq-diagnostics
和 rabbitmqctl
之类的核心工具在每个安装了 RabbitMQ 的节点上都可用。
通用 UNIX 包用户必须确保安装根目录下的 sbin
目录已添加到 PATH
中,以便更简单地进行交互式使用。非交互式用例可以使用完整或相对路径,而无需修改 PATH
环境变量。
rabbitmqadmin
是一个独立的工具,它通过 GitHub 发布分发。
如果需要从远程节点进行交互,请下载并解压缩通用 UNIX 包或使用Windows 安装程序。
除了身份验证之外,核心命令行工具的所有配置都是可选的。
需要特定参数的命令会在用法部分列出它们,并在执行时报告任何缺少的参数。
使用 help 命令发现命令
要找出有哪些可用命令,请使用 help
命令
- bash
- PowerShell
rabbitmqctl help
rabbitmq-diagnostics help
rabbitmqctl.bat help
rabbitmq-diagnostics.bat help
该命令可以显示特定命令的用法信息
- bash
- PowerShell
rabbitmq-diagnostics help status
rabbitmqctl.bat help add_vhost
rabbitmq-diagnostics.bat help status
或者,可以使用 --help
选项
- bash
- PowerShell
rabbitmqctl --help
rabbitmq-diagnostics --help
rabbitmqctl.bat --help
rabbitmq-diagnostics.bat --help
包括用于单个命令
- bash
- PowerShell
rabbitmq-diagnostics status --help
rabbitmq-diagnostics.bat status --help
rabbitmqctl
rabbitmqctl 是随 RabbitMQ 提供的原始命令行工具。它支持广泛的操作,主要是管理(操作)性质的。
这包括
- 停止节点
- 访问节点状态、有效配置、健康检查
- 虚拟主机管理
- 用户和权限管理
- 策略管理
- 列出队列、连接、通道、交换器、消费者
- 集群成员管理
等等。
rabbitmqctl
使用共享密钥身份验证机制(如下所述)与服务器节点。
rabbitmq-queues
rabbitmq-queues 允许操作员管理复制队列的副本。它随 RabbitMQ 一起提供。
大多数命令仅支持在线模式(当目标节点正在运行时)。
rabbitmq-queues
使用共享密钥身份验证机制(如下所述)与服务器节点。
rabbitmq-streams
rabbitmq-streams 允许操作员管理流的副本。它随 RabbitMQ 一起提供。
大多数命令仅支持在线模式(当目标节点正在运行时)。
rabbitmq-streams
使用共享密钥身份验证机制(如下所述)与服务器节点。
rabbitmq-diagnostics
rabbitmq-diagnostics 是用于检查节点状态的主要工具。它有许多命令,允许操作员研究系统的各个方面。它随 RabbitMQ 一起提供。
它同时支持在线模式(当目标节点正在运行时)和离线模式(更改在节点重启时生效)。
rabbitmq-diagnostics
使用共享密钥身份验证机制(如下所述)与服务器节点。
rabbitmq-plugins
rabbitmq-plugins 是一个管理插件的工具:列出、启用和禁用它们。它随 RabbitMQ 一起提供。
它同时支持在线模式(当目标节点正在运行时)和离线模式(更改在节点重启时生效)。
rabbitmq-plugins
使用共享密钥身份验证机制(如下所述)与服务器节点。
rabbitmq-upgrade
rabbitmq-upgrade 是一个专门用于升级前、升级和升级后操作的工具。它随 RabbitMQ 一起提供。
大多数命令仅支持在线模式(当目标节点正在运行时)。
rabbitmq-upgrade
使用共享密钥身份验证机制(如下所述)与服务器节点。
离线模式
--offline
是由 rabbitmq-plugins
命令支持的标志。提供此标志后,该工具将避免联系目标节点,而是直接操作插件文件。
当 --offline
标志被使用时,该命令将依赖于环境变量以确定在哪里找到本地节点的插件目录。
例如,它将尊重并使用 RABBITMQ_PLUGINS_DIR
环境变量值,就像 RabbitMQ 节点一样。当 RABBITMQ_PLUGINS_DIR
为服务器节点覆盖时,它也必须为调用命令行工具的本地操作系统用户设置相同的值。
身份验证
除了 rabbitmqadmin
之外,RabbitMQ 工具使用共享密钥身份验证机制。这要求节点间和命令行界面通信端口(默认情况下)在目标节点上对外连接开放。
针对远程服务器节点使用命令行工具
命令行工具可以用于与远程节点以及本地节点进行通信。节点由节点名称标识。如果未指定节点名称,则 rabbit@{local hostname}
被假定为目标。当联系远程节点时,相同的身份验证要求适用。
要联系远程节点,请使用 --node
(-n
) 选项,该选项 rabbitmqctl
、rabbitmq-diagnostics
和其他核心命令行工具接受。以下示例联系节点 rabbit@remote-host.local
以找出其状态
rabbitmq-diagnostics status -n rabbit@remote-host.local
一些命令,例如
rabbitmq-diagnostics status
可以对任何节点使用。其他命令,例如
rabbitmqctl shutdown
或
rabbitmqctl wait
只能在其目标节点所在的同一主机或同一容器中运行。这些命令通常依赖于或修改本地环境中的某些内容,例如本地已启用插件文件。
节点名称
RabbitMQ 节点由节点名称标识。节点名称由两部分组成,前缀(通常为 rabbit
)和主机名。例如,rabbit@node1.messaging.svc.local
是一个节点名称,前缀为 rabbit
,主机名为 node1.messaging.svc.local
。
集群中的节点名称必须是唯一的。如果给定主机上运行了多个节点(这通常在开发和 QA 环境中是这种情况),则它们必须使用不同的前缀,例如 rabbit1@hostname
和 rabbit2@hostname
。
命令行工具使用节点名称识别和寻址服务器节点。大多数命令行界面命令是针对名为目标节点的节点调用的。要指定目标节点,请使用 --node
(-n
) 选项。例如,要在节点 rabbit@warp10.local
上运行健康检查
rabbitmq-diagnostics -n rabbit@warp10 check_alarms
某些命令接受目标节点和另一个节点名称。例如,rabbitmqctl forget_cluster_node
接受目标节点(将执行操作)和要删除的节点的名称。
在集群中,节点使用节点名称识别和相互联系。请参阅集群指南了解详情。
当节点启动时,它会检查是否已为其分配节点名称。这是通过 RABBITMQ_NODENAME
环境变量完成的。如果未显式配置任何值,则节点会解析其主机名并在其前面加上 rabbit
以计算其节点名称。
如果系统对主机名使用完全限定域名 (FQDN),则必须将 RabbitMQ 节点和命令行工具配置为使用所谓的长节点名称。对于服务器节点,这可以通过设置 RABBITMQ_USE_LONGNAME
环境变量为 true
来完成。
对于命令行工具,要么必须设置 RABBITMQ_USE_LONGNAME
,要么必须指定 --longnames
选项
# this example assumes that host1.messaging.eng.coolcorporation.banana is a hostname
# that successfully resolves
rabbitmq-diagnostics -n rabbit@host1.messaging.eng.coolcorporation.banana check_alarms --longnames
容器化环境中的注意事项
当 RabbitMQ 在容器中运行时,有两种常见的运行命令行工具的方法
- 在容器本身内执行,使用
docker exec
和类似的工具 - 转发相关的节点间通信端口并在主机上执行
使用这种方法可能会出现两个常见问题。
主机和容器之间共享密钥不匹配
当命令行工具在主机中运行时,本地共享密钥必须与容器中的密钥匹配。如果不是这种情况,命令行工具将无法进行身份验证,并且无法对目标节点执行任何操作。
共享密钥播种竞争条件
如果容器使用的共享密钥未预先播种,则必须允许节点启动,然后才能对其运行命令行命令
当命令行工具在主机上运行时,其中共享密钥未预先播种,并且在本地启动的 RabbitMQ 节点有机会创建 cookie 文件之前,它将创建一个令人困惑的情况,其中播种的密钥可能会在节点启动期间被覆盖。
结果,命令行工具可能无法进行身份验证,RabbitMQ 节点可能无法访问创建的文件,因此会因错误而停止,以及其他问题场景,这些场景源于密钥不匹配的事实。
选项和位置参数
RabbitMQ 命令行工具在很大程度上遵循现有的、长期建立的命令行参数解析约定。本节提供了一些示例,并侧重于边缘情况和鲜为人知的功能。
不同的命令接受不同的参数。有些是命名选项,例如 --node
(别名为 -n
),另一些是位置参数,例如用户名和密码参数,在
rabbitmqctl add_user <username> <password>
一个具体的例子
rabbitmqctl add_user "a-user" "a-pa$$w0rd"
选项可以在位置参数之前或之后提供,但有一个例外:双连字符(--
)后面的任何内容都将被视为位置参数
# all values after the double hyphen (--) will be treated as positional arguments,
# even if they begin with a hyphen or a double hyphen
rabbitmqctl add_user --node rabbit@host1.messaging.eng.coolcorporation.banana -- "a-user" "a-pa$$w0rd"
当位置参数以连字符或双连字符(例如生成的密码)开头时,必须使用显式位置参数分隔符,以确保它们不会被解析为选项
# Since "--!a-pa$$w0rd" is explicitly provided as a positional argument, it won't
# be mistakenly considered for an unsupported option, even though it starts with a double hyphen
rabbitmqctl add_user --node rabbit@host1.messaging.eng.coolcorporation.banana -- "a-user" "--!a-pa$$w0rd"
选项值可以作为 --option <value>
或 --option=<value>
传递。当值以连字符(-
)开头时,必须使用后一种变体,否则它将被视为选项
# an alternative way of providing an option value
rabbitmqctl add_user --node=rabbit@host1.messaging.eng.coolcorporation.banana -- "a-user" "a-pa$$w0rd"
rabbitmqctl
、rabbitmq-diagnostics
、rabbitmq-plugins
和 rabbitmq-queues
支持命令别名。
命令行工具如何向节点进行身份验证(以及节点如何相互验证):Erlang Cookie
RabbitMQ 节点和命令行工具(除了 rabbitmqadmin
)使用 cookie 来确定它们是否被允许相互通信。为了使命令行工具和节点能够通信,它们必须具有相同的共享密钥,称为 Erlang cookie。cookie 只是一个最多 255 个字符长的字母数字字符字符串。它通常存储在本地文件中。该文件必须仅对所有者可访问(例如,具有 UNIX 权限 600
或类似)。每个集群节点都必须具有相同的 cookie。
如果该文件不存在,则 Erlang VM 将在 RabbitMQ 服务器启动时自动创建一个具有随机生成值的 cookie。
Erlang cookie 的生成应在集群部署阶段完成,理想情况下使用自动化和编排工具。
Cookie 文件位置
Linux, MacOS, *BSD
在 UNIX 系统上,cookie 通常位于 /var/lib/rabbitmq/.erlang.cookie
(服务器使用)和 $HOME/.erlang.cookie
(命令行工具使用)。请注意,由于 $HOME
的值因用户而异,因此有必要为每个将使用命令行工具的用户放置一个 cookie 文件副本。这适用于非特权用户和 root
。
RabbitMQ 节点将在启动早期记录其有效用户的主目录位置。
社区 Docker 镜像和 Kubernetes
Docker 社区 RabbitMQ 镜像使用 RABBITMQ_ERLANG_COOKIE
环境变量值来填充 cookie 文件。
使用此镜像的配置管理和容器编排工具必须确保集群中的每个 RabbitMQ 节点容器都使用相同的值。
在 Kubernetes 的上下文中,该值必须在部署文件中指定。例如,这可以在RabbitMQ on Kubernetes 示例存储库中看到。
Windows
在 Windows 上,cookie 位置取决于几个因素
- 是否
HOMEDRIVE
和HOMEPATH
环境变量都已设置 - Erlang 版本:早于 20.2(这些不再受任何维护的 RabbitMQ 发布系列)或 20.2 及更高版本
Erlang 20.2 或更高版本
对于从 20.2 开始的 Erlang 版本,cookie 文件位置为
%HOMEDRIVE%%HOMEPATH%\.erlang.cookie
(通常为C:\Users\%USERNAME%\.erlang.cookie
,对于用户%USERNAME%
)如果HOMEDRIVE
和HOMEPATH
环境变量都已设置%USERPROFILE%\.erlang.cookie
(通常为C:\Users\%USERNAME%\.erlang.cookie
)如果HOMEDRIVE
和HOMEPATH
未同时设置- 对于 RabbitMQ Windows 服务 -
%USERPROFILE%\.erlang.cookie
(通常为C:\WINDOWS\system32\config\systemprofile
)
如果使用 Windows 服务,则应将 cookie 从 C:\Windows\system32\config\systemprofile\.erlang.cookie
复制到运行诸如 rabbitmqctl.bat
之类的命令的用户的预期位置。
使用命令行界面和运行时命令行参数覆盖
作为替代方案,选项 "-setcookie <value>
" 可以添加到 RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS
环境变量值以覆盖 RabbitMQ 节点使用的 cookie 值
RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="-setcookie cookie-value"
命令行工具可以使用命令行标志获取 cookie 值
rabbitmq-diagnostics status --erlang-cookie "cookie-value"
两者都是最不安全的选项,并且通常不推荐。
故障排除
命令行工具
从版本 3.8.6
开始,rabbitmq-diagnostics
包含一个命令,该命令提供有关命令行工具使用的 Erlang cookie 文件的相关信息
rabbitmq-diagnostics erlang_cookie_sources
该命令将报告有效用户、用户主目录以及 cookie 文件的预期位置
Cookie File
Effective user: antares
Effective home directory: /home/cli-user
Cookie file path: /home/cli-user/.erlang.cookie
Cookie file exists? true
Cookie file type: regular
Cookie file access: read
Cookie file size: 20
Cookie CLI Switch
--erlang-cookie value set? false
--erlang-cookie value length: 0
Env variable (Deprecated)
RABBITMQ_ERLANG_COOKIE value set? false
RABBITMQ_ERLANG_COOKIE value length: 0
服务器节点
当节点启动时,它将记录其有效用户的主目录位置
node : rabbit@cdbf4de5f22d
home dir : /var/lib/rabbitmq
除非任何服务器目录被覆盖,否则那就是将要查找 cookie 文件的目录,并且如果该文件尚不存在,则在首次启动时由节点创建。
在上面的示例中,cookie 文件位置将是 /var/lib/rabbitmq/.erlang.cookie
。
主机名解析
从RabbitMQ 3.8.6
开始,命令行工具提供了两个命令,可帮助验证节点上的主机名解析是否按预期工作。这些命令并非旨在取代dig
和其他专门的 DNS 工具,而是提供一种在考虑Erlang 运行时主机名解析器功能的同时执行最基本检查的方法。
这些命令在网络指南中介绍。
身份验证失败
当 cookie 配置错误(例如,不相同)时,RabbitMQ 节点将记录诸如 “Connection attempt from disallowed node”,“”,“Could not auto-cluster” 之类的错误。
例如,当命令行工具连接并尝试使用不匹配的密钥值进行身份验证时
2020-06-15 13:03:33 [error] <0.1187.0> ** Connection attempt from node 'rabbitmqcli-99391-rabbit@warp10' rejected. Invalid challenge reply. **
当诸如 rabbitmqctl
之类的命令行工具无法通过 RabbitMQ 身份验证时,消息通常会说
* epmd reports node 'rabbit' running on port 25672
* TCP connection succeeded but Erlang distribution failed
* suggestion: hostname mismatch?
* suggestion: is the cookie set correctly?
* suggestion: is the Erlang distribution using TLS?
这意味着从命令行工具到 RabbitMQ 节点的 TCP 连接成功,但身份验证尝试被服务器拒绝。该消息还提到了几个最常见的导致这种情况的原因,接下来将介绍这些原因。
可能原因 1:Cookie 文件位置错误或丢失
cookie 文件位置不正确或 cookie 值不匹配是此类故障的最常见情况。
RabbitMQ 节点在启动时记录其 cookie 哈希值。当命令行工具无法通过目标节点身份验证时,它们会打印其 cookie 哈希值。
当使用最新的 Erlang/OTP 版本时,身份验证失败包含更多信息,并且可以更好地识别 cookie 不匹配
rabbit@warp10:
* connected to epmd (port 4369) on warp10
* epmd reports node 'rabbit' running on port 25672
* TCP connection succeeded but Erlang distribution failed
* Authentication failed (rejected by the remote node), please check the Erlang cookie
current node details:
- node name: 'rabbitmq-cli-63@warp10'
- home dir: /home/username
- cookie hash: Sg08R8+G85EYHZ3H/9NUfg==
可能原因 2:节点名称类型不匹配
如果 RabbitMQ 节点配置为使用长节点名称 (RABBITMQ_USE_LONGNAME
导出为 true
),那么命令行工具也应该通过相同的环境变量或在 3.7.0 中引入的 --longnames
命令行标志。
可能原因 3:节点间连接需要 TLS
如果 RabbitMQ 设置为使用 TLS 加密节点间和命令行界面连接,则命令行工具也必须使用 TLS,因此需要其他选项。来自其他节点和命令行工具的非 TLS 连接将失败。
可能原因 4:主机名不匹配
其他原因包括目标 RabbitMQ 节点使用的节点名称与提供给命令行工具的节点名称(例如通过 -n
标志)中的主机名不匹配。例如,如果节点使用 rabbit@rmq1.eng.megacorp.local
作为其名称运行,但 rabbitmqctl
被调用为
rabbitmq-diagnostics status -n rabbit@rmq-dev.eng.megacorp.local
那么即使 rmq-dev.eng.megacorp.local
和 rmq1.eng.megacorp.local
解析为相同的 IP 地址,服务器也会拒绝 rabbitmqctl
的身份验证尝试。这种情况相对罕见。
当使用最新的 Erlang/OTP 版本时,身份验证失败包含更多信息,并且可以更好地识别主机名不匹配
rabbit@localhost:
* connected to epmd (port 4369) on localhost
* epmd reports node 'rabbit' running on port 25672
* TCP connection succeeded but Erlang distribution failed
* Hostname mismatch: node "rabbit@warp10" believes its host is different. Please ensure that hostnames resolve the same way locally and on "rabbit@warp10"
current node details:
- node name: 'rabbitmq-cli-30@warp10'
- home dir: /Users/antares
- cookie hash: Sg08R8+G85EYHZ3H/9NUfg==
其他可能原因
就像任何网络连接一样,命令行界面到节点的连接可能会由于以下原因而失败
- 主机名解析失败
- 不正确的 IP 路由
- TCP 端口访问被阻止(防火墙等)
等等。
RabbitMQ 网络指南包含有关网络相关问题故障排除的部分。
管理节点
获取节点状态
要检索节点状态,请使用 rabbitmq-diagnostics status
或 rabbitmq-diagnostics.bat status
带有可选的 --node
目标
- bash
- PowerShell
rabbitmq-diagnostics status
rabbitmq-diagnostics status --node rabbit@target-hostname.local
rabbitmq-diagnostics .bat status
rabbitmq-diagnostics .bat status --node rabbit@target-hostname.local
启动节点
RabbitMQ 节点的启动方式取决于使用的软件包类型
- 当在现代 Linux 发行版上使用 Debian 和 RPM 包时,节点由使用
systemd
管理 - 当使用 Windows 安装程序时,节点通常由Windows 服务管理器管理
- 当使用 Homebrew 公式时,节点由
brew services
管理 - 当使用通用 UNIX 构建或二进制 Windows 构建时,节点分别使用
sbin/rabbitmq-server
和sbin/rabbitmq-server.bat
启动,分别位于安装根目录中
停止节点
要停止节点,请考虑使用启动节点时使用的相同服务管理工具,这取决于安装 RabbitMQ 时使用的软件包类型。
要使用 RabbitMQ 命令行工具停止节点,请使用 rabbitmqctl shutdown
或 rabbitmqctl.bat shutdown
带有可选的 --node
目标
- bash
- PowerShell
rabbitmqctl shutdown
rabbitmqctl shutdown --node rabbit@target-hostname.local
rabbitmqctl.bat shutdown
rabbitmqctl.bat shutdown --node rabbit@target-hostname.local
rabbitmqadmin
rabbitmqadmin 是一个构建于RabbitMQ HTTP API之上的命令行工具。它不是 rabbitmqctl
的替代品,并且提供对管理 UI提供的最常用操作子集的访问。
rabbitmqadmin
使用 HTTP API 身份验证机制(基本 HTTP 身份验证)。
它是一个本机二进制文件,必须单独下载从 RabbitMQ 发行版。
“节点本地”和“集群范围”命令
客户端连接、通道和队列将分布在集群节点之间。操作员需要能够检查和监控所有集群节点上的此类资源。
诸如rabbitmqctl 和 rabbitmq-diagnostics
之类的命令行工具提供检查资源和集群范围状态的命令。有些命令侧重于单个节点的状态(例如 rabbitmq-diagnostics environment
和 rabbitmq-diagnostics status
),另一些命令检查集群范围的状态。后者的某些示例包括 rabbitmqctl list_connections
、rabbitmqctl list_mqtt_connections
、rabbitmqctl list_stomp_connections
、rabbitmqctl list_users
、rabbitmqctl list_vhosts
等等。
此类“集群范围”命令通常会先联系一个节点,发现集群成员并联系所有成员以检索和组合它们各自的状态。例如,rabbitmqctl list_connections
将联系所有节点,检索其 AMQP 0-9-1 和 AMQP 1.0 连接,并将它们全部显示给用户。用户不必手动联系所有节点。
假设集群的状态没有变化(例如,没有连接关闭或打开),则针对两个不同节点相继执行的两个命令行命令将产生相同或语义上相同的结果。但是,“节点本地”命令可能不会产生相同的结果,因为两个节点很少具有完全相同的状态。
插件提供的命令
RabbitMQ 插件可以提供命令行命令,这些命令将被诸如 rabbitmq-diagnostics
、rabbitmq-queues
、rabbitmqctl
和其他工具发现。为了使插件命令可被发现,插件必须显式启用。
执行命令发现时,命令行工具将查阅已启用插件文件以确定要扫描哪些插件以查找命令。如果插件未包含在该文件中,例如,因为它作为依赖项隐式启用,则它不会在已启用插件文件中列出,因此其命令行命令将不会被发现并且将不可用。
使用 help
命令查看有哪些可用命令,包括核心命令和插件提供的命令。
命令别名
rabbitmqctl
、rabbitmq-diagnostics
和 rabbitmq-plugins
支持命令别名。别名提供了一种定义某些命令及其参数缩写版本的方法。例如,与其输入 rabbitmqctl environment
,不如定义一个别名 rabbitmqctl env
,它会扩展为 rabbitmqctl environment
,这样可能更方便。
别名从通过 RABBITMQ_CLI_ALIASES_FILE
环境变量指定的文件加载
export RABBITMQ_CLI_ALIASES_FILE=/path/to/cli_aliases.conf
别名文件使用非常简化的 ini 风格 别名 = 命令
格式,例如
env = environment
st = status --quiet
lp = list_parameters --quiet
lq = list_queues --quiet
lu = list_users --quiet
cs = cipher_suites --openssl-format --quiet
有了这个别名文件,就可以使用
rabbitmqctl env
它会扩展为
rabbitmqctl environment
或
rabbitmqctl lq
它会扩展为
rabbitmqctl list_queues --quiet
上面的示例中的最后一个别名配置了一个 rabbitmq-diagnostics
命令
rabbitmq-diagnostics cs
它会扩展为
rabbitmq-diagnostics cipher_suites --openssl-format --quiet
所有工具都以相同的方式处理别名。只要扩展后的命令被识别,别名就可以与任何工具一起使用,甚至可以与多个工具一起使用。例如,rabbitmqctl
和 rabbitmq-diagnostics
都提供了 environment
命令,因此 env
别名对它们的作用完全相同
rabbitmq-diagnostics env
它会扩展为
rabbitmq-diagnostics environment
只有当调用的命令不是由工具提供时,才会查阅该文件。