vhosts
is a new command group that aggregates all the existing commands directly related to virtual hosts:list vhosts
,declare vhost
,delete vhost
If the RABBITMQADMIN_NON_INTERACTIVE_MODE
is not set to true
, this tool
now can infer subcommand and --long-option names.
This means that a subcommand can be referenced with its unique prefix, that is,
- 'del queue' will be inferred as 'delete queue'
- 'del q --nam "a.queue"' will be inferred as 'delete queue --name "a.queue"'
To enable each feature, set the following environment variables to 'true':
RABBITMQADMIN_INFER_SUBCOMMANDS
RABBITMQADMIN_INFER_LONG_OPTIONS
This feature is only meant to be used interactively. For non-interactive use, it can be potentially too dangerous to allow.
Environment variables have a number of serious downsides compared to a rabbitmqadmin.conf
and the regular --long-options
on the command line:
- Non-existent support for value types and validation ("everything is a string")
- Subprocess inheritance restrictions that can be very time-consuming to debug
- Different syntax for setting them between the classic POSIX-era shells (such as
bash
,zsh
) and modern ones (such asnushell
)
For these reasons and others, rabbitmqadmin
v2 intentionally uses the configuration file and the
CLI options over the environment variables.
rabbitmqadmin
v2 does, however, supports a number of environment variables for a few
global settings that cannot be configured any other way (besides a CLI option),
or truly represent an environment characteristic, e.g. either the non-interactive mode
should be enabled.
These environment variables are as follows:
Environment variable | Type | When used | Description |
---|---|---|---|
RABBITMQADMIN_CONFIG_FILE_PATH |
Local filesystem path | Pre-flight (before command execution) | Same meaning as the global --confg-file argument |
RABBITMQADMIN_NON_INTERACTIVE_MODE |
Boolean | Command execution | Enables the non-interactive mode. Same meaning as the global --non-interactive argument |
RABBITMQADMIN_QUIET_MODE |
Boolean | Command execution | Instructs the tool to produce less output. Same meaning as the global --quiet argument |
RABBITMQADMIN_INFER_SUBCOMMANDS |
Boolean | Pre-flight (before command execution) | Enables inference (completion of partial names) of subcommands. Does not apply to the non-interactive mode. |
RABBITMQADMIN_INFER_LONG_OPTIONS |
Boolean | Pre-flight (before command execution) | Enables inference (completion of partial names) of --long-options . Does not apply to the non-interactive mode. |
RABBITMQADMIN_NODE_ALIAS |
String | Command execution | Same meaning as the global --node argument |
RABBITMQADMIN_TARGET_HOST |
String | Command execution | Same meaning as the global --host argument |
RABBITMQADMIN_TARGET_PORT |
Positive integer | Command execution | Same meaning as the global --port argument |
RABBITMQADMIN_API_PATH_PREFIX |
String | Command execution | Same meaning as the global --path-prefix argument |
RABBITMQADMIN_TARGET_VHOST |
String | Command execution | Same meaning as the global --vhost argument |
RABBITMQADMIN_BASE_URI |
String | Command execution | Same meaning as the global --base-uri argument |
RABBITMQADMIN_USE_TLS |
Boolean | Command execution | Same meaning as the global --tls argument |
RABBITMQADMIN_USERNAME |
String | Command execution | Same meaning as the global --username argument |
RABBITMQADMIN_PASSWORD |
String | Command execution | Same meaning as the global --password argument |
RABBITMQADMIN_TABLE_STYLE |
Enum, see --table-style in rabbitmqadmin help |
Command execution | Same meaning as the global --table-style argument |
-
definitions export
's special--file
value of-
for "standard input" is deprecated. Use--stdout
instead:rabbitmqadmin definitions export --stdout > definitions.json
# exports 3.x-era definitions that might contain classic queue mirroring keys, transforms # them to not use any CMQ policies, injects an explicit queue type into the matched queues, # and drops all the policies that had nothing beyond the CMQ keys, # then passes the result to the standard input of # 'rabbitmqadmin definitions import --stdin' rabbitmqadmin --node "source.node" definitions export --transformations strip_cmq_keys_from_policies,drop_empty_policies --stdout | rabbitmqadmin --node "destination.node" definitions import --stdin
-
definitions import
now supports reading definitions from the standard input instead of a file. For that, pass--stdin
instead of--file "/path/to/definitions.json"
.rabbitmqadmin definitions import --stdin < definitions.json
cat definitions.json | rabbitmqadmin definitions import --stdin
# exports 3.x-era definitions that might contain classic queue mirroring keys, transforms # them to not use any CMQ policies, injects an explicit queue type into the matched queues, # and drops all the policies that had nothing beyond the CMQ keys, # then passes the result to the standard input of # 'rabbitmqadmin definitions import --stdin' rabbitmqadmin --node "source.node" definitions export --transformations strip_cmq_keys_from_policies,drop_empty_policies --stdout | rabbitmqadmin --node "destination.node" definitions import --stdin
-
New command group:
federation
, seerabbitmqadmin federation help
-
New command:
federation declare_upstream_for_queues
for declaring upstreams that will exclusively be used for queue federation. This command does not support any options related to exchange federation.rabbitmqadmin federation --vhost "local.vhost" declare_upstream_for_queues \ --name "dc.vancouver" \ --uri "amqp://192.168.0.25/demote.vhost" \ --ack-mode "on-confirm"
-
New command:
federation declare_upstream_for_exchanges
for declaring upstreams that will exclusively be used exchange federation. This command does not support any options related to queue federation.rabbitmqadmin federation --vhost "local.vhost" declare_upstream_for_exchanges \ --name "dc.vancouver" \ --uri "amqp://192.168.0.25/demote.vhost" \ --ack-mode "on-confirm"
-
New command:
federation declare_upstream
for declaring upstreams that can be used for either queue or exchange federation. This command supports the whole spectrum of federation upstream options, that is, both the settings of queue and exchange federation.rabbitmqadmin federation --vhost "local.vhost" declare_upstream \ --name "dc.canada.bc.vancouver" \ --uri "amqp://192.168.0.25/demote.vhost" \ --ack-mode "on-confirm"
-
New command:
federation list_all_upstreams
for listing all upstreams (that is, upstreams across all the virtual hosts in the cluster).rabbitmqadmin federation list_all_upstreams
-
New command:
federation list_all_links
for listing all links (that is, links across all the virtual hosts in the cluster).rabbitmqadmin federation list_all_links
-
New command:
federation delete_upstream
. As the name suggests, it deletes an upstream.rabbitmqadmin federation delete_upstream --name "dc.canada.bc.vancouver"
-
New definitions export
--transformations
value,obfuscate_usernames
, changes usernames to dummy values (e.g. so that definitions could be shared safely with external teams) -
New definitions export
--transformations
value,exclude_users
, removes users from the result (also for safe sharing) -
New definitions export
--transformations
value,exclude_permissions
, removes all permissions (also for safe sharing) -
New definitions export
--transformations
value,exclude_runtime_parameters
, removes all runtime parameters -
New definitions export
--transformations
value,exclude_policies
, removes all policies -
New definitions export
--transformations
value,no_op
, applies no transformation
-
definitions export
now supports a new option,--transformations
, a comma-separated list of supported operations to apply to the definitions.rabbitmqadmin definitions export --transformations strip_cmq_keys_from_policies,drop_empty_policies
The command above applies two transformations named
strip_cmq_keys_from_policies
anddrop_empty_policies
that will strip all classic queue mirroring-related policy keys that RabbitMQ 3.13 nodes supported, then removes the policies that did not have any keys left (ended up having an empty definition). -
When
--non-interactive
mode is used, newlines in table cells are now replaced with comma-separated lists
- 'declare queue's
--type
option values that the tool does not recognize are now passed as is to the HTTP API
-
policies
is a new command group for policy operations:rabbitmqadmin help policies # an equivalent of 'declare policy' rabbitmqadmin policies declare --name "policy-name" --pattern '^matching\..+' --apply-to "quorum_queues" \ --priority 10 \ --definition '{"max-length": 10000}' # an equivalent of 'list policies' rabbitmqadmin policies list # an equivalent of 'delete policy' rabbitmqadmin policies delete --name "policy-name"
-
policies list_in
is a new command that lists policies in a specific virtual host:rabbitmqadmin --vhost "a.vhost" policies list_in
rabbitmqadmin --vhost "streams.vhost" policies list_in --apply-to "streams"
-
policies list_matching_object
is a new command that lists all policies that would match an object (a queue, a stream, an exchange) with a given name:rabbitmqadmin --vhost "a.vhost" policies list_matching_object --name 'audit.events' --type queues
declare policy
's--apply-to
argument value was ignored
-
Binary packages for 8x86-64 Linux are now produced on an older
glibc
version,2.35
, for compatibility with Debian Bookworm and Ubuntu 22.04 -
shovels declare_amqp10
is a new command that declares a dynamic Shovel that will use AMQP 1.0 for both source and destination:
rabbitmqadmin --vhost "shovels" shovels declare_amqp10 \
--name "shovel-2" \
--source-uri amqp://localhost:5672 \
--destination-uri amqp://localhost:5672 \
--source-address "/queue/src.q" --destination-address "/queue/dest.q"
-
shovels declare_amqp091
is a new command that declares a dynamic Shovel that will use AMQP 0-9-1 for both source and destination:rabbitmqadmin --vhost "shovels" shovels declare_amqp091 \ --name "shovel-2" \ --source-uri amqp://localhost:5672 \ --destination-uri amqp://localhost:5672 \ --source-queue "src.q" --destination-exchange "amq.fanout"
-
shovels delete
is a new command that deletes a dynamic shovel:rabbitmqadmin --vhost "shovels" shovels delete --name "shovel-2"
-
definitions export_from_vhost
is a new command that exports definitions from a single virtual host (as opposed to definitions for the entire cluster) -
definitions import_into_vhost
is a new command that imports virtual host-specific definitions (as opposed to definitions for the entire cluster)
-
list user_connections
is a new command that lists connections of a specific user:rabbitmqadmin --vhost="/" list user_connections --username "monitoring.1" rabbitmqadmin --vhost="production" list user_connections --username "web.45cf7dc28"
-
close user_connections
is a new command that closes connections of a specific user:rabbitmqadmin --vhost="/" close user_connections --username "monitoring.2" rabbitmqadmin --vhost="production" close user_connections --username "web.94ee67772"
-
New general option
--table-style
, can be used to change output table styling.By default, the following style is used:
rabbitmqadmin --table-style=modern show overview
An equivalent of
--non-interactive
in terms of styling israbbitmqadmin --table-style=borderless show overview
More available styles:
rabbitmqadmin --table-style=ascii show overview
rabbitmqadmin --table-style=psql show overview
rabbitmqadmin --table-style=markdown show overview
rabbitmqadmin --table-style=dots show overview
-
tanzu sds enable
was renamed totanzu sds enable_on_node
.This breaking change only applies to a command specific to Tanzu RabbitMQ 4.1, a series currently in development.
-
tanzu sds disable
was renamed totanzu sds disable_on_node
.This breaking change only applies to a command specific to Tanzu RabbitMQ 4.1, a series currently in development.
-
tanzu sds enable_cluster_wide
is a new command that disables SDS on all cluster nodes.This command is specific to Tanzu RabbitMQ 4.1, a series currently in development.
-
tanzu sds disable_cluster_wide
is a new command that disables SDS on all cluster nodes.This command is specific to Tanzu RabbitMQ 4.1, a series currently in development.
list connections
now correctly handles RabbitMQ Stream Protocol connections that do not have thechannel_max
metric set
-
declare stream
is a new command that accepts stream-specific arguments:rabbitmqadmin --vhost "vh1" declare stream --name "streams.1" --expiration "8h" \ --arguments '{"x-initial-cluster-size": 3}'
-
delete stream
is an alias fordelete queue
that makes more sense for environments where streams are used more often than queues:rabbitmqadmin --vhost "vh1" delete stream --name "streams.1"
-
Initial support for Tanzu RabbitMQ Schema Definition Sync (SDS).
rabbitmqadmin help tanzu sds rabbitmqadmin tanzu sds status
-
Initial support for Tanzu RabbitMQ Warm Standby Replication (WSR).
rabbitmqadmin help tanzu wsr rabbitmqadmin tanzu wsr status
-
Two new commands for reasoning about target node's memory footprint:
# 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'
Example output of
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% │ └────────────────────────────────────────┴────────────┘
Note that there are two different supported strategies for computing memory footprint of a node. RabbitMQ uses both and takes the greater value for 100% when computing the relative share in percent for each category. Other factors that can affect the precision of percentage values reported are runtime allocator behavior nuances and the kernel page cache.
-
Client identity support:
--tls-cert-file
and--tls-key-file
are the (re-introduced) options that allow the user to pass in a public certificate (key) and private key pair for x.509 peer verification:rabbitmqadmin --use-tls --host 'target.domain' --port 15671 \ --tls-ca-cert-file '/path/to/ca_certificate.pem' \ --tls-cert-file '/path/to/client_certificate.pem' \ --tls-key-file '/path/to/client_key.pem' \ list connections
GitHub issue: #26
-
Initial cross-platform support for loading of trusted CA certificates from system locations.
This behavior is enabled automatically. The certificates in a PEM file passed in via
--tls-ca-cert-file
are merged with the list of CA certificates discovered in the platform-specific stores.GitHub issue: #42
-
rabbitmqadmin show memory_breakdown
is a new command that outputs a breakdown of target node's memory footprint
-
New health checks:
# To see help: 'rabbitmqadmin health_check help port_listener' rabbitmqadmin health_check port_listener --port [port]
# To see help: 'rabbitmqadmin health_check help protocol_listener' rabbitmqadmin health_check protoocl_listener --protocol [protocol]
-
rabbitmqadmin feature_flags list
(also available asrabbitmqadmin list feature_flags
) is a new command that lists feature flags and their cluster state.GitHub issue: #38
-
rabbitmqadmin feature_flags enable --name {feature flag}
andrabbitmqadmin feature_flags enable_all
are new commands that enable feature flags.Just like its
rabbitmqctl
counterpart,rabbitmqadmin feature_flags enable_all
will only enable the stable feature flags and will skip the experimental ones.GitHub issues: #41
-
rabbitmqadmin deprecated_features list
(also available asrabbitmqadmin list deprecated_features
) is a new function that lists all deprecated features.GitHub issue: #39
-
rabbitmqadmin deprecated_features list_used
(also available asrabbitmqadmin list deprecated_features_in_use
) is a new function that lists the deprecated features that are found to be used in the cluster.GitHub issue: #40
-
Improved error reporting.
A failed HTTP API request now prints the request URL (this does NOT include the credentials), and the response body, making it easier to identify the problem without consulting RabbitMQ node logs.
-
CLI interface
help
message polishing.More commands now provide links to the relevant documentation guides, use (a reasonable amount of) coloring and recommend against features such as that are polling message consumption that were never designed or intended to be used in production
-
README documentation improvements
- Multi-word command line flags now use the more common
--snake-case[=]{value}
format instead ofrabbitmqadmin
v1'slower_case={value}
.
-
New command category:
health_check
which provides access to the health check endpoints.Currently, only the three (arguably) most important health checks are implemented:
local_alarms
,cluster_wide_alarms
, andnode_is_quorum_critical
. -
health_check help
now includes a link to the respective RabbitMQ documentation guide.
- Configuration paths with a tilda (
~
), including the default configuration file at~/.rabbitmqadmin.conf
, were not loaded correctly.
-
Several key
delete
commands, namelydelete vhost
,delete user
,delete queue
anddelete exchange
now support a new flag,--idempotently
. When this flag is used, 404 Not Found responses from the HTTPGitHub issue: #32
-
--non-interactive
is a new global flag. When used, this flag will instructrabbitmqadmin
to not produce table border formatting, and generally try to use output that'd be easier to consume from scripts -
Initial work on improving error reporting
declare exchange
produced an incorrect API request payload when target exchange--type
was anx-*
type (a plugin provided-type), such asx-local-random
orx-consistent-hash
-
Implement support for configuration files. Instead of
.ini
files used byrabbitmqadmin
v1, this version uses TOML.GitHub issue: #28
-
Implement
show overview
GitHub issue: #25
-
declare queue
no longer requires a--queue-type
. If not type is specified, it will not be included into the request and the queue will be declared with the default queue type of the target virtual host.GitHub issue: #29
Release artifacts are no longer distributed as single file archives. Instead, the release now includes "naked" binaries that can be downloaded and executed without un-archiving.
GitHub issue: #31