Reference¶
Look-up facts for RabbitMQ 4.x: release and support matrix, Erlang/OTP compatibility, upgrade paths, ports, queue and exchange types, key rabbitmq.conf settings with defaults, queue arguments, removals by version, CLI tools, access-control tables, a hardening checklist, and selected security advisories. For how these pieces work together see Explanation; for step-by-step tasks see How-to Guides.
Version baseline
Values below are for the 4.3.x series (latest patch 4.3.6, released 2026-09-16) unless a row says otherwise. Sources: the rabbitmq-website docs for 4.3 and the rabbitmq-server release notes, retrieved 2026-09-25.
Release and Support Matrix¶
Dates come from the release table on rabbitmq.com/release-information (its source data lives in docusaurus.config.js of the website repo). Broadcom calls the commercial end dates "indicative"; the official lifecycle is on the Broadcom support portal.
| Series | First GA (date) | Latest public patch (date) | End of community support | End of commercial support |
|---|---|---|---|---|
| 4.3 | 4.3.0 (2026-04-23) | 4.3.6 (2026-09-16) | 2026-11-30 | 2028-04-30 |
| 4.2 | 4.2.0 (2025-10-28) | 4.2.10 (2026-08-17) | 2026-07-31 | 2030-06-30 |
| 4.1 | 4.1.0 (2025-04-15) | 4.1.8 (2026-01-22) | 2026-01-31 | 2027-04-30 |
| 4.0 | 4.0.1 (2024-09-18) | 4.0.9 (2025-04-14) | ended | 2026-09-30 |
| 3.13 | 3.13.0 (2024-02-22) | 3.13.7 (2024-08-26) | ended | 2029-12-31 |
| 3.12 | 3.12.0 (2023-06-02) | 3.12.14 (2024-05-06) | ended | 2025-06-30 (ended) |
Public vs commercial patches
Since 2024-06-01, patch releases for a series that is out of community support are published only to paying customers, "with potential exception for very high severity CVEs" (COMMUNITY_SUPPORT.md). This is why security advisories reference versions such as 3.13.8 that are not in the public table. 4.0.0 was never released publicly; the series starts at 4.0.1.
Minor-series cadence in the 4.x line is roughly every six months (4.0 Sep 2024, 4.1 Apr 2025, 4.2 Oct 2025, 4.3 Apr 2026). The website repo labels 4.4 as the development version (/docs/next).
Erlang/OTP Compatibility¶
From Erlang Version Requirements (4.3 docs) and the release notes. Nodes fail to start on an Erlang version below the minimum.
| RabbitMQ versions | Minimum Erlang/OTP | Maximum Erlang/OTP | Notes |
|---|---|---|---|
| 4.3.6 | 27.0 | 28.x | Erlang 28 fully supported from 4.3.6. The same page says Erlang 29 is supported from 4.3.6 but "not all packages list that version" (the matrix still says 28.x) |
| 4.3.3 - 4.3.5, 4.2.9 - 4.2.10 | 27.0 | 27.x | Erlang 26 is EOL; 4.2.9 raised the minimum to 27.0 |
| 4.3.0 - 4.3.2, 4.2.0 - 4.2.8, 4.1.0 - 4.1.4, 4.0.4 - 4.0.9 | 26.2 | 27.x | Erlang 28 only for brand-new clusters (known issue in mixed-version Khepri clusters) |
| 4.0.1 - 4.0.3 | 26.2 | 26.2.x | 4.0.x is compatible with Erlang 27 from 4.0.4 |
| 3.13.x | 26.0 | 26.2.x | Erlang 26 enables TLS client peer verification by default |
Upgrade Paths¶
From the Upgrading guide. All stable feature flags must be enabled before an upgrade.
| From | To (in-place) | Notes |
|---|---|---|
| 4.2.x | 4.3.x | Only path into 4.3. Required flags include khepri_db, rabbitmq_4.2.0, quorum_queue_non_voters, message_containers_deaths_v2 |
| 4.1.x | 4.2.x | |
| 4.0.x | 4.1.x, 4.2.x | |
| 3.13.x | 4.0.x, 4.1.x, 4.2.x | 3.13 users go to 4.2.x first, then 4.3.x. 3.13 clusters with experimental Khepri enabled cannot upgrade in place (Blue-Green only) |
| 3.12.x | 3.13.x | Or Blue-Green migration to 4.x |
Mixed-version clusters are for rolling upgrades only ("no more than a few hours"). A 4.2.0 node can run next to 4.1.x and 4.0.x nodes; a 4.3.0 node can run next to 4.2.x nodes.
Ports¶
From the Networking guide.
| Port | Protocol / use | Condition |
|---|---|---|
| 4369 | epmd (peer discovery for nodes and CLI tools) | always |
| 5672 / 5671 | AMQP 0-9-1 and AMQP 1.0, plain / TLS | always (core) |
| 5552 / 5551 | RabbitMQ Stream protocol, plain / TLS | rabbitmq_stream plugin |
| 6000 - 6500 | Stream replication between nodes | streams in use |
| 25672 | Erlang distribution (inter-node and CLI), AMQP port + 20000 | always |
| 35672 - 35682 | CLI tool client ports (distribution port + 10000 .. + 10010) | CLI use |
| 15672 / 15671 | Management UI, HTTP API, rabbitmqadmin, plain / TLS |
rabbitmq_management plugin |
| 61613 / 61614 | STOMP, plain / TLS | rabbitmq_stomp plugin |
| 1883 / 8883 | MQTT, plain / TLS | rabbitmq_mqtt plugin |
| 15674 | STOMP over WebSockets | rabbitmq_web_stomp plugin |
| 15675 | MQTT over WebSockets | rabbitmq_web_mqtt plugin |
| 15692 / 15691 | Prometheus metrics, plain / TLS | rabbitmq_prometheus plugin |
Queue Type Matrix¶
Condensed from the Queues, Quorum Queues and Streams guides.
| Feature | Classic | Quorum | Stream |
|---|---|---|---|
| Replicated | No (mirroring removed in 4.0) | Yes, Raft (Ra) | Yes (Osiris log replication) |
| Default replicas | 1 | 3 (x-quorum-initial-group-size) |
set by x-initial-cluster-size (default not stated in the 4.3 guide) |
| Non-durable / exclusive | Yes (transient non-exclusive denied by default in 4.3) | No | No |
| Read semantics | Destructive | Destructive | Non-destructive, by offset |
| fsync before confirm | Per message persistence | Yes, quorum of members | No (relies on OS page cache) |
| TTL / length limits | Yes | Yes | No, uses retention (max-age, max-length-bytes) |
| Message priority | Yes | Yes since 4.0; strict priorities since 4.3 | No |
| Dead-lettering | Yes | Yes (at-most-once or at-least-once) | No |
| Poison-message handling | No | delivery-limit, default 20 since 4.0 |
No |
| Consumer timeout evaluated | No (since 4.3) | Yes (per queue since 4.3) | No |
| Reacts to memory alarms | Yes | Yes | No (uses minimal RAM) |
| Single active consumer | Yes | Yes | Yes (since 3.11) |
| Partitioning | via consistent-hash / modulus-hash exchange | same | Super streams (since 3.11) |
| Server-side filtering | No | No | Bloom filter (3.13), AMQP 1.0 property filters (4.1), SQL filter expressions (4.2) |
Exchange Types¶
| Type | Routing | Availability |
|---|---|---|
direct |
Exact routing-key match | core |
topic |
Pattern match: * = one word, # = zero or more words |
core |
fanout |
Every bound queue | core |
headers |
Message headers, x-match: all or any |
core |
x-local-random |
One queue local to the publisher's node, chosen at random | core, since 4.0 |
x-modulus-hash |
Stable hash distribution over bindings | core since 4.3 (was in the sharding plugin) |
x-consistent-hash |
Hash routing key (or header) onto weighted bindings | rabbitmq_consistent_hash_exchange plugin |
x-random |
One bound queue at random | rabbitmq_random_exchange plugin |
x-delayed-message |
Holds messages for x-delay ms before routing |
community plugin (rabbitmq-delayed-message-exchange) |
Key rabbitmq.conf Settings¶
Defaults from the 4.3 Configuration guide unless noted.
| Key | Default | Notes |
|---|---|---|
vm_memory_high_watermark.relative |
0.6 |
Publishers blocked above this share of RAM. Recommended range 0.4 - 0.7 (production checklist) |
vm_memory_calculation_strategy |
rss |
allocated, rss, legacy |
disk_free_limit.absolute |
50MB |
Too low for production; use at least the memory watermark size |
max_message_size |
16777216 (16 MiB) |
Reduced from 128 MiB in 4.0. Max 536870912 |
channel_max |
2047 |
0 = unlimited (not recommended) |
heartbeat |
60 (s) |
|
consumer_timeout |
1800000 (30 min) |
Evaluated by quorum queues only from 4.3 |
consumer_disconnected_timeout |
60 s | New in 4.3, quorum queues |
default_queue_type |
classic |
Node-wide; a vhost default takes precedence |
collect_statistics_interval |
5000 (ms) |
Management stats emission interval |
loopback_users.guest |
true |
guest may only connect from localhost |
anonymous_login_user / anonymous_login_pass |
guest / guest |
New in 4.0. Set anonymous_login_user = none in production |
session_max_per_connection |
64 |
AMQP 1.0 |
link_max_per_session |
256 |
AMQP 1.0 |
num_acceptors.tcp |
10 |
|
cluster_partition_handling |
ignore |
No effect since 4.3.0 (Mnesia removed) |
quorum_queue.continuous_membership_reconciliation.enabled |
false |
CMR, opt-in |
quorum_queue.continuous_membership_reconciliation.target_group_size |
none | |
quorum_queue.continuous_membership_reconciliation.auto_remove |
false |
Removes members on nodes that left the cluster |
quorum_queue.continuous_membership_reconciliation.interval |
3600000 (60 min) |
|
management.http_body_limit |
10485760 (10 MiB) |
Added by the fix for CVE-2023-46118 |
deprecated_features.permit.<feature> |
depends on phase | Opt back in to a denied_by_default feature, set on all nodes |
Queue Arguments and Policy Keys¶
| Queue argument | Policy key | Applies to | Meaning |
|---|---|---|---|
x-queue-type |
n/a | all | classic, quorum, stream (immutable) |
x-quorum-initial-group-size |
n/a | quorum | Initial replica count, default 3 |
x-delivery-limit |
delivery-limit |
quorum | Default 20 since 4.0; -1 disables. Changeable by policy without redeclare since 4.3 |
x-dead-letter-exchange / x-dead-letter-routing-key |
dead-letter-exchange / dead-letter-routing-key |
classic, quorum | DLX target |
x-dead-letter-strategy |
dead-letter-strategy |
quorum | at-most-once (default) or at-least-once |
x-max-length / x-max-length-bytes |
max-length / max-length-bytes |
classic, quorum; bytes also stream retention | |
x-overflow |
overflow |
classic, quorum | drop-head, reject-publish, reject-publish-dlx (classic) |
x-message-ttl / x-expires |
message-ttl / expires |
classic, quorum | |
x-delayed-retry-type, x-delayed-retry-min, x-delayed-retry-max |
delayed-retry-* |
quorum, 4.3+ | Backoff min(min_delay * delivery_count, max_delay) |
x-consumer-timeout |
consumer-timeout |
quorum, 4.3+ (also consumer argument) | |
x-max-age |
max-age |
stream | Units Y M D h m s, for example 7D |
x-stream-max-segment-size-bytes |
stream-max-segment-size-bytes |
stream | Default 500000000; policy applies only at declaration |
x-stream-filter-size-bytes |
stream-filter-size-bytes |
stream | Bloom filter size, 16-255, default 16 |
x-initial-cluster-size |
n/a | stream | Initial replica count |
x-queue-leader-locator |
queue-leader-locator |
quorum, stream | client-local (default) or balanced |
x-queue-mode, x-queue-version=1 |
n/a | classic | Rejected since 4.3 (CQv1 removed) |
Removals and Breaking Changes by Version¶
| Version | Removed or changed | Replacement |
|---|---|---|
| 3.12 | Classic queue lazy mode stops applying; CQv2 always pages to disk | none needed |
| 4.0 | Classic queue mirroring removed | Quorum queues or streams |
| 4.0 | AMQP 1.0 becomes a core protocol; rabbitmq_amqp1_0 plugin is a no-op |
none needed |
| 4.0 | CQv1 storage removed (upgrade path only); classic_queue.default_version = 1 stops boot |
CQv2 |
| 4.0 | Default max message size 128 MiB -> 16 MiB | max_message_size |
| 4.0 | Quorum queue default delivery limit 20 | delivery-limit policy + DLX |
| 4.0 | mqtt.default_user, mqtt.default_password, amqp1_0.default_user removed |
anonymous_login_user, anonymous_login_pass |
| 4.0 | x-death on (re-)published messages no longer interpreted |
own x- header |
| 4.1 | Initial (pre-auth) AMQP 0-9-1 frame_max 4096 -> 8192; Node.js amqplib < 0.10.7 cannot connect |
upgrade amqplib |
| 4.1 | MQTT max packet size 256 MiB -> 16 MiB | mqtt.max_packet_size_authenticated |
| 4.1 | rabbitmqctl force_reset deprecated (incompatible with Khepri) |
reset, forget_cluster_node |
| 4.2 | Khepri default for new clusters; AMQP 1.0 durable defaults to false when header omitted |
set durable=true in clients |
| 4.2 | rabbitmq_raft* Prometheus metrics renamed/changed |
update dashboards |
| 4.3 | Mnesia removed; Khepri is the only metadata store; partition handling strategies removed | Raft semantics everywhere |
| 4.3 | Deprecated features amqp_address_v1, global_qos, queue_master_locator, transient_nonexcl_queues, amqp_filter_set_bug now denied by default; ram_node_type removed |
durable queues, per-consumer QoS |
| 4.3 | x-queue-mode / CQv1 arguments rejected; consumer timeouts no longer evaluated for classic queues and streams |
quorum queues for timeouts |
| 4.3 | rabbitmqadmin v1 download endpoint removed |
rabbitmqadmin v2 |
CLI Tools¶
| Tool | Purpose |
|---|---|
rabbitmqctl |
Node and cluster management: users, vhosts, permissions, policies, feature flags, join_cluster, forget_cluster_node |
rabbitmq-diagnostics |
Health checks and inspection: status, check_running, check_alarms, memory_breakdown, check_if_node_is_quorum_critical, observer |
rabbitmq-plugins |
Enable/disable plugins |
rabbitmq-queues |
Quorum queue and stream replica management: quorum_status, add_member, delete_member, grow, shrink, rebalance |
rabbitmq-streams |
Stream-specific: stream_status, add_super_stream, add_replica, delete_replica |
rabbitmq-upgrade |
Upgrade helpers: drain, revive, await_online_quorum_plus_one |
rabbitmqadmin v2 |
HTTP API client (Rust, rabbitmqadmin-ng); declares objects, health checks, definitions, Blue-Green migration helpers |
Plugins (selected)¶
| Plugin | Adds |
|---|---|
rabbitmq_management |
Management UI and HTTP API on 15672 |
rabbitmq_prometheus |
/metrics on 15692 |
rabbitmq_stream, rabbitmq_stream_management |
Stream protocol on 5552 and UI pages |
rabbitmq_mqtt, rabbitmq_web_mqtt |
MQTT 3.1, 3.1.1 and 5.0 (5.0 since 3.13); over WebSockets |
rabbitmq_stomp, rabbitmq_web_stomp |
STOMP; over WebSockets |
rabbitmq_federation, rabbitmq_shovel (+ _management) |
Inter-cluster links; Shovel gained a local protocol in 4.2 |
rabbitmq_auth_backend_oauth2, rabbitmq_auth_backend_ldap, rabbitmq_auth_backend_http, rabbitmq_auth_backend_cache, rabbitmq_auth_mechanism_ssl |
Authentication and authorization backends |
rabbitmq_consistent_hash_exchange, rabbitmq_random_exchange |
Extra exchange types |
rabbitmq_event_exchange |
Internal events published to amq.rabbitmq.event |
rabbitmq_tracing |
Message tracing into log files (Firehose) |
rabbitmq_peer_discovery_k8s, _aws, _consul, _etcd |
Cluster formation |
rabbitmq_trust_store |
Per-client certificate allow-list |
Access Control¶
Authentication backends¶
| Method | Use case |
|---|---|
| Internal user database | Default. Passwords hashed with SHA-256 by default (password_hashing_module) |
OAuth 2.0 / JWT (rabbitmq_auth_backend_oauth2) |
SSO via Keycloak, Entra ID, Auth0, UAA and others. Validates JWTs against JWKS; configure auth_oauth2.issuer (discovery) or auth_oauth2.jwks_uri |
LDAP (rabbitmq_auth_backend_ldap) |
Directory-based identity and authorization |
x509 / mTLS (rabbitmq_auth_mechanism_ssl) |
EXTERNAL SASL mechanism; certificate CN or SAN maps to a user |
HTTP (rabbitmq_auth_backend_http) |
Custom decisions from a REST service |
Cache (rabbitmq_auth_backend_cache) |
Caches decisions of another backend |
Anonymous (ANONYMOUS SASL, 4.0+) |
Logs in as anonymous_login_user; disable in production |
Permissions¶
Permissions are per-vhost regex triples (configure, write, read); topic permissions add routing-key regexes for topic exchanges.
| Permission | Covers |
|---|---|
| configure | Declare/delete queues and exchanges (passive declares also checked since 4.3) |
| write | Publish to exchanges, bind (as destination side) |
| read | Consume from queues, bind (as source side), purge |
| User tag | Management access |
|---|---|
management |
Own vhosts via UI/API |
policymaker |
management + policies and parameters in own vhosts |
monitoring |
management + read-only view of all connections, channels, node metrics |
administrator |
Everything, including users, vhosts and cluster-wide settings |
Hardening Checklist¶
Based on the Production Checklist and TLS guide.
- Delete or lock down
guest; keeploopback_users.guest = true. - Disable anonymous logins:
anonymous_login_user = noneand omitANONYMOUSfromauth_mechanisms. - Require TLS (5671, 5551, 8883, 61614, 15671) and close plaintext listeners in production.
- Encrypt inter-node traffic with
-proto_dist inet_tls; keep 4369, 25672 and 35672-35682 off public networks. - Generate a strong, unique Erlang cookie per cluster; it is a shared secret, not a fine-grained credential.
- Bind the management listener to a private network or front it with an authenticating proxy; grant
administratorsparingly. - Prefer OAuth 2.0 with audience-scoped tokens (
auth_oauth2.resource_server_id); the draft 4.4.0 notes validate OIDC discovery responses more strictly (HTTPS endpoints, matchingissuer). - Set
disk_free_limit.absoluteto at least the memory watermark size. - Keep the quorum queue
delivery-limit(default 20) and add a dead-letter target. - Remove
cluster_partition_handlingkeys after upgrading to 4.3 (no effect). - Encrypt
/var/lib/rabbitmqat the OS or volume level (RabbitMQ does not encrypt data at rest). - Ship
rabbitmq_event_exchangeevents and logs to a SIEM. - Watch the GitHub Security Advisories and stay on the latest 4.3.x patch.
Security Advisories (selected)¶
All from the rabbitmq-server GitHub advisories list (retrieved 2026-09-25).
| Advisory | Published | Severity | Summary | Fixed in |
|---|---|---|---|---|
| GHSA-w6cq-9cf4-gqpg (CVE-2023-46118) | 2023-10-23 | Moderate | HTTP API had no request body limit; large publish over HTTP could OOM a node | 3.11.24, 3.12.7 (adds management.http_body_limit) |
| GHSA-pj33-75x5-32j4 | 2024-11-06 | Moderate | HTTP API queue deletion endpoint did not verify the required permission | see advisory |
| GHSA-g58g-82mw-9m3p (CVE-2025-30219) | 2025-03-25 | Moderate (6.1) | XSS via unescaped vhost name in a management UI error message | 4.0.3, 3.13.8 |
| GHSA-gh3x-4x42-fvq8 | 2025-06-18 | Moderate | Node could log the Basic Auth header of an HTTP request | see advisory |
| GHSA-cw8c-4m83-9c6w | 2026-07-09 | Critical | Trust-store allow-list matched on issuer + serial only | see advisory |
| GHSA-f9f2-q3jf-wfj3 | 2026-07-23 | High | OAuth 2.0 client secret exposed via an unauthenticated JavaScript endpoint | see advisory |
| GHSA-cfqc-c682-93mm | 2026-08-18 | High | Web STOMP: compressed pre-authentication messages exhaust memory | see advisory |
2026 advisory wave
The advisory list grew from about ten entries (2021-2025) to roughly 90 between May and September 2026, covering the management UI/API, MQTT, STOMP, OAuth 2.0, Shovel, Federation and streams. Several are High or Critical. Fixed versions for older series are commercial-only; open-source users should run the latest 4.3.x patch.
Performance Reference Points¶
Benchmark caveat
Only the first two rows are from official release notes. The others are order-of-magnitude community figures (unverified as of 2026-09); run perf-test or the stream PerfTest tool on your own hardware.
| Workload | Figure | Source |
|---|---|---|
| AMQP 1.0 peak throughput, 4.0 vs 3.13 | More than double on some workloads | 4.0.1 release notes |
| Quorum queue per-message memory, 4.3 | About halved "in many scenarios" (compact message references) | 4.3.0 release notes |
| Quorum queue, persistent, 3 replicas | ~30k-100k msg/s per queue on NVMe | community, unverified |
| Classic queue, persistent | ~50k-150k msg/s per queue | community, unverified |
| Stream protocol, 3 replicas | 1M+ msg/s per cluster | community, unverified |
Sources¶
- Release Information and rabbitmq-website
docusaurus.config.js(release dates). - Erlang Version Requirements, Upgrading, Networking, Configuration, Production Checklist.
- Quorum Queues, Streams, Virtual Hosts, OAuth 2.0, rabbitmqadmin v2.
- Release notes: 4.0.1, 4.1.0, 4.2.0, 4.3.0.
- COMMUNITY_SUPPORT.md, Security Advisories.