rabbitmqadmin v2,一个用于 HTTP API 的命令行工具
rabbitmqadmin v2 是一个使用 HTTP API 的命令行工具。
它支持管理 UI 中的许多可用操作
- 列出对象(虚拟主机、用户、队列、流、权限、策略等)
- 创建对象
- 删除对象
- 访问集群和节点指标
- 运行 健康检查
- 列出 功能标志 状态
- 列出集群中使用的 已弃用功能
- 导出、转换和导入 定义
- 对 Shovel 的操作
- 对 Federation Upstreams 和链接的操作
- 关闭连接
- 在集群节点之间重新平衡队列领导者
请注意,rabbitmqadmin 不能替代 rabbitmqctl 或 rabbitmq-plugins,因为 HTTP API 有意不公开某些操作。
rabbitmqadmin v2
这一代的 rabbitmqadmin 是一个独立的项目,拥有自己的开发周期,独立于 RabbitMQ。
它以本地二进制文件的形式分发。
下载
x86-64 Linux、aarch64 Linux、aarch64 macOS 和 x86-64 Windows 的二进制文件通过 GitHub releases 分发。
用法
探索可用的命令组和子命令
要探索可用的命令组,请使用
rabbitmqadmin help
这将输出一个命令组列表
Usage: rabbitmqadmin [OPTIONS] <COMMAND>
Commands:
bindings Operations on bindings
channels Operations on channels
close Closes connections
connections Operations on connections
declare Creates or declares objects
definitions Operations on definitions (everything except for messages: virtual hosts, queues, streams, exchanges, bindings, users, etc)
delete Deletes objects
deprecated_features Operations on deprecated features
exchanges Operations on exchanges
export See 'definitions export'
feature_flags Operations on feature flags
federation Operations on federation upstreams and links
get Fetches message(s) from a queue or stream via polling. Only suitable for development and test environments.
global_parameters Operations on global runtime parameters
health_check Runs health checks
import See 'definitions import'
list Lists objects
nodes Node operations
operator_policies Operations on operator policies
parameters Operations on runtime parameters
passwords Operations on passwords
policies Operations on policies
publish Publishes (inefficiently) message(s) to a queue or a stream. Only suitable for development and test environments.
purge Purges queues
queues Operations on queues
rebalance Rebalancing of leader replicas
show Overview, memory footprint breakdown, and more
shovels Operations on shovels
streams Operations on streams
tanzu Tanzu RabbitMQ-specific commands
users Operations on users
vhosts Virtual host operations
help Print this message or the help of the given subcommand(s)
要探索特定组中的命令,请使用
rabbitmqadmin {group name} help
使用 help、--help 探索 CLI
要了解可用的命令组和特定命令,请运行
rabbitmqadmin help
此标志可以附加到命令或子命令,以获取特定于命令的文档
rabbitmqadmin queues declare --help
# => creates or declares things
# =>
# => Usage: rabbitmqadmin declare [object]
# => ...
或者,可以使用 help 子命令后跟命令名。这相当于在命令名后添加 --help
rabbitmqadmin queues help declare
# => creates or declares things
# =>
# => Usage: rabbitmqadmin declare [object]
# => ...
更具体的示例将在下面的“示例”部分介绍。
交互式 vs. 脚本使用
与原始版本一样,rabbitmqadmin v2 首先是为人类交互式使用而构建的。许多命令将输出格式化表格,例如
rabbitmqadmin show overview
将输出一个如下所示的表格
┌───────────────────────────────────────────────────────────────────┬─────────────────────────────────────────────────────────────────────────────────────────────────┐
│ Overview │
├───────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────┤
│ key │ value │
├───────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Product name │ RabbitMQ │
├───────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Product version │ 4.1.4 │
├───────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────┤
│ RabbitMQ version │ 4.1.4 │
├───────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Erlang version │ 27.3.4 │
├───────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Erlang details │ Erlang/OTP 27 [erts-15.2.7] [source] [64-bit] [smp:10:10] [ds:10:10:10] [async-threads:1] [jit] │
├───────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Connections (total) │ 0 │
├───────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────┤
│ AMQP 0-9-1 channels (total) │ 0 │
├───────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Queues and streams (total) │ 1 │
├───────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Consumers (total) │ 0 │
├───────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Messages (total) │ 0 │
├───────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Messages ready for delivery (total) │ 0 │
├───────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Messages delivered but unacknowledged by consumers (total) │ 0 │
├───────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Publishing (ingress) rate (global) │ │
├───────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Publishing confirm rate (global) │ │
├───────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Consumer delivery (egress) rate (global) │ │
├───────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Consumer delivery in automatic acknowledgement mode rate (global) │ │
├───────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Consumer acknowledgement rate (global) │ │
├───────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Unroutable messages: returned-to-publisher rate (global) │ │
├───────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Unroutable messages: dropped rate (global) │ │
├───────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Cluster tags │ "core": "8" │
│ │ "env": "development" │
│ │ "machine": "X8Y33L97DQ" │
│ │ │
├───────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Node tags │ "environment": "production" │
│ │ "purpose": "iot_ingress" │
│ │ "region": "ca-central-1" │
│ │ "series": "4.1.x" │
│ │ │
└───────────────────────────────────────────────────────────────────┴─────────────────────────────────────────────────────────────────────────────────────────────────┘
正如可以轻易观察到的,在脚本中解析此类输出将是困难的。
因此,如果传递了 --non-interactive 标志,rabbitmqadmin v2 可以以一种对脚本编写更友好的方式呈现结果。这是一个全局标志,因此必须在命令和子命令名称之前传递
rabbitmqadmin --non-interactive show overview
上述命令的输出将不包含任何表格边框,因此更容易解析
key
Product name RabbitMQ
Product version 4.1.4
RabbitMQ version 4.1.4
Erlang version 27.3.4
Erlang details Erlang/OTP 27 [erts-15.2.7] [source] [64-bit] [smp:10:10] [ds:10:10:10] [async-threads:1] [jit]
检索基本节点信息
rabbitmqadmin show overview
将以表格形式显示基本节点信息。
检索连接、队列/流、通道的突发信息
有助于评估集群中的连接、队列/流、通道 突发指标。
rabbitmqadmin show churn
列出集群节点
rabbitmqadmin nodes list
列出虚拟主机
rabbitmqadmin vhosts list
列出用户
rabbitmqadmin users list
创建用户
rabbitmqadmin users declare --name "a-user" --password "secure-password" --tags "monitoring,policymaker"
# Create user with password hash (recommended)
# Use 'rabbitmqadmin passwords salt_and_hash "my-password"' to generate the hash
rabbitmqadmin users declare --name "a-user" --password-hash "$2b$12$abcdefghijklmnopqrstuvwxyz" --tags "administrator"
删除用户
rabbitmqadmin users delete --name "a-user"
# Idempotent deletion (does not fail if the user doesn't exist)
rabbitmqadmin users delete --name "a-user" --idempotently
列出用户权限
有关权限的更多信息,请参阅 访问控制指南。
# List permissions for all users
rabbitmqadmin users permissions
授予用户权限
有关授予权限的更多信息,请参阅 访问控制指南。
# Grant permissions to a user for a virtual host
rabbitmqadmin --vhost "events" declare permissions --user "a-user" --configure ".*" --read ".*" --write ".*"
# Grant limited permissions (read-only for specific queues)
rabbitmqadmin --vhost "events" declare permissions --user "monitoring" --configure "" --read "^metrics\\..*" --write ""
撤销用户权限
有关权限的更多信息,请参阅 访问控制指南。
# Revoke all permissions for a user in a virtual host
rabbitmqadmin --vhost "events" delete permissions --user "a-user"
# Idempotent revocation (does not fail if permissions don't exist)
rabbitmqadmin --vhost "events" delete permissions --user "a-user" --idempotently
列出用户连接
# List connections for a specific user
rabbitmqadmin users connections --name "a-user"
列出队列
rabbitmqadmin queues list
rabbitmqadmin --vhost "monitoring" queues list
列出交换机
rabbitmqadmin exchanges list
rabbitmqadmin --vhost "events" exchanges list
列出绑定
rabbitmqadmin bindings list
rabbitmqadmin --vhost "events" bindings list
将队列绑定到交换机
rabbitmqadmin --vhost "events" bindings declare --source "events.topic" --destination-type "queue" --destination "target.queue" --routing-key "events.order.created"
将源交换机绑定到目标交换机
rabbitmqadmin --vhost "events" bindings declare --source "events.topic" --destination-type "exchange" --destination "events.fanout" --routing-key "events.*"
删除绑定
rabbitmqadmin --vhost "events" bindings delete --source "events.topic" --destination-type "queue" --destination "target.queue" --routing-key "events.order.created"
创建虚拟主机
rabbitmqadmin vhosts declare --name "vh-789" --default-queue-type "quorum" --description "Used to reproduce issue #789"
删除虚拟主机
rabbitmqadmin vhosts delete --name "vh-789"
# --idempotently means that 404 Not Found responses will not be considered errors
rabbitmqadmin vhosts delete --name "vh-789" --idempotently
删除多个虚拟主机
这是一个极其破坏性的操作,必须极其小心地使用。
此命令将删除与提供的正则表达式匹配的所有虚拟主机。这些虚拟主机中的所有数据将永久丢失,包括
- 队列、流和分区流
- 交换器和绑定
- 消息
- 用户权限
- Federation Upstreams 和链接
- Shovels
- 策略和操作员策略
- 运行时参数
始终先使用 --dry-run 验证将要删除的内容,然后再执行实际删除。
# ALWAYS run with --dry-run first to see what would be deleted
rabbitmqadmin vhosts delete_multiple --name-pattern "^test-.*" --dry-run
# After verifying with --dry-run, use --approve to perform the actual deletion
# This will delete ALL virtual hosts whose names start with "test-"
rabbitmqadmin vhosts delete_multiple --name-pattern "^test-.*" --approve
默认虚拟主机 (/) 始终保留,即使它匹配模式,也不会被此命令删除。
启用虚拟主机删除保护
虚拟主机删除保护可防止虚拟主机被意外删除。这对于保护关键生产虚拟主机非常有用。
有关删除保护的更多信息,请参阅 虚拟主机指南。
# Enable deletion protection for a virtual host
rabbitmqadmin vhosts enable_deletion_protection --name "production"
# Enable deletion protection for multiple critical virtual hosts
rabbitmqadmin vhosts enable_deletion_protection --name "production"
rabbitmqadmin vhosts enable_deletion_protection --name "staging"
禁用虚拟主机删除保护
有关删除保护的更多信息,请参阅 虚拟主机指南。
# Disable deletion protection for a virtual host
rabbitmqadmin vhosts disable_deletion_protection --name "production"
列出虚拟主机限制
# List limits for all virtual hosts
rabbitmqadmin list vhost_limits
# List limits for a specific virtual host
rabbitmqadmin --vhost "events" list vhost_limits
设置虚拟主机限制
# Set a limit on maximum number of connections
rabbitmqadmin --vhost "events" declare vhost_limit --name "max-connections" --value 100
# Set a limit on maximum number of queues
rabbitmqadmin --vhost "events" declare vhost_limit --name "max-queues" --value 500
删除虚拟主机限制
rabbitmqadmin --vhost "events" delete vhost_limit --name "max-connections"
列出用户限制
# List limits for a specific user
rabbitmqadmin list user_limits --user "a-user"
设置用户限制
# Set a limit on maximum number of connections for a user
rabbitmqadmin declare user_limit --user "a-user" --name "max-connections" --value 10
# Set a limit on maximum number of channels for a user
rabbitmqadmin declare user_limit --user "a-user" --name "max-channels" --value 50
删除用户限制
rabbitmqadmin delete user_limit --user "a-user" --name "max-connections"
声明一个队列
rabbitmqadmin --vhost "events" queues declare --name "target.quorum.queue.name" --type "quorum" --durable true
rabbitmqadmin --vhost "events" queues declare --name "target.stream.name" --type "stream" --durable true
rabbitmqadmin --vhost "events" queues declare --name "target.classic.queue.name" --type "classic" --durable true --auto-delete false
列出流
rabbitmqadmin streams list
# List streams in a specific virtual host
rabbitmqadmin --vhost "events" streams list
声明一个流
rabbitmqadmin --vhost "events" streams declare --name "events.stream" --max-age "3D"
删除一个流
rabbitmqadmin --vhost "events" streams delete --name "events.stream"
清空一个队列
rabbitmqadmin --vhost "events" queues purge --name "target.queue.name"
删除一个队列
rabbitmqadmin --vhost "events" queues delete --name "target.queue.name"
# --idempotently means that 404 Not Found responses will not be considered errors
rabbitmqadmin --vhost "events" queues delete --name "target.queue.name" --idempotently
声明一个交换机
rabbitmqadmin --vhost "events" exchanges declare --name "events.all_types.topic" --type "topic" --durable true
rabbitmqadmin --vhost "events" exchanges declare --name "events.all_type.uncategorized" --type "fanout" --durable true --auto-delete false
rabbitmqadmin --vhost "events" exchanges declare --name "local.random.c60bda92" --type "x-local-random" --durable true
删除一个交换机
rabbitmqadmin --vhost "events" exchanges delete --name "target.exchange.name"
# --idempotently means that 404 Not Found responses will not be considered errors
rabbitmqadmin --vhost "events" exchanges delete --name "target.exchange.name" --idempotently
列出连接
rabbitmqadmin connections list
# List connections for a specific virtual host
rabbitmqadmin --vhost "events" connections list
关闭一个连接
rabbitmqadmin connections close --name "127.0.0.1:5672 -> 127.0.0.1:59876"
关闭用户的所有连接
rabbitmqadmin users close_connections --name "a-user"
列出通道
rabbitmqadmin channels list
# List channels in a specific virtual host
rabbitmqadmin --vhost "events" channels list
列出消费者
rabbitmqadmin consumers list
# List consumers in a specific virtual host
rabbitmqadmin --vhost "events" consumers list
检查节点内存明细
有两个命令可用于分析目标 节点的内存占用
# displays a breakdown in bytes
rabbitmqadmin show memory_breakdown_in_bytes --node 'rabbit@hostname'
# displays a breakdown in percent
rabbitmqadmin show memory_breakdown_in_percent --node 'rabbit@hostname'
show memory_breakdown_in_percent 的示例输出
┌────────────────────────────────────────┬────────────┐
│ key │ percentage │
├────────────────────────────────────────┼────────────┤
│ total │ 100% │
├────────────────────────────────────────┼────────────┤
│ Binary heap │ 45.10% │
├────────────────────────────────────────┼────────────┤
│ Allocated but unused │ 23.45% │
├────────────────────────────────────────┼────────────┤
│ Quorum queue ETS tables │ 23.05% │
├────────────────────────────────────────┼────────────┤
│ Other processes │ 5.32% │
├────────────────────────────────────────┼────────────┤
│ Other (used by the runtime) │ 4.98% │
├────────────────────────────────────────┼────────────┤
│ Code │ 4.54% │
├────────────────────────────────────────┼────────────┤
│ Client connections: others processes │ 3.64% │
├────────────────────────────────────────┼────────────┤
│ Management stats database │ 3.48% │
├────────────────────────────────────────┼────────────┤
│ Client connections: reader processes │ 3.22% │
├────────────────────────────────────────┼────────────┤
│ Plugins and their data │ 3.12% │
├────────────────────────────────────────┼────────────┤
│ Other (ETS tables) │ 1.55% │
├────────────────────────────────────────┼────────────┤
│ Metrics data │ 0.66% │
├────────────────────────────────────────┼────────────┤
│ AMQP 0-9-1 channels │ 0.40% │
├────────────────────────────────────────┼────────────┤
│ Message store indices │ 0.27% │
├────────────────────────────────────────┼────────────┤
│ Atom table │ 0.24% │
├────────────────────────────────────────┼────────────┤
│ Client connections: writer processes │ 0.19% │
├────────────────────────────────────────┼────────────┤
│ Quorum queue replica processes │ 0.10% │
├────────────────────────────────────────┼────────────┤
│ Stream replica processes │ 0.07% │
├────────────────────────────────────────┼────────────┤
│ Mnesia │ 0.02% │
├────────────────────────────────────────┼────────────┤
│ Metadata store │ 0.02% │
├────────────────────────────────────────┼────────────┤
│ Stream coordinator processes │ 0.02% │
├────────────────────────────────────────┼────────────┤
│ Classic queue processes │ 0.00% │
├────────────────────────────────────────┼────────────┤
│ Metadata store ETS tables │ 0.00% │
├────────────────────────────────────────┼────────────┤
│ Stream replica reader processes │ 0.00% │
├────────────────────────────────────────┼────────────┤
│ Reserved by the kernel but unallocated │ 0.00% │
└────────────────────────────────────────┴────────────┘
请注意,计算节点的内存占用有 两种不同的支持策略。rabbitmqadmin 在计算每个类别的百分比时将使用较大的值作为 100%。
影响百分比值精度的其他因素包括 运行时分配器 的行为细微之处以及 内核页面缓存。
列出功能标志及其状态
rabbitmqadmin feature_flags list
启用功能标志
rabbitmqadmin feature_flags enable rabbitmq_4.0.0
启用所有稳定的功能标志
rabbitmqadmin feature_flags enable_all
列出集群中使用的已弃用功能
rabbitmqadmin deprecated_features list_used
列出所有已弃用功能
rabbitmqadmin deprecated_features list
导出定义
要将 定义 导出到标准输出,请使用 definitions export --stdout
rabbitmqadmin definitions export --stdout
要将定义导出到文件,请使用 definitions export --file /path/to/definitions.file.json
rabbitmqadmin definitions export --file /path/to/definitions.file.json
导出和转换定义
definitions export 可以转换从目标节点获取的导出的 JSON 定义文件。这通过对导出的 JSON 文件应用一个或多个转换来实现。
这对于删除 3.13.x 节点定义的经典队列镜像相关键(如 ha-mode)或者混淆用户名和密码,或者完全排除某些定义文件部分非常有用。
要指定要应用的转换,请使用 --transformations 选项,它接受一个由逗号分隔的支持的操作名称列表。
下表解释了可用的转换及其作用
| 转换名称 | 描述 |
|---|---|
strip_cmq_keys_from_policies | 删除所有经典队列镜像相关的键(例如 ha-mode)从所有导出的策略中。必须紧接着 drop_empty_policies 来删除在移除所有经典队列镜像相关键后变为空(因此在导入时无效)的策略。 |
drop_empty_policies | 在 strip_cmq_keys_from_policies 之后使用,以删除在移除所有经典队列镜像相关键后变为空(因此在导入时无效)的策略。 |
obfuscate_usernames | 将用户名和密码替换为占位符值。 对于用户名,使用的值是: obfuscated-username-1、obfuscated-username-2 等。对于密码,生成的值是: password-1、password-2 等。此转换会一致地更新用户和权限部分。 |
exclude_users | 从结果中删除所有用户。通常与 exclude_permissions 一起使用。 |
exclude_permissions | 从结果中删除所有权限。通常与 exclude_users 一起使用。 |
exclude_runtime_parameters | 从结果中删除所有运行时参数(包括 Tanzu RabbitMQ 中的 Federation Upstreams、Shovels、WSR 和 SDS 设置)。 |
exclude_policies | 从结果中删除所有策略。 |
no_op | 无操作。可用于动态计算的转换列表的默认值,例如在脚本中。 |
以下命令应用了两个名为 strip_cmq_keys_from_policies 和 drop_empty_policies 的转换,它们将删除 RabbitMQ 3.13 节点支持的所有经典队列镜像相关的策略键,然后删除没有剩余键(定义为空)的策略。
# strips classic mirrored queue-related policy keys from the exported definitions, then prints them
# to the standard output stream
rabbitmqadmin definitions export --stdout --transformations strip_cmq_keys_from_policies,drop_empty_policies
以下示例导出不包含用户和权限的定义。
# removes users and user permissions from the exported definitions, then prints them
# to the standard output stream
rabbitmqadmin definitions export --stdout --transformations exclude_users,exclude_permissions
要导出用户名被替换为占位符值的定义(用户名:obfuscated-username-1、obfuscated-username-2 等;密码:password-1、password-2 等),请使用 obfuscate_usernames 转换。
rabbitmqadmin definitions export --file /path/to/definitions.file.json --transformations obfuscate_usernames
导入定义
要从标准输入导入定义,请使用 definitions import --stdin
cat /path/to/definitions.file.json | rabbitmqadmin definitions import --stdin
要从文件导入定义,请使用 definitions import --file /path/to/definitions.file.json
rabbitmqadmin definitions import --file /path/to/definitions.file.json
声明 AMQP 0-9-1 Shovel
要声明一个使用 AMQP 0-9-1 作为源和目标的 动态 Shovel,请使用 shovels declare_amqp091。
rabbitmqadmin shovels declare_amqp091 --name my-amqp091-shovel \
--source-uri amqp://username:s3KrE7@source.hostname:5672 \
--destination-uri amqp://username:s3KrE7@source.hostname:5672 \
--ack-mode "on-confirm" \
--source-queue "src.queue" \
--destination-queue "dest.queue" \
--predeclared-source false \
--predeclared-destination false
声明 AMQP 1.0 Shovel
要声明一个使用 AMQP 1.0 作为源和目标的 动态 Shovel,请使用 shovels declare_amqp10。
请注意
- 对于 AMQP 1.0 Shovel,URI 中的凭据是必需的(没有默认值)。
- 对于 AMQP 1.0 Shovel,拓扑必须预先声明(相当于 AMQP 0-9-1 Shovel 的
--predeclared-source true和--predeclared-destination true)。 - AMQP 1.0 Shovel 应使用 AMQP 1.0 地址 v2。
rabbitmqadmin shovels declare_amqp10 --name my-amqp1.0-shovel \
--source-uri "amqp://username:s3KrE7@source.hostname:5672?hostname=vhost:src-vhost" \
--destination-uri "amqp://username:s3KrE7@source.hostname:5672?hostname=vhost:dest-vhost" \
--ack-mode "on-confirm" \
--source-address "/queues/src.queue" \
--destination-address "/queues/dest.queue"
列出 Shovels
要列出所有虚拟主机中的 Shovel,请使用 shovels list_all。
rabbitmqadmin shovels list_all
删除 Shovel
要删除 Shovel,请使用 shovels delete --name。
rabbitmqadmin shovels delete --name my-amqp091-shovel
列出 Federation Upstreams
要列出所有虚拟主机中的 Federation Upstreams,请使用 federation list_all_upstreams。
rabbitmqadmin federation list_all_upstreams
为 Exchange Federation 创建 Federation Upstream
要创建 Federation Upstream,请使用 federation declare_upstream_for_exchanges。此命令提供了一组精简的选项,仅包含与 Exchange Federation 特别相关的选项。
rabbitmqadmin --vhost "local-vhost" federation declare_upstream_for_exchanges --name "pollux" \
--uri "amqp://pollux.eng.megacorp.local:5672/remote-vhost" \
--ack-mode 'on-publish' \
--prefetch-count 2000 \
--exchange-name "overridden.name" \
--queue-type quorum \
--bind-using-nowait true
为 Queue Federation 创建 Federation Upstream
要创建 Federation Upstream,请使用 federation declare_upstream_for_queues。此命令提供了一组精简的选项,仅包含与 Queue Federation 特别相关的选项。
rabbitmqadmin --vhost "local-vhost" federation declare_upstream_for_queues --name "clusters.sirius" \
--uri "amqp://sirius.eng.megacorp.local:5672/remote-vhost" \
--ack-mode 'on-publish' \
--prefetch-count 2000 \
--queue-name "overridden.name" \
--consumer-tag "overriden.ctag"
创建通用 Federation Upstream
要创建将用于(或可以用于)Federation 队列和交换机的 Federation Upstream,请使用 federation declare_upstream。它结合了 所有 Federation 选项,即 declare_upstream_for_queues 和 declare_upstream_for_exchanges 的选项。
rabbitmqadmin --vhost "local-vhost" federation declare_upstream --name "pollux" \
--uri "amqp://pollux.eng.megacorp.local:5672/remote-vhost" \
--ack-mode 'on-publish' \
--prefetch-count 2000 \
--queue-name "overridden.name" \
--consumer-tag "overriden.ctag" \
--exchange-name "overridden.name" \
--queue-type quorum \
--bind-using-nowait true
删除 Federation Upstream
要删除 Federation Upstream,请使用 'federation delete_upstream',它需要虚拟主机和 upstream 名称。
rabbitmqadmin --vhost "local-vhost" federation delete_upstream --name "upstream.to.delete"
列出 Federation 链接
要列出所有虚拟主机中的所有 Federation 链接,请使用 federation list_all_links。
rabbitmqadmin federation list_all_links
重新平衡队列领导者
要 重新平衡集群节点之间的 Quorum 队列 领导者,请使用 rebalance queues。此操作有助于在集群节点之间更均匀地分布队列领导者,从而根据工作负载更均匀地分布负载并提高资源利用率。
# Rebalance queue leaders in the default virtual host (/)
rabbitmqadmin rebalance queues
# Rebalance queue leaders in a specific virtual host
rabbitmqadmin --vhost "production" rebalance queues
此操作是异步的,可能需要一些时间才能完成,具体取决于集群中的队列数量。请监控 RabbitMQ 日志以获取完成状态。
检查目标端点(用于故障排除)
使用 show endpoint 显示计算出的 HTTP API 端点 URI。
rabbitmqadmin show endpoint
此命令有助于验证 rabbitmqadmin 是否正在定位正确的 RabbitMQ HTTP API 端点,例如,当存在 rabbitmqadmin.conf 文件或环境变量可能在环境中设置时。
健康检查
rabbitmqadmin 提供各种 健康检查 命令。
# Check for local resource alarms on the target node
rabbitmqadmin health_check local_alarms
# Check for resource alarms across the entire cluster
rabbitmqadmin health_check cluster_wide_alarms
# Check if node is quorum critical (queues/streams would lose quorum if node shuts down)
rabbitmqadmin health_check node_is_quorum_critical
# Check for deprecated features in use across the cluster
rabbitmqadmin health_check deprecated_features_in_use
# Verify TCP listener is reachable on specific port
rabbitmqadmin health_check port_listener --port 5672
# Verify TCP listener is reachable for specific protocol
rabbitmqadmin health_check protocol_listener --protocol amqp091
这些健康检查对于监视脚本和自动化的集群健康验证非常有用。
TLS 配置
rabbitmqadmin 支持连接到使用 TLS 进行 HTTP API 的 RabbitMQ 集群。
# Connect using TLS with default settings
rabbitmqadmin --use-tls show overview
# Connect using TLS with custom CA certificate bundle
rabbitmqadmin --use-tls --tls-ca-cert-file /path/to/ca-bundle.pem show overview
# Connect using TLS with client certificate authentication
rabbitmqadmin --use-tls \
--tls-ca-cert-file /path/to/ca-bundle.pem \
--tls-cert-file /path/to/client-cert.pem \
--tls-key-file /path/to/client-key.pem \
show overview
# Disable TLS peer verification (not recommended for production)
rabbitmqadmin --use-tls --disable-tls-peer-verification show overview
密码哈希
rabbitmqadmin 可以生成与 RabbitMQ 密码哈希 系统兼容的密码哈希。
# Hash a password using SHA256 (default)
rabbitmqadmin passwords salt_and_hash "my-secret-password"
# Override --hashing-algorithm if RabbitMQ nodes are configured to use SHA512
rabbitmqadmin passwords salt_and_hash "my-secret-password" --hashing-algorithm SHA512
这对于预先计算用户管理脚本的密码哈希或处理 RabbitMQ 定义文件时很有用。
列出策略
rabbitmqadmin policies list
# List policies in a specific virtual host
rabbitmqadmin --vhost "events" policies list_in
创建策略
# Create a queue policy for high availability
rabbitmqadmin --vhost "events" policies declare --name "ha-all" --pattern ".*" --definition '{"ha-mode":"all","ha-sync-mode":"automatic"}' --priority 1
# Create a TTL policy for temporary queues
rabbitmqadmin --vhost "events" policies declare --name "temp-queues" --pattern "temp\\..*" --definition '{"message-ttl":300000,"expires":600000}' --priority 2
删除策略
rabbitmqadmin --vhost "events" policies delete --name "ha-all"
列出匹配对象的策略
# Show which policies apply to a specific queue
rabbitmqadmin --vhost "events" policies list_matching_object --name "my.queue" --type "queue"
列出操作员策略
rabbitmqadmin operator_policies list
# List operator policies in a specific virtual host
rabbitmqadmin --vhost "events" operator_policies list_in
创建操作员策略
# Create an operator policy to set max queue length
rabbitmqadmin --vhost "events" operator_policies declare --name "queue.max-length" --pattern ".*" --definition '{"max-length":10000}' --priority 1
删除操作员策略
rabbitmqadmin --vhost "events" operator_policies delete --name "queue.max-length"
列出运行时参数
rabbitmqadmin parameters list_all
# List parameters in a specific virtual host
rabbitmqadmin --vhost "events" parameters list
设置运行时参数
# Set a runtime parameter
# Note: for federation upstreams and shovels, use the dedicated 'federation' and 'shovels' command groups instead
rabbitmqadmin --vhost "events" parameters set --name "my-param" --component "my-component" --value '{"key":"value"}'
清除运行时参数
# Clear (delete) a runtime parameter
# Note: for federation upstreams and shovels, use the dedicated 'federation' and 'shovels' command groups instead
rabbitmqadmin --vhost "events" parameters clear --name "my-param" --component "my-component"
# Idempotent deletion (does not fail if the parameter doesn't exist)
rabbitmqadmin --vhost "events" parameters clear --name "my-param" --component "my-component" --idempotently
列出全局参数
rabbitmqadmin global_parameters list
设置全局运行时参数
# Set a global runtime parameter
rabbitmqadmin global_parameters set --name "cluster_name" --value '"production-cluster"'
清除全局运行时参数
# Clear (delete) a global runtime parameter
rabbitmqadmin global_parameters clear --name "cluster_name"
# Idempotent deletion (does not fail if the parameter doesn't exist)
rabbitmqadmin global_parameters clear --name "cluster_name" --idempotently
子命令和长选项推断
此功能目前仅在 main 分支上可用。
如果未将 RABBITMQADMIN_NON_INTERACTIVE_MODE 设置为 true,则此工具现在可以推断子命令和 --long-option 名称。
这意味着子命令可以通过其唯一前缀来引用,即:
- 'queues del' 将被推断为 'queues delete'
- 'q del --nam "a.queue"' 将被推断为 'queues delete --name "a.queue"'
要启用每个功能,请将以下环境变量设置为“true”
RABBITMQADMIN_INFER_SUBCOMMANDSRABBITMQADMIN_INFER_LONG_OPTIONS
此功能仅用于交互式使用。对于非交互式使用,可能允许它过于危险。
配置文件
rabbitmqadmin v2 支持基于 TOML 的配置文件,将 HTTP API 连接设置组存储在别名下(在原始 rabbitmqadmin 的术语中为“节点名称”)。
这是一个 rabbitmqadmin v2 配置文件示例
[local]
hostname = "localhost"
port = 15672
username = "lolz"
password = "lolz"
vhost = '/'
[staging]
hostname = "192.168.20.31"
port = 15672
username = "staging-2387a72329"
password = "staging-1d20cfbd9d"
[production]
hostname = "(redacted)"
port = 15671
username = "user-2ca6bae15ff6b79e92"
password = "user-92ee4c479ae604cc72"
在命令行中指定 --hostname 或 --username 来连接到名为 staging 的集群(或特定节点)而不是,可以指定一个 --node 别名。
# will use the settings from the section called [staging]
rabbitmqadmin --node staging show churn
默认配置文件路径为 $HOME/.rabbitmqadmin.conf,与原始版本的 rabbitmqadmin 相同。它可以在命令行中覆盖。
# will use the settings from the section called [staging]
rabbitmqadmin --config $HOME/.configuration/rabbitmqadmin.conf --node staging show churn
与 v1 相比的破坏性或潜在破坏性更改
已删除一些非必要功能
rabbitmqadmin v2 不支持
- 结果排序。改为使用
--non-interactive并解析空格分隔的输出。许多现代数据处理工具将其解析为表格、排序数据集、过滤结果等。事实上,这些数据处理功能在某些 shell 中已经可用。 - 列选择。此功能可能会重新引入。
- 任意命令的 JSON 输出(
definitions命令除外)。如果需要处理 JSON,请直接使用 HTTP API。 - 任意命令的 CSV 输出。此格式可能会重新引入。
--snake-case 用于命令选项
rabbitmqadmin v1 使用 lower_case 作为命名的命令参数,例如:
# Note: auto_delete
rabbitmqadmin-v1 --vhost "vh-2" queues declare name="qq.1" type="quorum" durable=true auto_delete=false
rabbitmqadmin v2 对相同的参数使用更典型的 --snake-case 格式。
# Note: --auto-delete
rabbitmqadmin --vhost "vh-2" queues declare --name "qq.1" --type "quorum" --durable true --auto-delete false
全局参数在前
rabbitmqadmin v2 中的全局标志必须放在命令类别(例如 list)和命令本身之前,即各种 HTTP API 端点选项和 --vhost。
rabbitmqadmin --vhost "events" queues declare --name "target.quorum.queue.name" --type "quorum" --durable true
--prefix 覆盖 API 路径前缀
在 rabbitmqadmin v1 中,--path-prefix 附加到默认的 API 路径前缀。在此版本中,传递给 --path-prefix 的值将按原样使用,换句话说,它将替换默认前缀 /api。
配置文件格式已移至 TOML
rabbitmqadmin v1 支持 ini 配置文件,允许用户在名称下对多个命令行值进行分组,例如集群或节点昵称。
由于 rabbitmqadmin v1 的“除 Python 外无其他依赖”的设计目标,此功能并未得到真正测试,并且特定语法(ini 文件,由 Python 的 ConfigParser 支持)的 linting、解析或生成工具实际上并不存在。
rabbitmqadmin v2 用 TOML 替换了此格式,TOML 是一种流行的配置标准,具有 验证和 linting 工具,以及一个非常成熟的解析器,该解析器完全不特定于 rabbitmqadmin v2。
这是一个 rabbitmqadmin v2 配置文件示例
[local]
hostname = "localhost"
port = 15672
username = "lolz"
password = "lolz"
vhost = '/'
[staging]
hostname = "192.168.20.31"
port = 15672
username = "staging-2387a72329"
password = "staging-1d20cfbd9d"
[production]
hostname = "(redacted)"
port = 15671
username = "user-efe1f4d763f6"
password = "(redacted)"
rabbitmqadmin v1
rabbitmqadmin v1 是用于 HTTP API 的原始 CLI 工具,历史上作为 管理插件 的一部分开发并随其一起分发。
它不再积极开发。
获取 rabbitmqadmin v1
考虑切换到 rabbitmqadmin v2。原始的 rabbitmqadmin 已不再积极开发。
rabbitmqadmin v1 可以从任何启用了管理插件的 RabbitMQ 节点下载。导航到 http://{hostname}:15672/cli/rabbitmqadmin 进行下载。该工具需要安装受支持的 Python 版本。
或者,rabbitmqadmin v1 可以 从 GitHub 下载。