v0.55.7

Try our Chrome extension

Chrome store icon Chrome Webstore

Easily add the current web-page from your browser directly into your changedetection.io tool, more great features coming soon!

Changedetection.io needs your support!

You can help us by supporting changedetection.io on these platforms;

The more popular changedetection.io is, the more time we can dedicate to adding amazing features!

Many thanks :)

changedetection.io team

Not yet seconds ago
            False
        
Not yet seconds ago
Current erroring screenshot from most recent request

Triggered text Ignored text Blocked text

1 week ago
tag:github.com,2008:https://github.com/rabbitmq/rabbitmq-server/releases

Release notes from rabbitmq-server

2026-05-19T19:52:01Z tag:github.com,2008:Repository/924551/v4.3.1 2026-05-20T01:26:36Z

RabbitMQ 4.3.1

<p>RabbitMQ <code>4.3.1</code> is a maintenance release in the <code>4.3.x</code> <a href="https://www.rabbitmq.com/release-information" rel="nofollow">release series</a>.</p> <p>It is <strong>strongly recommended</strong> that you read <a href="https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.3.0">4.3.0 release notes</a><br> in detail if upgrading from a version prior to <code>4.3.0</code>.</p> <h3>Minimum Supported Erlang Version</h3> <p><a href="https://www.rabbitmq.com/docs/which-erlang" rel="nofollow">RabbitMQ and Erlang/OTP Compatibility Matrix</a> has more details on Erlang version requirements for RabbitMQ.</p> <p>Nodes <strong>will fail to start</strong> on older Erlang releases.</p> <h2>Changes Worth Mentioning</h2> <p>Release notes can be found on GitHub at <a href="https://github.com/rabbitmq/rabbitmq-server/tree/v4.3.x/release-notes">rabbitmq-server/release-notes</a>.</p> <h3>Core Server</h3> <h4>Bug Fixes</h4> <ul> <li> <p>If a queue was bound to a topic exchange using an empty binding key (<code>""</code>),<br> messages published to <strong>any</strong> topic exchange with an empty<br> routing key would be incorrectly routed to that queue.</p> <p>To apply the fix, enable the new <code>topic_binding_projection_v5</code> feature flag after upgrading all cluster nodes.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16271" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16271/hovercard">#16271</a></p> </li> <li> <p>A virtual host could be falsely considered to be deleted in certain metadata store error and timeout scenarios.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16422" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16422/hovercard">#16422</a></p> </li> <li> <p>Passive queue and exchange declarations are now allowed for users that have <strong>any</strong> permission<br> on the virtual host (<code>configure</code>, <code>write</code>, or <code>read</code>), not only <code>configure</code>.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16272" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16272/hovercard">#16272</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16085" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16085/hovercard">#16085</a></p> </li> <li> <p>Classic queue shared message store GC could fall behind other queue activity under heavy load</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16142" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16142/hovercard">#16142</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/issues/16141" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/16141/hovercard">#16141</a></p> </li> <li> <p>Classic queue message store: garbage collection is now stopped cleanly during node shutdown.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15498" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15498/hovercard">#15498</a></p> </li> <li> <p>Quorum queues now gracefully handle negative priority values.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16280" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16280/hovercard">#16280</a></p> </li> <li> <p>Quorum queues: delayed retry-related policy keys are now accepted in policy definitions.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16395" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16395/hovercard">#16395</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16398" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16398/hovercard">#16398</a></p> </li> <li> <p>Fixed a bug where quorum queue's at-least-once dead lettering could direct commands to<br> the wrong member (replica).</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16203" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16203/hovercard">#16203</a></p> </li> <li> <p>Quorum queues: reintroduced Raft WAL max entries default of 500K.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16382" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16382/hovercard">#16382</a></p> </li> <li> <p>A quorum queue could crash during recovery after an unclean shutdown</p> <p>PR: <a href="https://github.com/rabbitmq/ra/pull/629" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/ra/pull/629/hovercard">rabbitmq/ra#629</a></p> </li> <li> <p>Stream queue argument validation was improved.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16285" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16285/hovercard">#16285</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p><code>channel_max</code> was renamed to <code>max_channels</code> in <code>rabbitmq.conf</code>. The original name is<br> still supported as an alias.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16347" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/16347/hovercard">#16347</a></p> </li> <li> <p><code>connection_max</code> was renamed to <code>max_connections</code> in <code>rabbitmq.conf</code>. The original name is<br> still supported as an alias.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16347" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/16347/hovercard">#16347</a></p> </li> <li> <p>The per-node <code>max_connections</code> limit is now enforced for AMQP 1.0 connections as well as AMQP 0-9-1 ones.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16300" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16300/hovercard">#16300</a></p> </li> <li> <p>When a plain-text client connects to a TLS listener (or vice versa) for<br> AMQP 0-9-1, MQTT, STOMP, and the Stream protocol, target node will log a more useful message.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16342" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16342/hovercard">#16342</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16344" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16344/hovercard">#16344</a></p> </li> <li> <p>The permission cache is now traversed less often during AMQP 1.0 management and AMQP 0-9-1 channel checks.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16274" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16274/hovercard">#16274</a></p> </li> </ul> <h3>Stream Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Stream protocol: an <code>open</code> frame with empty properties is now handled correctly.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16341" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16341/hovercard">#16341</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>It is now possible to cap the maximum number of concurrent Stream Protocol client<br> connections using the <code>stream.max_connections</code> configuration key in <code>rabbitmq.conf</code>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16341" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16341/hovercard">#16341</a></p> </li> </ul> <h3>Management Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>HTTP API <code>GET /api/connections</code> could return a 500 response when STOMP connections were present.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16435" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16435/hovercard">#16435</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>It is now possible to cap the maximum number of concurrent HTTP API connections using the <code>management.tcp.max_connections</code>,<br> <code>management.ssl.max_connections</code> configuration keys in <code>rabbitmq.conf</code>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16407" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16407/hovercard">#16407</a></p> </li> <li> <p>The peer (client) certificate serial number is now exposed in the management UI and select CLI commands.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16463" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16463/hovercard">#16463</a></p> </li> </ul> <h3>Prometheus Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>It is now possible to cap the maximum number of concurrent HTTP API connections using the <code>prometheus.tcp.max_connections</code>,<br> <code>prometheus.ssl.max_connections</code> configuration keys in <code>rabbitmq.conf</code>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16407" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16407/hovercard">#16407</a></p> </li> </ul> <h3>MQTT Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>The MQTT connection process no longer fails and logs an exception when keepalive checks encounter socket errors on<br> an already-closed connection.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16391" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16391/hovercard">#16391</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>It is now possible to cap the maximum number of concurrent MQTT client connections using the <code>mqtt.max_connections</code><br> configuration key in <code>rabbitmq.conf</code>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16367" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16367/hovercard">#16367</a></p> </li> </ul> <h3>Federation Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Federation links could fail to start during rolling cluster restarts.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16234" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16234/hovercard">#16234</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/issues/16224" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/16224/hovercard">#16224</a></p> </li> </ul> <h3>LDAP Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>New <code>rabbitmq.conf</code> configuration settings for TLS cipher suites: <code>auth_ldap.ssl_options.ciphers.*</code>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16226" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16226/hovercard">#16226</a></p> </li> </ul> <h3>HTTP Auth Backend Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>New <code>rabbitmq.conf</code> configuration settings for TLS cipher suites: <code>auth_http.ssl_options.ciphers.*</code>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16226" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16226/hovercard">#16226</a></p> </li> </ul> <h3>Auth Backend Cache Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>The cache was not effective for reconnecting clients.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16255" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/16255/hovercard">#16255</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16258" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16258/hovercard">#16258</a></p> </li> </ul> <h3>Trust Store Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>A user-provided <code>fail_if_no_peer_cert</code> value in the plugin's TLS options is now respected. Previously,<br> an internal default could override the configured value.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16201" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16201/hovercard">#16201</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>New <code>rabbitmq.conf</code> configuration settings for TLS cipher suites: <code>trust_store.ssl_options.ciphers.*</code>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16226" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16226/hovercard">#16226</a></p> </li> </ul> <h3>Dependency Changes</h3> <ul> <li><code>ra</code> was upgraded to <a href="https://github.com/rabbitmq/ra/releases/tag/v3.1.7"><code>3.1.7</code></a></li> <li><code>cuttlefish</code> was upgraded to <a href="https://github.com/Kyorai/cuttlefish/releases"><code>3.7.0</code></a></li> <li><code>cowboy</code> was upgraded to <a href="https://github.com/ninenines/cowboy/releases"><code>2.15.0</code></a></li> <li><code>cowlib</code> was upgraded to <a href="https://github.com/ninenines/cowlib/releases"><code>2.16.1</code></a></li> <li><code>gun</code> was upgraded to <a href="https://github.com/ninenines/gun/releases"><code>2.3.0</code></a></li> </ul> michaelklishin tag:github.com,2008:Repository/924551/v4.2.7 2026-05-20T00:10:20Z

RabbitMQ 4.2.7

<p>RabbitMQ <code>4.2.7</code> is a maintenance release in the <code>4.2.x</code> <a href="https://www.rabbitmq.com/release-information" rel="nofollow">release series</a>.</p> <p>It is <strong>strongly recommended</strong> that you read <a href="https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.2.0">4.2.0 release notes</a><br> in detail if upgrading from a version prior to <code>4.2.0</code>.</p> <h3>Minimum Supported Erlang Version</h3> <p><a href="https://www.rabbitmq.com/docs/which-erlang" rel="nofollow">RabbitMQ and Erlang/OTP Compatibility Matrix</a> has more details on Erlang version requirements for RabbitMQ.</p> <p>Nodes <strong>will fail to start</strong> on older Erlang releases.</p> <h2>Changes Worth Mentioning</h2> <p>Release notes can be found on GitHub at <a href="https://github.com/rabbitmq/rabbitmq-server/tree/v4.2.x/release-notes">rabbitmq-server/release-notes</a>.</p> <h3>Core Server</h3> <h4>Bug Fixes</h4> <ul> <li> <p>A virtual host could be falsely considered to be deleted in certain metadata store error and timeout scenarios.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16422" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16422/hovercard">#16422</a></p> </li> <li> <p>Passive queue and exchange declarations are now allowed for users that have <strong>any</strong> permission<br> on the virtual host (<code>configure</code>, <code>write</code>, or <code>read</code>), not only <code>configure</code>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16272" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16272/hovercard">#16272</a></p> </li> <li> <p>Classic queue message store: garbage collection is now stopped cleanly during node shutdown.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15498" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15498/hovercard">#15498</a></p> </li> <li> <p>Fixed a bug where quorum queue's at-least-once dead lettering could direct commands to<br> the wrong member (replica).</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16203" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16203/hovercard">#16203</a></p> </li> <li> <p>Stream queue argument validation was improved.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16285" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16285/hovercard">#16285</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p><code>channel_max</code> was renamed to <code>max_channels</code> in <code>rabbitmq.conf</code>. The original name is<br> still supported as an alias.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16347" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/16347/hovercard">#16347</a></p> </li> <li> <p><code>connection_max</code> was renamed to <code>max_connections</code> in <code>rabbitmq.conf</code>. The original name is<br> still supported as an alias.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16347" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/16347/hovercard">#16347</a></p> </li> <li> <p>The per-node <code>max_connections</code> limit is now enforced for AMQP 1.0 connections as well as AMQP 0-9-1 ones.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16300" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16300/hovercard">#16300</a></p> </li> <li> <p>The permission cache is now traversed less often during AMQP 1.0 management and AMQP 0-9-1 channel checks.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16274" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16274/hovercard">#16274</a></p> </li> </ul> <h3>Stream Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Stream protocol: an <code>open</code> frame with empty properties is now handled correctly.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16341" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16341/hovercard">#16341</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>It is now possible to cap the maximum number of concurrent Stream Protocol client<br> connections using the <code>stream.max_connections</code> configuration key in <code>rabbitmq.conf</code>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16341" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16341/hovercard">#16341</a></p> </li> </ul> <h3>Management Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>HTTP API <code>GET /api/connections</code> could return a 500 response when STOMP connections were present.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16435" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16435/hovercard">#16435</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>It is now possible to cap the maximum number of concurrent HTTP API connections using the <code>management.tcp.max_connections</code>,<br> <code>management.ssl.max_connections</code> configuration keys in <code>rabbitmq.conf</code>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16407" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16407/hovercard">#16407</a></p> </li> <li> <p>The peer (client) certificate serial number is now exposed in the management UI and select CLI commands.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16463" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16463/hovercard">#16463</a></p> </li> </ul> <h3>Prometheus Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>It is now possible to cap the maximum number of concurrent HTTP API connections using the <code>prometheus.tcp.max_connections</code>,<br> <code>prometheus.ssl.max_connections</code> configuration keys in <code>rabbitmq.conf</code>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16407" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16407/hovercard">#16407</a></p> </li> </ul> <h3>MQTT Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>The MQTT connection process no longer fails and logs an exception when keepalive checks encounter socket errors on<br> an already-closed connection.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16391" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16391/hovercard">#16391</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>It is now possible to cap the maximum number of concurrent MQTT client connections using the <code>mqtt.max_connections</code><br> configuration key in <code>rabbitmq.conf</code>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16367" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16367/hovercard">#16367</a></p> </li> </ul> <h3>Federation Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Federation links could fail to start during rolling cluster restarts.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16234" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16234/hovercard">#16234</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/issues/16224" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/16224/hovercard">#16224</a></p> </li> </ul> <h3>LDAP Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>New <code>rabbitmq.conf</code> configuration settings for TLS cipher suites: <code>auth_ldap.ssl_options.ciphers.*</code>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16226" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16226/hovercard">#16226</a></p> </li> </ul> <h3>HTTP Auth Backend Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>New <code>rabbitmq.conf</code> configuration settings for TLS cipher suites: <code>auth_http.ssl_options.ciphers.*</code>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16226" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16226/hovercard">#16226</a></p> </li> </ul> <h3>Auth Backend Cache Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>The cache was not effective for reconnecting clients.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16255" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/16255/hovercard">#16255</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16258" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16258/hovercard">#16258</a></p> </li> </ul> <h3>Trust Store Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>A user-provided <code>fail_if_no_peer_cert</code> value in the plugin's TLS options is now respected. Previously,<br> an internal default could override the configured value.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16201" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16201/hovercard">#16201</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>New <code>rabbitmq.conf</code> configuration settings for TLS cipher suites: <code>trust_store.ssl_options.ciphers.*</code>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16226" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16226/hovercard">#16226</a></p> </li> </ul> <h3>Dependency Changes</h3> <ul> <li><code>ra</code> was upgraded to <a href="https://github.com/rabbitmq/ra/releases/tag/v2.17.3"><code>2.17.3</code></a></li> <li><code>cuttlefish</code> was upgraded to <a href="https://github.com/Kyorai/cuttlefish/releases"><code>3.7.0</code></a></li> <li><code>cowboy</code> was upgraded to <a href="https://github.com/ninenines/cowboy/releases"><code>2.15.0</code></a></li> <li><code>cowlib</code> was upgraded to <a href="https://github.com/ninenines/cowlib/releases"><code>2.16.1</code></a></li> <li><code>gun</code> was upgraded to <a href="https://github.com/ninenines/gun/releases"><code>2.3.0</code></a></li> </ul> michaelklishin tag:github.com,2008:Repository/924551/v4.3.0 2026-05-12T00:30:06Z

RabbitMQ 4.3.0

<p>RabbitMQ <code>4.3.0</code> is a new feature release.</p> <h2>Breaking Changes and Compatibility Notes</h2> <h3>Mnesia and Parition Handling Strategies are Removed</h3> <p>Since only <code>4.2.x</code> clusters can upgrade to <code>4.3.0</code> <a href="https://www.rabbitmq.com/docs/upgrade" rel="nofollow">in place</a>, this<br> won't be a breaking change for nearly all instalations but it will affect community<br> plugins that use Mnesia.</p> <p>All partition handling-related keys in <code>rabbitmq.conf</code> will be<br> accepted by <code>4.3.0</code> nodes but won't have any effect:</p> <ul> <li><code>cluster_partition_handling</code></li> <li><code>cluster_partition_handling.pause_if_all_down.recover</code></li> <li><code>cluster_partition_handling.pause_if_all_down.nodes.$name</code></li> </ul> <p>Team RabbitMQ recommends removing the above keys from <code>rabbitmq.conf</code> before or shortly after upgrading.</p> <h3>Deprecated Features are Now Disabled by Default</h3> <p>A number of <a href="https://www.rabbitmq.com/docs/deprecated-features" rel="nofollow">deprecated features</a> are now disabled<br> by default and require the user to opt-in in order to use them.</p> <p>This includes <a href="https://www.rabbitmq.com/docs/queues" rel="nofollow">non-durable (transient) non-exclusive</a> queues:<br> attempts to declare a queue with such property combination will be rejected by default.<br> Use durable queues, transient exclusive queues, or durable queues with a <a href="https://www.rabbitmq.com/docs/ttl#queue-ttl" rel="nofollow">queue TTL</a> instead.</p> <p>To explicitly allow transient non-exclusive queues, make sure that<br> <strong>all nodes in the cluster</strong> include the following <code>rabbitmq.conf</code> key<br> and were restarted so that all nodes have a consistent view of the deprecated<br> feature settings:</p> <div class="highlight highlight-source-ini notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="# Enables deprecated non-durable (transient) non-exclusive queues # (disabled by default as of RabbitMQ `4.3.0`, will be removed in a later version). # # Must be effective on all cluster nodes BEFORE # the cluster is upgraded to `4.3.0`. # If only some nodes have the setting configured, it will not have the desired effect. deprecated_features.permit.transient_nonexcl_queues = true"><pre><span class="pl-c"><span class="pl-c">#</span> Enables deprecated non-durable (transient) non-exclusive queues</span> <span class="pl-c"><span class="pl-c">#</span> (disabled by default as of RabbitMQ `4.3.0`, will be removed in a later version).</span> <span class="pl-c"><span class="pl-c">#</span></span> <span class="pl-c"><span class="pl-c">#</span> Must be effective on all cluster nodes BEFORE</span> <span class="pl-c"><span class="pl-c">#</span> the cluster is upgraded to `4.3.0`.</span> <span class="pl-c"><span class="pl-c">#</span> If only some nodes have the setting configured, it will not have the desired effect.</span> <span class="pl-k">deprecated_features.permit.transient_nonexcl_queues</span> = true</pre></div> <p>If only some nodes have setting configured, it will not have the desired effect.</p> <h3>Classic Queues v1 Storage (CQv1) is Removed</h3> <p>This release removes the original classic queue storage implementation these days<br> known as CQv1. A 2nd generation implementation called CQv2 has been adopted<br> as the default starting with <code>4.2.0</code>.</p> <p>This means that attempts to declare a queue using the following <a href="https://www.rabbitmq.com/docs/queues#optional-arguments" rel="nofollow">optional queue arguments</a> will fail:</p> <ul> <li><code>x-queue-mode</code> set to any value</li> <li><code>x-queue-version</code> set to <code>1</code></li> </ul> <p>Existing classic queues upgraded to CQv2 during an earlier upgrade to <code>4.2.x</code> will continue<br> operating as usual.</p> <h3>Consumer Timeouts are No Longer Evaluated for Classic Queues and Streams</h3> <p>This release moves consumer timeout handling responsibility into the queues<br> themselves. Also, all protocols (except for the stream protocol) now evaluate<br> consumer timeout for queue types that support them. Classic queues and streams<br> never evaluate consumer timeouts as their use cases largely avoid the need for<br> such as feature.</p> <h2>Release Highlights</h2> <h3>Khepri is Now The Only Metadata Store</h3> <p>As of this release, Khepri is the only <a href="https://www.rabbitmq.com/docs/metadata-store" rel="nofollow">metadata store</a> supported<br> by RabbitMQ: Mnesia was removed completely.</p> <p>In practical operational terms, this means that</p> <ol> <li>For a cluster to be available, a majority of nodes must be online at all times</li> <li>Failure and partition recovery in a RabbitMQ cluster is now significantly<br> simpler and uniform: all components that have replicated state (Khepri, quorum queues, streams)<br> recover per Raft recovery semantics</li> </ol> <h3>Quorum Queues Enhancements</h3> <p>This release upgrades the <a href="https://github.com/rabbitmq/ra">Ra</a> dependency to <code>3.x</code> and introduces<br> a new (8th) version of the quorum queue state machine with several new features and optimisations:</p> <ul> <li><strong>Strict priority queues</strong> with per-priority message counts, correct<br> redelivery ordering, and priority-aware message expiration</li> <li><strong>Delayed retry</strong> for quorum queues: configurable increasing backoff when<br> messages are returned</li> <li><strong>Consumer timeout</strong> for quorum queues: configurable timeout for<br> unacknowledged messages, with protocol-specific handling for AMQP 1.0 and<br> MQTT</li> <li><strong>Recovery snapshots</strong> and <strong>snapshot throttling</strong> to reduce recovery time<br> and improve snapshotting decisions</li> <li><strong>Memory optimisations</strong> including compact message references, optimised<br> tuple storage for delayed keys, and removal of <code>rabbit_fifo_index</code> usage</li> </ul> <h2>Upgrading to 4.3.0</h2> <h3>Documentation Guides on Upgrades</h3> <p>See the <a href="https://www.rabbitmq.com/docs/upgrade" rel="nofollow">Upgrading guide</a> for documentation on upgrades and <a href="https://github.com/rabbitmq/rabbitmq-server/releases">GitHub releases</a><br> for release notes of individual releases.</p> <p>This release series supports upgrades from <code>4.2.x</code>. Upgrades from earlier series are <strong>not</strong> supported:<br> users must upgrade to the latest available <code>4.2.x</code> patch release before upgrading to <code>4.3.0</code>.</p> <h3>New Required Feature Flags</h3> <p>All feature flags introduced in <code>4.2.0</code> and earlier are required, including the following:</p> <ul> <li><code>rabbitmq_4.2.0</code></li> <li><code>rabbitmq_4.1.0</code></li> <li><code>rabbitmq_4.0.0</code></li> <li><code>khepri_db</code></li> <li><code>quorum_queue_non_voters</code></li> <li><code>message_containers_deaths_v2</code></li> </ul> <p>Enable all required feature flags before upgrading to <code>4.3.0</code>.</p> <p>If your RabbitMQ cluster had plugin <code>rabbitmq_amqp1_0</code> enabled in RabbitMQ <code>3.13.x</code> (and your cluster still serves AMQP 1.0 client connections in <code>4.x</code>), your cluster should do at least one rolling update <strong>after</strong> enabling feature flag <code>rabbitmq_4.0.0</code> but <strong>before</strong> upgrading to <code>4.3.0</code>.</p> <h3>Deprecated Features</h3> <p>In <code>4.3.0</code> the <a href="https://www.rabbitmq.com/docs/deprecated-features" rel="nofollow">deprecation phase</a> of the following features advanced from <code>permitted_by_default</code> to <code>denied_by_default</code>:</p> <ul> <li><code>amqp_address_v1</code></li> <li><code>amqp_filter_set_bug</code></li> <li><code>global_qos</code></li> <li><code>queue_master_locator</code></li> <li><code>transient_nonexcl_queues</code></li> </ul> <p>And the deprecated feature <code>ram_node_type</code> has been removed.</p> <h3>Mixed Version Cluster Compatibility</h3> <p>RabbitMQ 4.3.0 nodes can run alongside <code>4.2.x</code> in the same cluster.</p> <p>Mixed version clusters are a mechanism that allows rolling upgrades and are not meant to be run for extended<br> periods of time (no more than a few hours).</p> <h3>Recommended Post-upgrade Procedures</h3> <p>This version does not require any additional post-upgrade procedures<br> compared to other versions.</p> <h2>Changes Worth Mentioning</h2> <h3>Core Server</h3> <h4>Enhancements</h4> <ul> <li> <p>When a message is rejected by a queue, RabbitMQ now provides the queue name and rejection reason to AMQP 1.0 publishers<br> in the <code>Rejected</code> outcome. This is particularly useful when multiple queues are bound to an exchange, as it allows<br> publishers to identify which specific queue out of several target queues rejected the message and why<br> (e.g., maximum queue length reached or queue unavailable). Previously, publishers had no way to determine which queue<br> rejected their message or the reason for rejection.</p> <p>The queue name and reason are included in the <code>info</code> field of the <code>Rejected</code> outcome's <code>error</code> field:</p> <ul> <li><code>queue: <queue name></code></li> <li><code>reason: maxlen | unavailable</code></li> </ul> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15075" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15075/hovercard">#15075</a></p> </li> <li> <p>Quorum queues now support <strong>strict priority queues</strong> with per-priority message counts,<br> correct redelivery ordering across priorities, and priority-aware message expiration scans.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/13885" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/13885/hovercard">#13885</a></p> </li> <li> <p>Quorum queues now support <strong>delayed retry</strong> with configurable backoff based on delivery count. When messages<br> are returned (via reject, nack, or modify), they can be held in a delayed state before becoming<br> available again. The delay is based on delivery count: <code>min(min_delay * delivery_count, max_delay)</code>.</p> <p>Configuration is available via queue arguments (<code>x-delayed-retry-type</code>, <code>x-delayed-retry-min</code>,<br> <code>x-delayed-retry-max</code>) or policy keys (<code>delayed-retry-type</code>, <code>delayed-retry-min</code>,<br> <code>delayed-retry-max</code>). The retry type can be set to <code>disabled</code>, <code>all</code>, <code>failed</code>, or <code>returned</code>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/13885" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/13885/hovercard">#13885</a></p> </li> <li> <p>Quorum queues now support a configurable <strong>consumer timeout</strong>. When a consumer holds unacknowledged<br> messages beyond the timeout, the messages are returned to the queue. For AMQP 1.0 clients,<br> timed-out deliveries are released via <code>DISPOSITION(state=released)</code> instead of detaching the link,<br> allowing the consumer to recover without re-attaching. MQTT consumers are also supported.</p> <p>The timeout can be set via the <code>x-consumer-timeout</code> consumer argument, queue argument, <code>consumer-timeout</code><br> policy key, or the global <code>consumer_timeout</code> setting in <code>rabbitmq.conf</code>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/13885" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/13885/hovercard">#13885</a></p> </li> <li> <p>A new <code>consumer_disconnected_timeout</code> setting controls how long quorum queues wait before returning<br> messages when a consumer's node becomes unreachable due to a network partition. The default is 60 seconds.<br> Configurable via <code>consumer_disconnected_timeout</code> in <code>rabbitmq.conf</code>, the <code>consumer-disconnected-timeout</code><br> policy key, or the <code>x-consumer-disconnected-timeout</code> queue argument.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/13885" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/13885/hovercard">#13885</a></p> </li> <li> <p>Quorum queue <strong>recovery snapshots</strong> reduce recovery time after a member restart by avoiding<br> the need to replay all enqueue commands from the log.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/13885" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/13885/hovercard">#13885</a></p> </li> <li> <p>Quorum queue <strong>snapshot throttling</strong> now uses WAL fill ratio and reclaimable byte tracking<br> to make smarter snapshotting decisions, yielding roughly one snapshot per queue per WAL cycle<br> instead of excessive snapshots in shallow, fast-flowing queues.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/13885" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/13885/hovercard">#13885</a></p> </li> <li> <p>Quorum queue <strong>memory optimisations</strong>: message references now use a compact packed integer<br> representation ("compact" means up to 59-bit) when possible, <strong>halving per-message<br> memory overhead</strong> in many scenarios. The <code>rabbit_fifo_index</code> module is no longer used by the<br> main state machine.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/13885" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/13885/hovercard">#13885</a></p> </li> <li> <p>Quorum queues now allow unlimited explicit message returns. The delivery limit is based on<br> <code>delivery-count</code> rather than <code>acquired-count</code>, so messages can be explicitly returned to the<br> queue without counting towards the delivery limit.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/13885" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/13885/hovercard">#13885</a></p> </li> <li> <p>The <code>x-modulus-hash</code> exchange type, previously provided by the sharding plugin, was moved<br> into the core and reworked to provide stable message routing (distribution)<br> assuming a stable set of bindings, including between node restarts.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15849" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15849/hovercard">#15849</a></p> </li> <li> <p>When quorum queue members (replicas) are deleted from a node, either manually<br> via <code>rabbitmq-queues shrink</code> or as part of <code>rabbitmqctl forget_cluster_node</code>,<br> the members are stopped in parallel.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15081" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15081/hovercard">#15081</a></p> </li> <li> <p>Purging a quorum queue now also removes at-least-once dead-lettered messages that were pending delivery.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/13885" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/13885/hovercard">#13885</a></p> </li> <li> <p>AMQP 0-9-1: when a connection's credentials are refreshed, the permissions cache is now<br> cleared and consumer permissions are re-validated immediately</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16092" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16092/hovercard">#16092</a></p> </li> <li> <p>Quorum queue delivery limit can now be changed via policy without queue redeclaration</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16035" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16035/hovercard">#16035</a></p> </li> <li> <p>Khepri topic exchange routing projection (v4): replaced the internal representation with a trie<br> backed by an <code>ordered_set</code> ETS table, significantly improving routing performance<br> for topic exchanges with many bindings</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15619" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15619/hovercard">#15619</a></p> </li> <li> <p>Quorum queues notify AMQP 1.0 clients of Single Active Consumer state changes</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15736" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15736/hovercard">#15736</a></p> </li> <li> <p>More <code>rabbitmq.conf</code> keys now accept tagged values (e.g., <code>encrypted:...</code>)</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15808" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15808/hovercard">#15808</a></p> </li> <li> <p>Startup banner no longer includes the Erlang cookie hash</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16087" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16087/hovercard">#16087</a></p> </li> <li> <p>Optimised AMQP 1.0 message container annotation handling during modify outcomes</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15743" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15743/hovercard">#15743</a></p> </li> <li> <p>Bulk queue delete with Khepri has been optimized</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/14902" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/14902/hovercard">#14902</a></p> </li> <li> <p>Optimised quorum queue message expiry scanning</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15846" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15846/hovercard">#15846</a></p> </li> <li> <p>AMQP 0-9-1: <code>configure</code> permission checks now apply to passive queue and exchange declarations,<br> matching the behavior of their regular counterparts</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16085" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16085/hovercard">#16085</a></p> </li> <li> <p>Khepri snapshot interval is now configurable in <code>rabbitmq.conf</code></p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16011" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16011/hovercard">#16011</a></p> </li> <li> <p>Quorum queue Raft settings: additional configuration settings are now exposed in <code>rabbitmq.conf</code>,<br> including maximum segment size</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15962" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15962/hovercard">#15962</a></p> </li> </ul> <h4>Bug Fixes</h4> <ul> <li> <p>If a quorum queue with a large backlog terminated abnormally, node memory<br> footprint could spike.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15837" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15837/hovercard">#15837</a></p> </li> <li> <p><code>rabbitmqctl forget_cluster_node</code> now removes all quorum queue and stream members (replicas)<br> before proceeding to leave the metadata store cluster.</p> <p>This order minimizes the risk of some replicas being left behind on the leaving node.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15729" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15729/hovercard">#15729</a></p> </li> <li> <p>Quorum queue at-most-once dead lettering for the overflow behaviour <code>drop-head</code> now happens in the correct order.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/14926" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/14926/hovercard">#14926</a></p> </li> <li> <p>Feature flag state in the registry and on disk were not consistent for a period of time during node boot.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/14943" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/14943/hovercard">#14943</a></p> </li> <li> <p>Classic queues now implement AMQP 1.0 delivery-count and first-acquirer headers properly.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15020" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15020/hovercard">#15020</a></p> </li> <li> <p>Quorum queues returned an incorrect consumer count in the response to a passive<br> <code>queue.declare</code> operation</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16185" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16185/hovercard">#16185</a></p> </li> <li> <p>Classic queue shared store could leave stale index entries after segment removal or rollover,<br> causing unnecessary disk space usage</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16142" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16142/hovercard">#16142</a></p> </li> <li> <p>Bindings targeting <a href="https://www.rabbitmq.com/docs/direct-reply-to" rel="nofollow">Direct Reply-to</a> pseudo-queues are now rejected instead of<br> being silently accepted without any functional effect</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15935" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15935/hovercard">#15935</a></p> </li> <li> <p>AMQP 1.0 sessions could grant too many credits in certain failure and recovery scenarios</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15883" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15883/hovercard">#15883</a></p> </li> <li> <p>Quorum queues: <code>acquired-count</code> is now correctly preserved when dead-lettering</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16039" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16039/hovercard">#16039</a></p> </li> <li> <p>AMQP 1.0: attaching with a link handle already in use on the same session is now rejected<br> with a <code>handle-in-use</code> session error, as required by the specification</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16039" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16039/hovercard">#16039</a></p> </li> <li> <p>Quorum queues: Single Active Consumer could incorrectly report multiple active consumers<br> in certain timing scenarios</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15733" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15733/hovercard">#15733</a></p> </li> <li> <p>Quorum queues: consumer timeout could fail to trigger under certain conditions</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15805" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15805/hovercard">#15805</a></p> </li> <li> <p>The channel limit exceeded error message now correctly identifies the per-user limit<br> as the source of the constraint</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15750" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15750/hovercard">#15750</a></p> </li> </ul> <h3>Stream Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p><code>stream.read_ahead</code> is a new setting that controls how much data is prefetched from disk<br> for stream reads (consumption).</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/14948" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/14948/hovercard">#14948</a></p> </li> <li> <p>Stream deletion is now more resilient and can handle certain mid-deletion failure scenarios.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/14852" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/14852/hovercard">#14852</a></p> </li> <li> <p><code>new_stream</code> coordinator command is now idempotent. Previously, concurrent or retried<br> stream declarations could produce spurious errors even though the stream was created<br> successfully</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15706" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15706/hovercard">#15706</a></p> </li> </ul> <h3>Prometheus Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p><code>/metrics/detailed</code> endpoint now supports filtering queue metrics by queue name</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15689" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15689/hovercard">#15689</a></p> </li> </ul> <h3>Grafana Dashboards</h3> <h4>Enhancements</h4> <ul> <li> <p>The <a href="https://grafana.com/orgs/rabbitmq" rel="nofollow">dashboards</a> were updated for the most recent RabbitMQ release series.</p> </li> <li> <p>Replaced explicit rate intervals with <code>$__rate_interval</code> for better<br> compatibility across different scrape intervals</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15978" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15978/hovercard">#15978</a></p> </li> </ul> <h3>Management Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p><code>GET /api/queues/{vhost}</code> requests no longer perform unnecessary virtual host permission checks<br> and log less (at <code>debug</code> level) as a result.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/discussions/14923" data-hovercard-type="discussion" data-hovercard-url="/rabbitmq/rabbitmq-server/discussions/14923/hovercard">#14923</a></p> </li> <li> <p>Quorum queue delayed retry configuration and status, per-priority message counts, and consumer<br> timeout state are now displayed in the management UI.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/13885" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/13885/hovercard">#13885</a></p> </li> <li> <p><code>GET /users/{user}/queues</code> has been added.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15074" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15074/hovercard">#15074</a></p> </li> <li> <p>HTTP API displays static connection info (peer address, TLS details, auth mechanism)<br> even when stats collection is disabled via <code>rabbitmq.conf</code></p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16009" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16009/hovercard">#16009</a></p> </li> </ul> <h4>Bug Fixes</h4> <ul> <li> <p><code>effective_policy_definition</code> in HTTP API responses now returns an empty JSON object<br> (not an array or empty string) when no policy applies to a queue</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16017" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16017/hovercard">#16017</a></p> </li> <li> <p>Management UI: OAuth 2 used side by side with Basic Auth could fail to reload provider<br> configuration correctly</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15793" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15793/hovercard">#15793</a></p> </li> <li> <p>Management UI: preference cookie expiry now respects the configured session timeout<br> setting rather than using a hardcoded value</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15814" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15814/hovercard">#15814</a></p> </li> <li> <p>Management UI: users were presented with a 401 error after changing their own password<br> via the UI. The session is now refreshed automatically</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15730" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15730/hovercard">#15730</a></p> </li> <li> <p>The deprecated, unused <code>GET /api/auth</code> endpoint was removed.</p> <p>It has been out of use since 3.11 but never removed.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16083" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16083/hovercard">#16083</a></p> </li> <li> <p><code>POST /api/users/bulk-delete</code> now respects the <code>protected_users</code> configuration,<br> matching the behavior of the single-user <code>DELETE /api/users/:name</code> endpoint</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16143" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16143/hovercard">#16143</a></p> </li> </ul> <h3>MQTT Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>For MQTT 5.0 publishers, when a message is rejected because the target queue's maximum length is exceeded,<br> RabbitMQ now returns a <code>Quota exceeded</code> reason code in the PUBACK packet. This provides publishers with<br> actionable information about why their message was rejected.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15075" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15075/hovercard">#15075</a></p> </li> <li> <p>MQTT QoS 0 queue type now reports member information in management API responses</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15656" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15656/hovercard">#15656</a></p> </li> </ul> <h3>Web MQTT Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>A default <code>max_frame_size</code> is now set on WebSocket connections, bounding decompressed frame sizes.<br> The limit starts at <code>mqtt.max_packet_size_unauthenticated</code> and is raised after successful CONNECT</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16180" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16180/hovercard">#16180</a></p> </li> <li> <p>A <code>login_timeout</code> is now enforced for WebSocket connections, matching the TCP listener behavior</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16120" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16120/hovercard">#16120</a></p> </li> <li> <p>WebSocket Origin header will be validated <code>web_mqtt.allow_origins</code></p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16158" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16158/hovercard">#16158</a></p> </li> </ul> <h3>STOMP Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>For certain destinations that previously used non-durable (transient) queues,<br> STOMP subscriptions now use exclusive queues, as non-exclusive transient queues<br> are a deprecated property combination disabled by default as of this release</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/13016" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/13016/hovercard">#13016</a></p> </li> </ul> <h3>Web STOMP Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>WebSocket Origin header validation is now available via <code>web_stomp.allow_origins</code></p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16158" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16158/hovercard">#16158</a></p> </li> </ul> <h3>Federation Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>Federation links and their connections are now stopped in parallel.</p> <p>This significantly improves shutdown time for nodes with many (into thousands) federation links.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15271" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15271/hovercard">#15271</a></p> </li> <li> <p>Federation links no longer restart during plugin or node shutdown.</p> <p>For nodes with hundreds or thousands of federation links, link recovery could<br> significantly delay node shutdown.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15258" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15258/hovercard">#15258</a></p> </li> </ul> <h3>Federation Management Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Federation link restart operations now require the <code>policymaker</code> tag</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16051" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16051/hovercard">#16051</a></p> </li> </ul> <h3>Shovel Plugin</h3> <h4>Enhancements</h4> <ul> <li>An optional <code>src-consumer-name</code> property can be specified to define the consumer tag<br> (<code>amqp091</code> and <code>local</code> <code>src-protocol</code>) or link identifier (<code>amqp10</code> protocol)</li> </ul> <h4>Bug Fixes</h4> <ul> <li> <p>Improved target node resource alarm handling for AMQP 1.0 and local shovels.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/14886" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/14886/hovercard">#14886</a></p> </li> <li> <p>Local shovels could run into an exception that would cause a shovel restart.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/14872" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/14872/hovercard">#14872</a></p> </li> <li> <p>AMQP 1.0 shovels ignored the <code>sasl</code> URI parameter.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/14867" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/14867/hovercard">#14867</a></p> </li> </ul> <h3>Shovel Management Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Shovel management: DELETE operations now require the <code>policymaker</code> tag, matching the<br> federation plugin counterpart</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16051" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16051/hovercard">#16051</a></p> </li> </ul> <h3>OAuth 2 Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>A usability improvement allows the plugin to automatically load the trusted system x.509 (TLS) certificates.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/14927" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/14927/hovercard">#14927</a></p> </li> <li> <p>The auth cache backend now correctly delegates token expiry timestamps to the wrapped backend,<br> ensuring connections are closed when tokens expire</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16100" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16100/hovercard">#16100</a></p> </li> </ul> <h3>LDAP Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>LDAP queries, including multi-line ones, can now be specified in <code>rabbitmq.conf</code>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/14868" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/14868/hovercard">#14868</a></p> </li> </ul> <h4>Bug Fixes</h4> <ul> <li> <p>A usability improvement allows the plugin to automatically load the trusted system certificates<br> when the user only enables TLS for the LDAP client but does not configure any other settings.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/14937" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/14937/hovercard">#14937</a></p> </li> <li> <p>DN values are now handled per RFC 4514</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16101" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16101/hovercard">#16101</a></p> </li> </ul> <h3>HTTP Auth Backend Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>The HTTP Auth Backend can now optionally provide a custom authorization denial reason to AMQP clients.</p> <p>To opt in, return <code>deny <Reason></code> (instead of only <code>deny</code>) in the HTTP response body of your HTTP auth backend and set the following in your <code>rabbitmq.conf</code> file:</p> </li> </ul> <div class="highlight highlight-source-ini notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="auth_http.authorization_failure_disclosure = true"><pre><span class="pl-k">auth_http.authorization_failure_disclosure</span> = true</pre></div> <p>See the <a href="https://github.com/rabbitmq/rabbitmq-server/blob/main/deps/rabbitmq_auth_backend_http/README.md">README</a> for more information.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/14641" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/14641/hovercard">#14641</a></p> <h3>Sharding Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>The <code>x-modulus-hash</code> exchange type, previously provided by the sharding plugin, was moved<br> into the core and reworked to provide stable message routing (distribution)<br> assuming a stable set of bindings, including between node restarts.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15849" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15849/hovercard">#15849</a></p> </li> </ul> <h3>Trust Store Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>Refactored certificate identification to avoid (unlikely) conflicts</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16116" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16116/hovercard">#16116</a></p> </li> <li> <p>The plugin now provides CLI commands for trust store certificate management have been introduced</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15746" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15746/hovercard">#15746</a></p> </li> <li> <p>Rejected certificates are now logged with additional diagnostic details</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15889" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15889/hovercard">#15889</a></p> </li> </ul> <h3>Tracing Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Trace file downloads now set the charset to UTF-8 when serving trace files.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/13952" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/13952/hovercard">#13952</a></p> </li> </ul> <h3>Dependency Changes</h3> <ul> <li><code>ra</code> was upgraded to <a href="https://github.com/rabbitmq/ra/releases/tag/v3.1.6"><code>3.1.6</code></a></li> <li><code>khepri</code> was upgraded to <a href="https://github.com/rabbitmq/khepri/releases"><code>0.18.0</code></a></li> <li><code>osiris</code> was upgraded to <a href="https://github.com/rabbitmq/osiris/releases"><code>1.3.1</code></a></li> <li><code>gen_batch_server</code> was upgraded to <a href="https://github.com/rabbitmq/gen-batch-server/releases"><code>0.9.2</code></a></li> <li><code>cuttlefish</code> was upgraded to <a href="https://github.com/kyorai/cuttlefish/releases"><code>3.6.0</code></a></li> </ul> <h2>Source Code Archives</h2> <p>To obtain source code of the entire distribution, please download the archive named <code>rabbitmq-server-4.3.0.tar.xz</code><br> instead of the source tarball produced by GitHub.</p> michaelklishin tag:github.com,2008:Repository/924551/v4.2.6 2026-04-23T01:21:44Z

RabbitMQ 4.2.6

<p>RabbitMQ <code>4.2.6</code> is a maintenance release in the <code>4.2.x</code> <a href="https://www.rabbitmq.com/release-information" rel="nofollow">release series</a>.</p> <p>It is <strong>strongly recommended</strong> that you read <a href="https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.2.0">4.2.0 release notes</a><br> in detail if upgrading from a version prior to <code>4.2.0</code>.</p> <h3>Minimum Supported Erlang Version</h3> <p><a href="https://www.rabbitmq.com/docs/which-erlang" rel="nofollow">RabbitMQ and Erlang/OTP Compatibility Matrix</a> has more details on Erlang version requirements for RabbitMQ.</p> <p>Nodes <strong>will fail to start</strong> on older Erlang releases.</p> <h2>Changes Worth Mentioning</h2> <p>Release notes can be found on GitHub at <a href="https://github.com/rabbitmq/rabbitmq-server/tree/v4.2.x/release-notes">rabbitmq-server/release-notes</a>.</p> <h3>Core Server</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Quorum queues: <code>get_checked_out</code> aux command could return messages in incorrect order</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16008" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16008/hovercard">#16008</a></p> </li> <li> <p><code>rabbitmqctl forget_cluster_node</code> now removes all quorum queue and stream members (replicas)<br> before proceeding to leave the metadata store cluster.</p> <p>This order minimizes the risk of some replicas being left behind on the leaving node.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15729" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15729/hovercard">#15729</a></p> </li> <li> <p>The channel limit exceeded error message now correctly identifies the per-user limit<br> as the reason</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15750" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15750/hovercard">#15750</a></p> </li> <li> <p>AMQP 0-9-1: <code>configure</code> permission checks now apply to passive queue and exchange declarations,<br> matching the behavior of their regular counterparts</p> </li> <li> <p>Khepri: missing keys are now correctly distinguished from errors in certain internal operations,<br> avoiding spurious error-level log messages</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15942" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15942/hovercard">#15942</a></p> </li> <li> <p>Bindings targeting <a href="https://www.rabbitmq.com/docs/direct-reply-to" rel="nofollow">Direct Reply-to</a> pseudo-queues are now rejected instead of<br> being silently accepted without any functional effect</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15935" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15935/hovercard">#15935</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>More <code>rabbitmq.conf</code> keys now accept tagged values (e.g., <code>encrypted:...</code>)</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15808" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15808/hovercard">#15808</a></p> </li> <li> <p>When quorum queue members (replicas) are deleted from a node, either manually<br> via <code>rabbitmq-queues shrink</code> or as part of <code>rabbitmqctl forget_cluster_node</code>,<br> the members are stopped in parallel</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15081" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15081/hovercard">#15081</a></p> </li> <li> <p>AMQP 0-9-1: <code>configure</code> permission checks now apply to passive queue and exchange declarations,<br> matching the behavior of their regular counterparts</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16085" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16085/hovercard">#16085</a></p> </li> <li> <p>AMQP 0-9-1: when a connection's credentials are refreshed, the permissions cache is now<br> cleared and consumer permissions are re-validated immediately</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16092" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16092/hovercard">#16092</a></p> </li> </ul> <h3>Management Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p><code>effective_policy_definition</code> in HTTP API responses now returns an empty JSON object<br> (not an array or empty string) when no policy applies to a queue</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16017" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16017/hovercard">#16017</a></p> </li> <li> <p>Management UI: OAuth 2 combined with basic_auth could fail to reload provider<br> configuration correctly</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/15858" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/15858/hovercard">#15858</a></p> </li> <li> <p>Management UI: preference cookie expiry now respects the configured session timeout<br> setting rather than using a hardcoded value</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15814" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15814/hovercard">#15814</a></p> </li> <li> <p>Management UI: users were presented with a 401 error after changing their own password<br> via the UI. The session is now refreshed automatically</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15730" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15730/hovercard">#15730</a></p> </li> <li> <p>The deprecated, unused <code>GET /api/auth</code> endpoint was removed</p> <p>It has been out of use since 3.11 but never removed.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16083" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16083/hovercard">#16083</a></p> </li> <li> <p><code>POST /api/users/bulk-delete</code> now respects the <code>protected_users</code> configuration,<br> matching the behavior of the single-user <code>DELETE /api/users/:name</code> endpoint</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16143" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16143/hovercard">#16143</a></p> </li> <li> <p>Quorum queue status and stream tracking endpoints now enforce virtual host<br> access checks, consistent with all other vhost-scoped endpoints</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16104" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16104/hovercard">#16104</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>HTTP API displays static connection info (peer address, TLS details, auth mechanism)<br> even when stats collection is disabled via <code>rabbitmq.conf</code></p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16009" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16009/hovercard">#16009</a></p> </li> <li> <p>Super stream creation via HTTP API now verifies <code>configure</code> permission, matching<br> the stream protocol code path</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16099" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16099/hovercard">#16099</a></p> </li> <li> <p>Management API regex filters (<code>?name=...&use_regex=true</code>) now enforce match limits,<br> preventing pathological patterns from consuming excessive CPU time</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16074" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16074/hovercard">#16074</a></p> </li> </ul> <h3>MQTT Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Fixed a timing-sensitive issue around Last Will message delivery and session expiration</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15999" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15999/hovercard">#15999</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>MQTT QoS 0 queue type now reports member information in management API responses</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15656" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15656/hovercard">#15656</a></p> </li> </ul> <h3>Web MQTT Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>A default <code>max_frame_size</code> is now set on WebSocket connections, bounding decompressed frame sizes.<br> The limit starts at <code>mqtt.max_packet_size_unauthenticated</code> and is raised after successful CONNECT</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16180" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16180/hovercard">#16180</a></p> </li> <li> <p>A <code>login_timeout</code> is now enforced for WebSocket connections, matching the TCP listener behavior</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16120" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16120/hovercard">#16120</a></p> </li> <li> <p>WebSocket Origin header validation is now available via <code>web_mqtt.allow_origins</code></p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16158" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16158/hovercard">#16158</a></p> </li> </ul> <h3>Web STOMP Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>A default <code>max_frame_size</code> is now set on WebSocket connections. A smaller pre-authentication<br> limit is raised after successful STOMP CONNECT, matching the Web MQTT pattern</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16180" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16180/hovercard">#16180</a></p> </li> <li> <p>A <code>login_timeout</code> is now enforced for WebSocket connections, matching the TCP listener behavior</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16120" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16120/hovercard">#16120</a></p> </li> <li> <p>WebSocket Origin header validation is now available via <code>web_stomp.allow_origins</code></p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16158" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16158/hovercard">#16158</a></p> </li> </ul> <h3>Shovel Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>AMQP 1.0 shovels now properly detach links when closing connections, preventing<br> spurious error log entries during shutdown</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15603" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15603/hovercard">#15603</a></p> </li> <li> <p>AMQP 1.0 shovel status no longer includes full connection URIs in API responses<br> and CLI output</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16108" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16108/hovercard">#16108</a></p> </li> </ul> <h3>Shovel Management Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>DELETE operations now require the <code>policymaker</code> tag, matching the<br> federation plugin counterpart</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16051" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16051/hovercard">#16051</a></p> </li> </ul> <h3>Federation Management Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Federation link restart operations now require the <code>policymaker</code> tag</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16051" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16051/hovercard">#16051</a></p> </li> </ul> <h3>OAuth 2 Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>The auth cache backend now correctly delegates token expiry timestamps to the wrapped backend,<br> ensuring connections are closed when tokens expire</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16100" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16100/hovercard">#16100</a></p> </li> <li> <p>OAuth 2 management UI: improved provider configuration loading and rendering</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/15858" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/15858/hovercard">#15858</a></p> </li> </ul> <h3>LDAP Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>DN values are now handled per RFC 4514</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16101" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16101/hovercard">#16101</a></p> </li> </ul> <h3>Trust Store Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>Refactored certificate identification to avoid (unlikely) conflicts</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16116" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16116/hovercard">#16116</a></p> </li> <li> <p>Proper CLI commands for trust store certificate management have been introduced</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15746" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15746/hovercard">#15746</a></p> </li> <li> <p>Rejected certificates are now logged with additional diagnostic details</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15889" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15889/hovercard">#15889</a></p> </li> </ul> <h3>Consistent Hashing Exchange Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Binding weights above 10,000 are now rejected. Previously, extremely large weights could cause<br> excessive memory allocation</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16118" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16118/hovercard">#16118</a></p> </li> </ul> <h3>Dependency Changes</h3> <ul> <li><code>khepri</code> was upgraded to <a href="https://github.com/rabbitmq/khepri/releases"><code>0.17.7</code></a></li> <li><code>gen_batch_server</code> was upgraded to <a href="https://github.com/rabbitmq/gen-batch-server/releases"><code>0.9.1</code></a></li> </ul> michaelklishin tag:github.com,2008:Repository/924551/v4.3.0-rc.1 2026-04-21T04:11:38Z

RabbitMQ 4.3.0-rc.1

<p>RabbitMQ <code>4.3.0-rc.1</code> is a new feature release candidate.</p> <h2>Breaking Changes and Compatibility Notes</h2> <h3>Mnesia and Parition Handling Strategies are Removed</h3> <p>Since only <code>4.2.x</code> clusters can upgrade to <code>4.3.0</code> <a href="https://www.rabbitmq.com/docs/upgrade" rel="nofollow">in place</a>, this<br> won't be a breaking change for nearly all instalations but it will affect community<br> plugins that use Mnesia.</p> <p>All partition handling-related keys in <code>rabbitmq.conf</code> will be<br> accepted by <code>4.3.0</code> nodes but won't have any effect:</p> <ul> <li><code>cluster_partition_handling</code></li> <li><code>cluster_partition_handling.pause_if_all_down.recover</code></li> <li><code>cluster_partition_handling.pause_if_all_down.nodes.$name</code></li> </ul> <p>Team RabbitMQ recommends removing the above keys from <code>rabbitmq.conf</code> before or shortly after upgrading.</p> <h3>Deprecated Features are Now Disabled by Default</h3> <p>A number of <a href="https://www.rabbitmq.com/docs/deprecated-features" rel="nofollow">deprecated features</a> are now disabled<br> by default and require the user to opt-in in order to use them.</p> <p>This includes <a href="https://www.rabbitmq.com/docs/queues" rel="nofollow">non-durable (transient) non-exclusive</a> queues:<br> attempts to declare a queue with such property combination will be rejected by default.</p> <p>Use durable queues or transient exclusive queues instead.</p> <h3>Classic Queues v1 Storage (CQv1) is Removed</h3> <p>This release removes the original classic queue storage implementation these days<br> known as CQv1. A 2nd generation implementation called CQv2 has been adopted<br> as the default starting with <code>4.2.0</code>.</p> <p>This means that attempts to declare a queue using the following <a href="https://www.rabbitmq.com/docs/queues#optional-arguments" rel="nofollow">optional queue arguments</a> will fail:</p> <ul> <li><code>x-queue-mode</code> set to any value</li> <li><code>x-queue-version</code> set to <code>1</code></li> </ul> <p>Existing classic queues upgraded to CQv2 during an earlier upgrade to <code>4.2.x</code> will continue<br> operating as usual.</p> <h3>Consumer Timeouts are No Longer Evaluated for Classic Queues and Streams</h3> <p>This release moves consumer timeout handling responsibility into the queues<br> themselves. Also, all protocols (except for the stream protocol) now evaluate<br> consumer timeout for queue types that support them. Classic queues and streams<br> never evaluate consumer timeouts as their use cases largely avoid the need for<br> such as feature.</p> <h2>Release Highlights</h2> <h3>Khepri is Now The Only Metadata Store</h3> <p>As of this release, Khepri is the only <a href="https://www.rabbitmq.com/docs/metadata-store" rel="nofollow">metadata store</a> supported<br> by RabbitMQ: Mnesia was removed completely.</p> <p>In practical operational terms, this means that</p> <ol> <li>For a cluster to be available, a majority of nodes must be online at all times</li> <li>Failure and partition recovery in a RabbitMQ cluster is now significantly<br> simpler and uniform: all components that have replicated state (Khepri, quorum queues, streams)<br> recover per Raft recovery semantics</li> </ol> <h3>Quorum Queues Enhancements</h3> <p>This release upgrades the <a href="https://github.com/rabbitmq/ra">Ra</a> dependency to <code>3.x</code> and introduces<br> a new (8th) version of the quorum queue state machine with several new features and optimisations:</p> <ul> <li><strong>Strict priority queues</strong> with per-priority message counts, correct<br> redelivery ordering, and priority-aware message expiration</li> <li><strong>Delayed retry</strong> for quorum queues: configurable increasing backoff when<br> messages are returned</li> <li><strong>Consumer timeout</strong> for quorum queues: configurable timeout for<br> unacknowledged messages, with protocol-specific handling for AMQP 1.0 and<br> MQTT</li> <li><strong>Recovery snapshots</strong> and <strong>snapshot throttling</strong> to reduce recovery time<br> and improve snapshotting decisions</li> <li><strong>Memory optimisations</strong> including compact message references, optimised<br> tuple storage for delayed keys, and removal of <code>rabbit_fifo_index</code> usage</li> </ul> <h2>Upgrading to 4.3.0</h2> <h3>Documentation Guides on Upgrades</h3> <p>See the <a href="https://www.rabbitmq.com/docs/upgrade" rel="nofollow">Upgrading guide</a> for documentation on upgrades and <a href="https://github.com/rabbitmq/rabbitmq-server/releases">GitHub releases</a><br> for release notes of individual releases.</p> <p>This release series supports upgrades from <code>4.2.x</code>. Upgrades from earlier series are <strong>not</strong> supported:<br> users must upgrade to the latest available <code>4.2.x</code> patch release before upgrading to <code>4.3.0</code>.</p> <h3>New Required Feature Flags</h3> <p>All feature flags introduced in <code>4.2.0</code> and earlier are required, including the following:</p> <ul> <li><code>rabbitmq_4.2.0</code></li> <li><code>rabbitmq_4.1.0</code></li> <li><code>rabbitmq_4.0.0</code></li> <li><code>khepri_db</code></li> <li><code>quorum_queue_non_voters</code></li> <li><code>message_containers_deaths_v2</code></li> </ul> <p>Enable all required feature flags before upgrading to <code>4.3.0</code>.</p> <p>If your RabbitMQ cluster had plugin <code>rabbitmq_amqp1_0</code> enabled in RabbitMQ <code>3.13.x</code> (and your cluster still serves AMQP 1.0 client connections in <code>4.x</code>), your cluster should do at least one rolling update <strong>after</strong> enabling feature flag <code>rabbitmq_4.0.0</code> but <strong>before</strong> upgrading to <code>4.3.0</code>.</p> <h3>Deprecated Features</h3> <p>In <code>4.3.0</code> the <a href="https://www.rabbitmq.com/docs/deprecated-features" rel="nofollow">deprecation phase</a> of the following features advanced from <code>permitted_by_default</code> to <code>denied_by_default</code>:</p> <ul> <li><code>amqp_address_v1</code></li> <li><code>amqp_filter_set_bug</code></li> <li><code>global_qos</code></li> <li><code>queue_master_locator</code></li> <li><code>transient_nonexcl_queues</code></li> </ul> <p>And the deprecated feature <code>ram_node_type</code> has been removed.</p> <h3>Mixed Version Cluster Compatibility</h3> <p>RabbitMQ 4.3.0 nodes can run alongside <code>4.2.x</code> in the same cluster.</p> <p>Mixed version clusters are a mechanism that allows rolling upgrades and are not meant to be run for extended<br> periods of time (no more than a few hours).</p> <h3>Recommended Post-upgrade Procedures</h3> <p>This version does not require any additional post-upgrade procedures<br> compared to other versions.</p> <h2>Changes Worth Mentioning</h2> <h3>Core Server</h3> <h4>Enhancements</h4> <ul> <li> <p>When a message is rejected by a queue, RabbitMQ now provides the queue name and rejection reason to AMQP 1.0 publishers<br> in the <code>Rejected</code> outcome. This is particularly useful when multiple queues are bound to an exchange, as it allows<br> publishers to identify which specific queue out of several target queues rejected the message and why<br> (e.g., maximum queue length reached or queue unavailable). Previously, publishers had no way to determine which queue<br> rejected their message or the reason for rejection.</p> <p>The queue name and reason are included in the <code>info</code> field of the <code>Rejected</code> outcome's <code>error</code> field:</p> <ul> <li><code>queue: <queue name></code></li> <li><code>reason: maxlen | unavailable</code></li> </ul> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15075" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15075/hovercard">#15075</a></p> </li> <li> <p>Quorum queues now support <strong>strict priority queues</strong> with per-priority message counts,<br> correct redelivery ordering across priorities, and priority-aware message expiration scans.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/13885" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/13885/hovercard">#13885</a></p> </li> <li> <p>Quorum queues now support <strong>delayed retry</strong> with configurable backoff based on delivery count. When messages<br> are returned (via reject, nack, or modify), they can be held in a delayed state before becoming<br> available again. The delay is based on delivery count: <code>min(min_delay * delivery_count, max_delay)</code>.</p> <p>Configuration is available via queue arguments (<code>x-delayed-retry-type</code>, <code>x-delayed-retry-min</code>,<br> <code>x-delayed-retry-max</code>) or policy keys (<code>delayed-retry-type</code>, <code>delayed-retry-min</code>,<br> <code>delayed-retry-max</code>). The retry type can be set to <code>disabled</code>, <code>all</code>, <code>failed</code>, or <code>returned</code>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/13885" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/13885/hovercard">#13885</a></p> </li> <li> <p>Quorum queues now support a configurable <strong>consumer timeout</strong>. When a consumer holds unacknowledged<br> messages beyond the timeout, the messages are returned to the queue. For AMQP 1.0 clients,<br> timed-out deliveries are released via <code>DISPOSITION(state=released)</code> instead of detaching the link,<br> allowing the consumer to recover without re-attaching. MQTT consumers are also supported.</p> <p>The timeout can be set via the <code>x-consumer-timeout</code> consumer argument, queue argument, <code>consumer-timeout</code><br> policy key, or the global <code>consumer_timeout</code> setting in <code>rabbitmq.conf</code>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/13885" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/13885/hovercard">#13885</a></p> </li> <li> <p>A new <code>consumer_disconnected_timeout</code> setting controls how long quorum queues wait before returning<br> messages when a consumer's node becomes unreachable due to a network partition. The default is 60 seconds.<br> Configurable via <code>consumer_disconnected_timeout</code> in <code>rabbitmq.conf</code>, the <code>consumer-disconnected-timeout</code><br> policy key, or the <code>x-consumer-disconnected-timeout</code> queue argument.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/13885" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/13885/hovercard">#13885</a></p> </li> <li> <p>Quorum queue <strong>recovery snapshots</strong> reduce recovery time after a member restart by avoiding<br> the need to replay all enqueue commands from the log.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/13885" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/13885/hovercard">#13885</a></p> </li> <li> <p>Quorum queue <strong>snapshot throttling</strong> now uses WAL fill ratio and reclaimable byte tracking<br> to make smarter snapshotting decisions, yielding roughly one snapshot per queue per WAL cycle<br> instead of excessive snapshots in shallow, fast-flowing queues.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/13885" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/13885/hovercard">#13885</a></p> </li> <li> <p>Quorum queue <strong>memory optimisations</strong>: message references now use a compact packed integer<br> representation ("compact" means up to 59-bit) when possible, <strong>halving per-message<br> memory overhead</strong> in many scenarios. The <code>rabbit_fifo_index</code> module is no longer used by the<br> main state machine.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/13885" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/13885/hovercard">#13885</a></p> </li> <li> <p>Quorum queues now allow unlimited explicit message returns. The delivery limit is based on<br> <code>delivery-count</code> rather than <code>acquired-count</code>, so messages can be explicitly returned to the<br> queue without counting towards the delivery limit.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/13885" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/13885/hovercard">#13885</a></p> </li> <li> <p>The <code>x-modulus-hash</code> exchange type, previously provided by the sharding plugin, was moved<br> into the core and reworked to provide stable message routing (distribution)<br> assuming a stable set of bindings, including between node restarts.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15849" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15849/hovercard">#15849</a></p> </li> <li> <p>When quorum queue members (replicas) are deleted from a node, either manually<br> via <code>rabbitmq-queues shrink</code> or as part of <code>rabbitmqctl forget_cluster_node</code>,<br> the members are stopped in parallel.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15081" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15081/hovercard">#15081</a></p> </li> <li> <p>Purging a quorum queue now also removes at-least-once dead-lettered messages that were pending delivery.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/13885" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/13885/hovercard">#13885</a></p> </li> <li> <p>AMQP 0-9-1: when a connection's credentials are refreshed, the permissions cache is now<br> cleared and consumer permissions are re-validated immediately</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16092" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16092/hovercard">#16092</a></p> </li> <li> <p>Quorum queue delivery limit can now be changed via policy without queue redeclaration</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16035" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16035/hovercard">#16035</a></p> </li> <li> <p>Khepri topic exchange routing projection (v4): replaced the internal representation with a trie<br> backed by an <code>ordered_set</code> ETS table, significantly improving routing performance<br> for topic exchanges with many bindings</p> <p>GitHub commit: <a href="https://github.com/rabbitmq/rabbitmq-server/commit/8929bc5ab4"><code>8929bc5ab4</code></a></p> </li> <li> <p>Quorum queues notify AMQP 1.0 clients of Single Active Consumer state changes</p> <p>GitHub commit: <a href="https://github.com/rabbitmq/rabbitmq-server/commit/817a4d4351"><code>817a4d4351</code></a></p> </li> <li> <p>More <code>rabbitmq.conf</code> keys now accept tagged values (e.g., <code>encrypted:...</code>)</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15808" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15808/hovercard">#15808</a></p> </li> <li> <p>Startup banner no longer includes the Erlang cookie hash</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16087" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16087/hovercard">#16087</a></p> </li> <li> <p>Optimised AMQP 1.0 message container annotation handling during modify outcomes</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15743" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15743/hovercard">#15743</a></p> </li> <li> <p>Bulk queue delete with Khepri has been optimized</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/14902" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/14902/hovercard">#14902</a></p> </li> <li> <p>Optimised quorum queue message expiry scanning</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15846" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15846/hovercard">#15846</a></p> </li> <li> <p>AMQP 0-9-1: <code>configure</code> permission checks now apply to passive queue and exchange declarations,<br> matching the behavior of their regular counterparts</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16085" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16085/hovercard">#16085</a></p> </li> <li> <p>Khepri snapshot interval is now configurable in <code>rabbitmq.conf</code></p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16011" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16011/hovercard">#16011</a></p> </li> <li> <p>Quorum queue Raft settings: additional configuration settings are now exposed in <code>rabbitmq.conf</code>,<br> including maximum segment size</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15962" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15962/hovercard">#15962</a></p> </li> </ul> <h4>Bug Fixes</h4> <ul> <li> <p>If a quorum queue with a large backlog terminated abnormally, node memory<br> footprint could spike.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15837" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15837/hovercard">#15837</a></p> </li> <li> <p><code>rabbitmqctl forget_cluster_node</code> now removes all quorum queue and stream members (replicas)<br> before proceeding to leave the metadata store cluster.</p> <p>This order minimizes the risk of some replicas being left behind on the leaving node.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15729" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15729/hovercard">#15729</a></p> </li> <li> <p>Quorum queue at-most-once dead lettering for the overflow behaviour <code>drop-head</code> now happens in the correct order.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/14926" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/14926/hovercard">#14926</a></p> </li> <li> <p>Feature flag state in the registry and on disk were not consistent for a period of time during node boot.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/14943" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/14943/hovercard">#14943</a></p> </li> <li> <p>Classic queues now implement AMQP 1.0 delivery-count and first-acquirer headers properly.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15020" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15020/hovercard">#15020</a></p> </li> <li> <p>Quorum queues returned an incorrect consumer count in the response to a passive<br> <code>queue.declare</code> operation</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16185" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16185/hovercard">#16185</a></p> </li> <li> <p>Classic queue shared store could leave stale index entries after segment removal or rollover,<br> causing unnecessary disk space usage</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16142" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16142/hovercard">#16142</a></p> </li> <li> <p>Bindings targeting <a href="https://www.rabbitmq.com/docs/direct-reply-to" rel="nofollow">Direct Reply-to</a> pseudo-queues are now rejected instead of<br> being silently accepted without any functional effect</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15935" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15935/hovercard">#15935</a></p> </li> <li> <p>AMQP 1.0 sessions could grant too many credits in certain failure and recovery scenarios</p> <p>GitHub commit: <a href="https://github.com/rabbitmq/rabbitmq-server/commit/1898ac1f3f"><code>1898ac1f3f</code></a></p> </li> <li> <p>Quorum queues: <code>acquired-count</code> is now correctly preserved when dead-lettering</p> <p>GitHub commit: <a href="https://github.com/rabbitmq/rabbitmq-server/commit/8a9cd3ee24"><code>8a9cd3ee24</code></a></p> </li> <li> <p>AMQP 1.0: attaching with a link handle already in use on the same session is now rejected<br> with a <code>handle-in-use</code> session error, as required by the specification</p> <p>GitHub commit: <a href="https://github.com/rabbitmq/rabbitmq-server/commit/4b59c19641"><code>4b59c19641</code></a></p> </li> <li> <p>Quorum queues: Single Active Consumer could incorrectly report multiple active consumers<br> in certain timing scenarios</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15733" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15733/hovercard">#15733</a></p> </li> <li> <p>Quorum queues: consumer timeout could fail to trigger under certain conditions</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15805" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15805/hovercard">#15805</a></p> </li> <li> <p>The channel limit exceeded error message now correctly identifies the per-user limit<br> as the source of the constraint</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15750" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15750/hovercard">#15750</a></p> </li> </ul> <h3>Stream Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p><code>stream.read_ahead</code> is a new setting that controls how much data is prefetched from disk<br> for stream reads (consumption).</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/14948" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/14948/hovercard">#14948</a></p> </li> <li> <p>Stream deletion is now more resilient and can handle certain mid-deletion failure scenarios.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/14852" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/14852/hovercard">#14852</a></p> </li> <li> <p><code>new_stream</code> coordinator command is now idempotent. Previously, concurrent or retried<br> stream declarations could produce spurious errors even though the stream was created<br> successfully</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15706" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15706/hovercard">#15706</a></p> </li> </ul> <h3>Prometheus Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p><code>/metrics/detailed</code> endpoint now supports filtering queue metrics by queue name</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15689" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15689/hovercard">#15689</a></p> </li> </ul> <h3>Grafana Dashboards</h3> <h4>Enhancements</h4> <ul> <li> <p>The <a href="https://grafana.com/orgs/rabbitmq" rel="nofollow">dashboards</a> were updated for the most recent RabbitMQ release series.</p> </li> <li> <p>Replaced explicit rate intervals with <code>$__rate_interval</code> for better<br> compatibility across different scrape intervals</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15978" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15978/hovercard">#15978</a></p> </li> </ul> <h3>Management Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p><code>GET /api/queues/{vhost}</code> requests no longer perform unnecessary virtual host permission checks<br> and log less (at <code>debug</code> level) as a result.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/discussions/14923" data-hovercard-type="discussion" data-hovercard-url="/rabbitmq/rabbitmq-server/discussions/14923/hovercard">#14923</a></p> </li> <li> <p>Quorum queue delayed retry configuration and status, per-priority message counts, and consumer<br> timeout state are now displayed in the management UI.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/13885" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/13885/hovercard">#13885</a></p> </li> <li> <p><code>GET /users/{user}/queues</code> has been added.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15074" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15074/hovercard">#15074</a></p> </li> <li> <p>HTTP API displays static connection info (peer address, TLS details, auth mechanism)<br> even when stats collection is disabled via <code>rabbitmq.conf</code></p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16009" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16009/hovercard">#16009</a></p> </li> </ul> <h4>Bug Fixes</h4> <ul> <li> <p><code>effective_policy_definition</code> in HTTP API responses now returns an empty JSON object<br> (not an array or empty string) when no policy applies to a queue</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16017" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16017/hovercard">#16017</a></p> </li> <li> <p>Management UI: OAuth 2 used side by side with Basic Auth could fail to reload provider<br> configuration correctly</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15793" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15793/hovercard">#15793</a></p> </li> <li> <p>Management UI: preference cookie expiry now respects the configured session timeout<br> setting rather than using a hardcoded value</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15814" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15814/hovercard">#15814</a></p> </li> <li> <p>Management UI: users were presented with a 401 error after changing their own password<br> via the UI. The session is now refreshed automatically</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15730" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15730/hovercard">#15730</a></p> </li> <li> <p>The deprecated, unused <code>GET /api/auth</code> endpoint was removed.</p> <p>It has been out of use since 3.11 but never removed.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16083" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16083/hovercard">#16083</a></p> </li> <li> <p><code>POST /api/users/bulk-delete</code> now respects the <code>protected_users</code> configuration,<br> matching the behavior of the single-user <code>DELETE /api/users/:name</code> endpoint</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16143" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16143/hovercard">#16143</a></p> </li> </ul> <h3>MQTT Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>For MQTT 5.0 publishers, when a message is rejected because the target queue's maximum length is exceeded,<br> RabbitMQ now returns a <code>Quota exceeded</code> reason code in the PUBACK packet. This provides publishers with<br> actionable information about why their message was rejected.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15075" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15075/hovercard">#15075</a></p> </li> <li> <p>MQTT QoS 0 queue type now reports member information in management API responses</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15656" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15656/hovercard">#15656</a></p> </li> </ul> <h3>Web MQTT Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>A default <code>max_frame_size</code> is now set on WebSocket connections, bounding decompressed frame sizes.<br> The limit starts at <code>mqtt.max_packet_size_unauthenticated</code> and is raised after successful CONNECT</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16180" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16180/hovercard">#16180</a></p> </li> <li> <p>A <code>login_timeout</code> is now enforced for WebSocket connections, matching the TCP listener behavior</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16120" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16120/hovercard">#16120</a></p> </li> <li> <p>WebSocket Origin header will be validated <code>web_mqtt.allow_origins</code></p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16158" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16158/hovercard">#16158</a></p> </li> </ul> <h3>STOMP Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>For certain destinations that previously used non-durable (transient) queues,<br> STOMP subscriptions now use exclusive queues, as non-exclusive transient queues<br> are a deprecated property combination disabled by default as of this release</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/13016" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/13016/hovercard">#13016</a></p> </li> </ul> <h3>Web STOMP Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>WebSocket Origin header validation is now available via <code>web_stomp.allow_origins</code></p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16158" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16158/hovercard">#16158</a></p> </li> </ul> <h3>Federation Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>Federation links and their connections are now stopped in parallel.</p> <p>This significantly improves shutdown time for nodes with many (into thousands) federation links.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15271" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15271/hovercard">#15271</a></p> </li> <li> <p>Federation links no longer restart during plugin or node shutdown.</p> <p>For nodes with hundreds or thousands of federation links, link recovery could<br> significantly delay node shutdown.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15258" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15258/hovercard">#15258</a></p> </li> </ul> <h3>Federation Management Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Federation link restart operations now require the <code>policymaker</code> tag</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16051" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16051/hovercard">#16051</a></p> </li> </ul> <h3>Shovel Plugin</h3> <h4>Enhancements</h4> <ul> <li>An optional <code>src-consumer-name</code> property can be specified to define the consumer tag<br> (<code>amqp091</code> and <code>local</code> <code>src-protocol</code>) or link identifier (<code>amqp10</code> protocol)</li> </ul> <h4>Bug Fixes</h4> <ul> <li> <p>Improved target node resource alarm handling for AMQP 1.0 and local shovels.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/14886" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/14886/hovercard">#14886</a></p> </li> <li> <p>Local shovels could run into an exception that would cause a shovel restart.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/14872" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/14872/hovercard">#14872</a></p> </li> <li> <p>AMQP 1.0 shovels ignored the <code>sasl</code> URI parameter.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/14867" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/14867/hovercard">#14867</a></p> </li> </ul> <h3>Shovel Management Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Shovel management: DELETE operations now require the <code>policymaker</code> tag, matching the<br> federation plugin counterpart</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16051" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16051/hovercard">#16051</a></p> </li> </ul> <h3>OAuth 2 Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>A usability improvement allows the plugin to automatically load the trusted system x.509 (TLS) certificates.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/14927" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/14927/hovercard">#14927</a></p> </li> <li> <p>The auth cache backend now correctly delegates token expiry timestamps to the wrapped backend,<br> ensuring connections are closed when tokens expire</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16100" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16100/hovercard">#16100</a></p> </li> </ul> <h3>LDAP Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>LDAP queries, including multi-line ones, can now be specified in <code>rabbitmq.conf</code>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/14868" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/14868/hovercard">#14868</a></p> </li> </ul> <h4>Bug Fixes</h4> <ul> <li> <p>A usability improvement allows the plugin to automatically load the trusted system certificates<br> when the user only enables TLS for the LDAP client but does not configure any other settings.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/14937" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/14937/hovercard">#14937</a></p> </li> <li> <p>DN values are now handled per RFC 4514</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16101" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16101/hovercard">#16101</a></p> </li> </ul> <h3>HTTP Auth Backend Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>The HTTP Auth Backend can now optionally provide a custom authorization denial reason to AMQP clients.</p> <p>To opt in, return <code>deny <Reason></code> (instead of only <code>deny</code>) in the HTTP response body of your HTTP auth backend and set the following in your <code>rabbitmq.conf</code> file:</p> </li> </ul> <div class="highlight highlight-source-ini notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="auth_http.authorization_failure_disclosure = true"><pre><span class="pl-k">auth_http.authorization_failure_disclosure</span> = true</pre></div> <p>See the <a href="https://github.com/rabbitmq/rabbitmq-server/blob/main/deps/rabbitmq_auth_backend_http/README.md">README</a> for more information.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/14641" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/14641/hovercard">#14641</a></p> <h3>Sharding Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>The <code>x-modulus-hash</code> exchange type, previously provided by the sharding plugin, was moved<br> into the core and reworked to provide stable message routing (distribution)<br> assuming a stable set of bindings, including between node restarts.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15849" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15849/hovercard">#15849</a></p> </li> </ul> <h3>Trust Store Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>Refactored certificate identification to avoid (unlikely) conflicts</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16116" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16116/hovercard">#16116</a></p> </li> <li> <p>The plugin now provides CLI commands for trust store certificate management have been introduced</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15746" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15746/hovercard">#15746</a></p> </li> <li> <p>Rejected certificates are now logged with additional diagnostic details</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15889" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15889/hovercard">#15889</a></p> </li> </ul> <h3>Tracing Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Trace file downloads now set the charset to UTF-8 when serving trace files.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/13952" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/13952/hovercard">#13952</a></p> </li> </ul> <h3>Dependency Changes</h3> <ul> <li><code>ra</code> was upgraded to <a href="https://github.com/rabbitmq/ra/releases/tag/v3.1.5"><code>3.1.5</code></a></li> <li><code>khepri</code> was upgraded to <a href="https://github.com/rabbitmq/khepri/releases"><code>0.18.0</code></a></li> <li><code>osiris</code> was upgraded to <a href="https://github.com/rabbitmq/osiris/releases"><code>1.3.1</code></a></li> <li><code>gen_batch_server</code> was upgraded to <a href="https://github.com/rabbitmq/gen-batch-server/releases"><code>0.9.2</code></a></li> <li><code>cuttlefish</code> was upgraded to <a href="https://github.com/kyorai/cuttlefish/releases"><code>3.6.0</code></a></li> </ul> <h2>Source Code Archives</h2> <p>To obtain source code of the entire distribution, please download the archive named <code>rabbitmq-server-4.3.0.tar.xz</code><br> instead of the source tarball produced by GitHub.</p> michaelklishin tag:github.com,2008:Repository/924551/v4.3.0-rc.0 2026-04-03T03:20:41Z

RabbitMQ 4.3.0-rc.0

<p>RabbitMQ <code>4.3.0-rc.0</code> is a preview of a new feature release.</p> <h2>Breaking Changes and Compatibility Notes</h2> <h3>Mnesia and Parition Handling Strategies are Removed</h3> <p>Since only <code>4.2.x</code> clusters can upgrade to <code>4.3.0</code> <a href="https://www.rabbitmq.com/docs/upgrade" rel="nofollow">in place</a>, this<br> won't be a breaking change for nearly all instalations but it will affect community<br> plugins that use Mnesia.</p> <p>All partition handling-related keys in <code>rabbitmq.conf</code> will be<br> accepted by <code>4.3.0</code> nodes but won't have any effect:</p> <ul> <li><code>cluster_partition_handling</code></li> <li><code>cluster_partition_handling.pause_if_all_down.recover</code></li> <li><code>cluster_partition_handling.pause_if_all_down.nodes.$name</code></li> </ul> <p>Still, Team RabbitMQ recommends removing the above keys from <code>rabbitmq.conf</code> before or shortly<br> after upgrading.</p> <h3>Classic Queues v1 Storage (CQv1) is Removed</h3> <p>This release removes the original classic queue storage implementation these days<br> known as CQv1. A 2nd generation implementation called CQv2 has been adopted<br> as the default starting with <code>4.2.0</code>.</p> <p>This means that attempts to declare a queue using the following <a href="https://www.rabbitmq.com/docs/queues#optional-arguments" rel="nofollow">optional queue arguments</a> will fail:</p> <ul> <li><code>x-queue-mode</code> set to any value</li> <li><code>x-queue-version</code> set to <code>1</code></li> </ul> <p>Existing classic queues upgraded to CQv2 during an earlier upgrade to <code>4.2.x</code> will continue<br> operating as usual.</p> <h3>Consumer Timeouts are No Longer Evaluated for Classic Queues and Streams</h3> <p>This release moves consumer timeout handling responsibility into the queues<br> themselves. Also, all protocols (except the stream protocol) now evaluate<br> consumer timeout for queue types that support them. Classic queues and streams<br> never evaluate consumer timeouts as their use cases cause less demand for it.</p> <h2>Release Highlights</h2> <h3>Khepri is Now The Only Metadata Store</h3> <p>As of this release, Khepri is the only <a href="https://www.rabbitmq.com/docs/metadata-store" rel="nofollow">metadata store</a> supported<br> by RabbitMQ: Mnesia was removed completely.</p> <p>In practical operational terms, this means that</p> <ol> <li>For a cluster to be available, a majority of nodes must be online at all times</li> <li>Failure and partition recovery in a RabbitMQ cluster is now significantly<br> simpler and uniform: all components that have replicated state (Khepri, quorum queues, streams)<br> recover per Raft recovery semantics</li> </ol> <h3>Quorum Queues Enhancements</h3> <p>This release upgrades the <a href="https://github.com/rabbitmq/ra">Ra</a> dependency to <code>3.x</code> and introduces<br> a new (8th) version of the quorum queue state machine with several new features and optimisations:</p> <ul> <li><strong>Strict priority queues</strong> with per-priority message counts, correct<br> redelivery ordering, and priority-aware message expiration</li> <li><strong>Delayed retry</strong> for quorum queues: configurable increasing backoff when<br> messages are returned</li> <li><strong>Consumer timeout</strong> for quorum queues: configurable timeout for<br> unacknowledged messages, with protocol-specific handling for AMQP 1.0 and<br> MQTT</li> <li><strong>Recovery snapshots</strong> and <strong>snapshot throttling</strong> to reduce recovery time<br> and improve snapshotting decisions</li> <li><strong>Memory optimisations</strong> including compact message references, optimised<br> tuple storage for delayed keys, and removal of <code>rabbit_fifo_index</code> usage</li> </ul> <h2>Upgrading to 4.3.0</h2> <h3>Documentation guides on upgrades</h3> <p>See the <a href="https://www.rabbitmq.com/docs/upgrade" rel="nofollow">Upgrading guide</a> for documentation on upgrades and <a href="https://github.com/rabbitmq/rabbitmq-server/releases">GitHub releases</a><br> for release notes of individual releases.</p> <p>This release series supports upgrades from <code>4.2.x</code>. Upgrades from earlier series are <strong>not</strong> supported:<br> users must upgrade to the latest available <code>4.2.x</code> patch release before upgrading to <code>4.3.0</code>.</p> <h3>New Required Feature Flags</h3> <p>All feature flags introduced in <code>4.2.0</code> and earlier are required, including the following:</p> <ul> <li><code>rabbitmq_4.2.0</code></li> <li><code>rabbitmq_4.1.0</code></li> <li><code>rabbitmq_4.0.0</code></li> <li><code>khepri_db</code></li> <li><code>quorum_queue_non_voters</code></li> <li><code>message_containers_deaths_v2</code></li> </ul> <p>Enable all required feature flags before upgrading to <code>4.3.0</code>.</p> <p>If your RabbitMQ cluster had plugin <code>rabbitmq_amqp1_0</code> enabled in RabbitMQ <code>3.13.x</code> (and your cluster still serves AMQP 1.0 client connections in <code>4.x</code>), your cluster should do at least one rolling update <strong>after</strong> enabling feature flag <code>rabbitmq_4.0.0</code> but <strong>before</strong> upgrading to <code>4.3.0</code>.</p> <h3>Deprecated Features</h3> <p>In <code>4.3.0</code> the <a href="https://www.rabbitmq.com/docs/deprecated-features" rel="nofollow">deprecation phase</a> of the following features advanced from <code>permitted_by_default</code> to <code>denied_by_default</code>:</p> <ul> <li><code>amqp_address_v1</code></li> <li><code>amqp_filter_set_bug</code></li> <li><code>global_qos</code></li> <li><code>queue_master_locator</code></li> <li><code>transient_nonexcl_queues</code></li> </ul> <p>And the deprecated feature <code>ram_node_type</code> has been removed.</p> <h3>Mixed version cluster compatibility</h3> <p>RabbitMQ 4.3.0 nodes can run alongside <code>4.2.x</code> in the same cluster.</p> <p>Mixed version clusters are a mechanism that allows rolling upgrades and are not meant to be run for extended<br> periods of time (no more than a few hours).</p> <h3>Recommended Post-upgrade Procedures</h3> <p>This version does not require any additional post-upgrade procedures<br> compared to other versions.</p> <h2>Changes Worth Mentioning</h2> <h3>Core Server</h3> <h4>Enhancements</h4> <ul> <li> <p>When a message is rejected by a queue, RabbitMQ now provides the queue name and rejection reason to AMQP 1.0 publishers<br> in the <code>Rejected</code> outcome. This is particularly useful when multiple queues are bound to an exchange, as it allows<br> publishers to identify which specific queue out of several target queues rejected the message and why<br> (e.g., maximum queue length reached or queue unavailable). Previously, publishers had no way to determine which queue<br> rejected their message or the reason for rejection.</p> <p>The queue name and reason are included in the <code>info</code> field of the <code>Rejected</code> outcome's <code>error</code> field:</p> <ul> <li><code>queue: <queue name></code></li> <li><code>reason: maxlen | unavailable</code></li> </ul> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15075" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15075/hovercard">#15075</a></p> </li> <li> <p>Quorum queues now support <strong>strict priority queues</strong> with per-priority message counts,<br> correct redelivery ordering across priorities, and priority-aware message expiration scans.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/13885" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/13885/hovercard">#13885</a></p> </li> <li> <p>Quorum queues now support <strong>delayed retry</strong> with configurable backoff based on delivery count. When messages<br> are returned (via reject, nack, or modify), they can be held in a delayed state before becoming<br> available again. The delay is based on delivery count: <code>min(min_delay * delivery_count, max_delay)</code>.</p> <p>Configuration is available via queue arguments (<code>x-delayed-retry-type</code>, <code>x-delayed-retry-min</code>,<br> <code>x-delayed-retry-max</code>) or policy keys (<code>delayed-retry-type</code>, <code>delayed-retry-min</code>,<br> <code>delayed-retry-max</code>). The retry type can be set to <code>disabled</code>, <code>all</code>, <code>failed</code>, or <code>returned</code>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/13885" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/13885/hovercard">#13885</a></p> </li> <li> <p>Quorum queues now support a configurable <strong>consumer timeout</strong>. When a consumer holds unacknowledged<br> messages beyond the timeout, the messages are returned to the queue. For AMQP 1.0 clients,<br> timed-out deliveries are released via <code>DISPOSITION(state=released)</code> instead of detaching the link,<br> allowing the consumer to recover without re-attaching. MQTT consumers are also supported.</p> <p>The timeout can be set via the <code>x-consumer-timeout</code> consumer argument, queue argument, <code>consumer-timeout</code><br> policy key, or the global <code>consumer_timeout</code> setting in <code>rabbitmq.conf</code>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/13885" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/13885/hovercard">#13885</a></p> </li> <li> <p>A new <code>consumer_disconnected_timeout</code> setting controls how long quorum queues wait before returning<br> messages when a consumer's node becomes unreachable due to a network partition. The default is 60 seconds.<br> Configurable via <code>consumer_disconnected_timeout</code> in <code>rabbitmq.conf</code>, the <code>consumer-disconnected-timeout</code><br> policy key, or the <code>x-consumer-disconnected-timeout</code> queue argument.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/13885" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/13885/hovercard">#13885</a></p> </li> <li> <p>Quorum queue <strong>recovery snapshots</strong> reduce recovery time after a member restart by avoiding<br> the need to replay all enqueue commands from the log.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/13885" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/13885/hovercard">#13885</a></p> </li> <li> <p>Quorum queue <strong>snapshot throttling</strong> now uses WAL fill ratio and reclaimable byte tracking<br> to make smarter snapshotting decisions, yielding roughly one snapshot per queue per WAL cycle<br> instead of excessive snapshots in shallow, fast-flowing queues.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/13885" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/13885/hovercard">#13885</a></p> </li> <li> <p>Quorum queue <strong>memory optimisations</strong>: message references now use a compact packed integer<br> representation ("compact" means up to 59-bit) when possible, <strong>halving per-message<br> memory overhead</strong> in many scenarios. The <code>rabbit_fifo_index</code> module is no longer used by the<br> main state machine.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/13885" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/13885/hovercard">#13885</a></p> </li> <li> <p>Quorum queues now allow unlimited explicit message returns. The delivery limit is based on<br> <code>delivery-count</code> rather than <code>acquired-count</code>, so messages can be explicitly returned to the<br> queue without counting towards the delivery limit.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/13885" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/13885/hovercard">#13885</a></p> </li> <li> <p>When quorum queue members (replicas) are deleted from a node, either manually<br> via <code>rabbitmq-queues shrink</code> or as part of <code>rabbitmqctl forget_cluster_node</code>,<br> the members are stopped in parallel.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15081" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15081/hovercard">#15081</a></p> </li> <li> <p>Purging a quorum queue now also removes at-least-once dead-lettered messages that were pending delivery.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/13885" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/13885/hovercard">#13885</a></p> </li> </ul> <h4>Bug Fixes</h4> <ul> <li> <p>If a quorum queue with a large backlog terminated abnormally, node memory<br> footprint could spike.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15837" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15837/hovercard">#15837</a></p> </li> <li> <p><code>rabbitmqctl forget_cluster_node</code> now removes all quorum queue and stream members (replicas)<br> before proceeding to leave the metadata store cluster.</p> <p>This order minimizes the risk of some replicas being left behind on the leaving node.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15729" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15729/hovercard">#15729</a></p> </li> <li> <p>Quorum queue at-most-once dead lettering for the overflow behaviour <code>drop-head</code> now happens in the correct order.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/14926" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/14926/hovercard">#14926</a></p> </li> <li> <p>Feature flag state in the registry and on disk were not consistent for a period of time during node boot.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/14943" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/14943/hovercard">#14943</a></p> </li> <li> <p>Classic queues now implement AMQP 1.0 delivery-count and first-acquirer headers properly.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15020" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15020/hovercard">#15020</a></p> </li> </ul> <h3>Stream Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p><code>stream.read_ahead</code> is a new setting that controls how much data is prefetched from disk<br> for stream reads (consumption).</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/14948" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/14948/hovercard">#14948/</a></p> </li> <li> <p>Stream deletion is now more resilient and can handle certain mid-deletion failure scenarios.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/14852" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/14852/hovercard">#14852</a></p> </li> </ul> <h3>Grafana Dashboards</h3> <h4>Enhancements</h4> <ul> <li>The <a href="https://grafana.com/orgs/rabbitmq" rel="nofollow">dashboards</a> were updated for the most recent RabbitMQ release series.</li> </ul> <h3>Management Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p><code>GET /api/queues/{vhost}</code> requests no longer perform unnecessary virtual host permission checks<br> and log less (at <code>debug</code> level) as a result.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/discussions/14923" data-hovercard-type="discussion" data-hovercard-url="/rabbitmq/rabbitmq-server/discussions/14923/hovercard">#14923</a></p> </li> <li> <p>Quorum queue delayed retry configuration and status, per-priority message counts, and consumer<br> timeout state are now displayed in the management UI.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/13885" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/13885/hovercard">#13885</a></p> </li> <li> <p><code>GET /users/{user}/queues</code> has been added.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15074" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15074/hovercard">#15074</a></p> </li> </ul> <h3>MQTT Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>For MQTT 5.0 publishers, when a message is rejected because the target queue's maximum length is exceeded,<br> RabbitMQ now returns a <code>Quota exceeded</code> reason code in the PUBACK packet. This provides publishers with<br> actionable information about why their message was rejected.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15075" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15075/hovercard">#15075</a></p> </li> </ul> <h3>Federation Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>Federation links and their connections are now stopped in parallel.</p> <p>This significantly improves shutdown time for nodes with many (into thousands) federation links.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15271" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15271/hovercard">#15271</a></p> </li> <li> <p>Federation links no longer restart during plugin or node shutdown.</p> <p>For nodes with hundreds or thousands of federation links, link recovery could<br> significantly delay node shutdown.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15258" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15258/hovercard">#15258</a></p> </li> </ul> <h3>Shovel Plugin</h3> <h4>Enhancements</h4> <ul> <li>An optional <code>src-consumer-name</code> property can be specified to define the consumer tag<br> (<code>amqp091</code> and <code>local</code> <code>src-protocol</code>) or link identifier (<code>amqp10</code> protocol)</li> </ul> <h4>Bug Fixes</h4> <ul> <li> <p>Improved target node resource alarm handling for AMQP 1.0 and local shovels.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/14886" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/14886/hovercard">#14886</a></p> </li> <li> <p>Local shovels could run into an exception that would cause a shovel restart.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/14872" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/14872/hovercard">#14872</a></p> </li> <li> <p>AMQP 1.0 shovels ignored the <code>sasl</code> URI parameter.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/14867" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/14867/hovercard">#14867</a></p> </li> </ul> <h3>OAuth 2 Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>A usability improvement allows the plugin to automatically load the trusted system x.509 (TLS) certificates.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/14927" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/14927/hovercard">#14927</a></p> </li> </ul> <h3>LDAP Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>LDAP queries, including multi-line ones, can now be specified in <code>rabbitmq.conf</code>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/14868" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/14868/hovercard">#14868</a></p> </li> </ul> <h4>Bug Fixes</h4> <ul> <li> <p>A usability improvement allows the plugin to automatically load the trusted system certificates<br> when the user only enables TLS for the LDAP client but does not configure any other settings.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/14937" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/14937/hovercard">#14937</a></p> </li> </ul> <h3>HTTP Auth Backend Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>The HTTP Auth Backend can now optionally provide a custom authorization denial reason to AMQP clients.</p> <p>To opt in, return <code>deny <Reason></code> (instead of only <code>deny</code>) in the HTTP response body of your HTTP auth backend and set the following in your <code>rabbitmq.conf</code> file:</p> </li> </ul> <div class="highlight highlight-source-ini notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="auth_http.authorization_failure_disclosure = true"><pre><span class="pl-k">auth_http.authorization_failure_disclosure</span> = true</pre></div> <p>See the <a href="https://github.com/rabbitmq/rabbitmq-server/blob/main/deps/rabbitmq_auth_backend_http/README.md">README</a> for more information.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/14641" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/14641/hovercard">#14641</a></p> <h3>Tracing Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Trace file downloads now set the charset to UTF-8 when serving trace files.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/13952" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/13952/hovercard">#13952</a></p> </li> </ul> <h3>Dependency Changes</h3> <ul> <li><code>ra</code> was upgraded from <a href="https://github.com/rabbitmq/ra/releases/tag/v2.17.2"><code>2.17.2</code></a> to <a href="https://github.com/rabbitmq/ra/releases/tag/v3.1.2"><code>3.1.2</code></a></li> <li><code>osiris</code> was upgraded to <a href="https://github.com/rabbitmq/osiris/releases"><code>1.3.0</code></a></li> <li><code>cuttlefish</code> was upgraded to <a href="https://github.com/kyorai/cuttlefish/releases"><code>3.6.0</code></a></li> <li><code>gen_batch_server</code> was upgraded to <a href="https://github.com/rabbitmq/gen-batch-server/releases"><code>0.9.2</code></a></li> </ul> <h2>Source Code Archives</h2> <p>To obtain source code of the entire distribution, please download the archive named <code>rabbitmq-server-4.3.0.tar.xz</code><br> instead of the source tarball produced by GitHub.</p> michaelklishin tag:github.com,2008:Repository/924551/v4.3.0-beta.1 2026-03-17T19:06:06Z

v4.3.0-beta.1

<p>Merge pull request <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4089929341" data-permission-text="Title is private" data-url="https://github.com/rabbitmq/rabbitmq-server/issues/15745" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15745/hovercard" href="https://github.com/rabbitmq/rabbitmq-server/pull/15745">#15745</a> from rabbitmq/mk-epmd-monitor-avoid-a-forma…</p> michaelklishin tag:github.com,2008:Repository/924551/v4.2.5 2026-03-17T00:38:17Z

RabbitMQ 4.2.5

<p>RabbitMQ <code>4.2.5</code> is a maintenance release in the <code>4.2.x</code> <a href="https://www.rabbitmq.com/release-information" rel="nofollow">release series</a>.</p> <p>It is <strong>strongly recommended</strong> that you read <a href="https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.2.0">4.2.0 release notes</a><br> in detail if upgrading from a version prior to <code>4.2.0</code>.</p> <h3>Minimum Supported Erlang Version</h3> <p><a href="https://www.rabbitmq.com/docs/which-erlang" rel="nofollow">RabbitMQ and Erlang/OTP Compatibility Matrix</a> has more details on Erlang version requirements for RabbitMQ.</p> <p>Nodes <strong>will fail to start</strong> on older Erlang releases.</p> <h2>Changes Worth Mentioning</h2> <p>Release notes can be found on GitHub at <a href="https://github.com/rabbitmq/rabbitmq-server/tree/v4.2.x/release-notes">rabbitmq-server/release-notes</a>.</p> <h3>Core Server</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Classic queues could terminate and restart during recovery in certain rare conditions.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15595" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15595/hovercard">#15595</a></p> </li> <li> <p>Quorum queues could incorrectly reject messages during deletion.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15554" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15554/hovercard">#15554</a></p> </li> <li> <p>Peer discovery could run into a crash when <code>rabbit_nodes:list_members/0</code> returned<br> an empty list due to an error or a timeout.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15568" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15568/hovercard">#15568</a></p> </li> <li> <p>Definition import now strips a leading UTF-8 BOM if the input file has one.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/13748" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/13748/hovercard">#13748</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15550" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15550/hovercard">#15550</a></p> </li> <li> <p>Exceptions thrown by decorator callbacks (such as those used by federation)<br> during policy change notifications were silently suppressed. They are now logged.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15525" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15525/hovercard">#15525</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>Improved Mnesia-to-Khepri migration throughput.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15480" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15480/hovercard">#15480</a></p> </li> <li> <p>Additional <a href="https://github.com/rabbitmq/aten">aten</a> settings are now exposed in <code>rabbitmq.conf</code>.<br> Previously only the poll interval was configurable.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15564" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15564/hovercard">#15564</a></p> </li> </ul> <h3>Stream Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p><code>parse_command/1</code> crashed with a <code>function_clause</code> error when receiving a zero-size frame,<br> such as those sent by load balancer probes or port scanners.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15703" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15703/hovercard">#15703</a></p> </li> <li> <p><code>rabbit_stream_manager</code> could crash with a <code>case_clause</code> error when a stream declaration<br> failed due to a metadata store timeout.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15699" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15699/hovercard">#15699</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>Less log noise from load balancer and port scanner probes (that do not perform an AMQP 1.0 or AMQP 0-9-1 handshake)</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15715" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15715/hovercard">#15715</a></p> </li> </ul> <h3>Management Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Request bodies above the configured maximum limit are now rejected earlier.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15712" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15712/hovercard">#15712</a></p> </li> <li> <p>Validation improvements for several API endpoints.</p> <p>They now ignore node names that do not refer to existing cluster members,<br> reject unknown fields, etc.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15622" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15622/hovercard">#15622</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15623" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15623/hovercard">#15623</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15625" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15625/hovercard">#15625</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15627" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15627/hovercard">#15627</a></p> </li> <li> <p>Queue API responses now include policy-related fields (<code>policy</code>, <code>operator_policy</code>,<br> <code>effective_policy_definition</code>) and <code>delivery_limit</code> when management stats collection<br> is disabled via <code>rabbitmq.conf</code>.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/15182" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/15182/hovercard">#15182</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15651" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15651/hovercard">#15651</a></p> </li> </ul> <h3>CLI Tools</h3> <h4>Bug Fixes</h4> <ul> <li> <p><code>rabbitmq-diagnostics status</code> and <code>rabbitmqctl status</code> crashed when targeting a node<br> in maintenance mode because <code>vm_memory_high_watermark</code> was <code>nil</code><br> (the <code>vm_memory_monitor</code> process does not run in that state).</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/15678" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15678/hovercard">#15678</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15680" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15680/hovercard">#15680</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p><code>rabbitmq-plugins</code> now produces a clearer error message when run by a non-<code>root</code> user.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15701" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15701/hovercard">#15701</a></p> </li> </ul> <h3>Federation Management Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>The <code>x-internal-purpose</code> and <code>consumer_timeout</code> argument values are now correctly escaped.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15606" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15606/hovercard">#15606</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15708" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15708/hovercard">#15708</a></p> </li> </ul> <h3>Prometheus Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Per-object metrics endpoint (<code>/metrics/per-object</code>) no longer emits duplicate <code>HELP</code><br> and <code>TYPE</code> metadata lines for Raft metrics when both quorum queues and Khepri are in use,<br> which caused scraper parser errors.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/15600" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/15600/hovercard">#15600</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15610" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15610/hovercard">#15610</a></p> </li> </ul> <h3>Grafana Dashboards</h3> <h4>Enhancements</h4> <ul> <li> <p>The <code>Overview</code> dashboard's "TCP sockets available" panel was replaced with a "File descriptors available" panel<br> that uses two modern metrics, <code>rabbitmq_process_max_fds</code> and <code>rabbitmq_process_open_fds</code>.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/12673" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/12673/hovercard">#12673</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15618" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15618/hovercard">#15618</a></p> </li> </ul> <h3>Shovel Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>An attempt to declare a dynamic shovel with multiple <code>src-queue-args</code> or <code>dest-queue-args</code> values<br> configured could run into an exception during validation.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/8323" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/8323/hovercard">#8323</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/8356" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/8356/hovercard">#8356</a></p> </li> </ul> <h3>Web STOMP Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>A terminated heartbeat monitor process could cause a crash during connection shutdown.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15607" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15607/hovercard">#15607</a></p> </li> </ul> <h3>Dependency Changes</h3> <p>None in this release.</p> michaelklishin tag:github.com,2008:Repository/924551/v4.2.4 2026-02-20T14:05:08Z

RabbitMQ 4.2.4

<p>RabbitMQ <code>4.2.4</code> is a maintenance release in the <code>4.2.x</code> <a href="https://www.rabbitmq.com/release-information" rel="nofollow">release series</a>.</p> <p>It is <strong>strongly recommended</strong> that you read <a href="https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.2.0">4.2.0 release notes</a><br> in detail if upgrading from a version prior to <code>4.2.0</code>.</p> <h3>Minimum Supported Erlang Version</h3> <p><a href="https://www.rabbitmq.com/docs/which-erlang" rel="nofollow">RabbitMQ and Erlang/OTP Compatibility Matrix</a> has more details on Erlang version requirements for RabbitMQ.</p> <p>Nodes <strong>will fail to start</strong> on older Erlang releases.</p> <h2>Changes Worth Mentioning</h2> <p>Release notes can be found on GitHub at <a href="https://github.com/rabbitmq/rabbitmq-server/tree/v4.2.x/release-notes">rabbitmq-server/release-notes</a>.</p> <h3>Core Server</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Classic queue message store could run into an exception when a file was concurrently deleted by a compaction operation.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15411" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15411/hovercard">#15411</a></p> </li> <li> <p><code>rabbit_quorum_queue:stat/2</code> could fail when the quorum queue leader was undefined.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15400" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15400/hovercard">#15400</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15423" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15423/hovercard">#15423</a></p> </li> <li> <p>The <a href="https://www.rabbitmq.com/docs/logging#log-exchange" rel="nofollow"><code>amq.rabbitmq.log</code> exchange</a> is now declared unconditionally at node boot,<br> avoiding a potential deadlock between feature flag enablement and logging to the exchange sink.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15320" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15320/hovercard">#15320</a></p> </li> </ul> <h3>MQTT Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Variable interpolation in <a href="https://www.rabbitmq.com/docs/access-control#topic-authorisation" rel="nofollow">topic permissions</a> now.<br> escapes the special regular expression characters before interpolation.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15442" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15442/hovercard">#15442</a></p> </li> </ul> <h3>Stream Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p><a href="https://www.rabbitmq.com/docs/streams#single-active-consumer" rel="nofollow">Single Active Consumer</a> coordinator<br> could deadlock when a consumer being deactivated would lose its connection, leaving the consumer group<br> without an active consumer.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15353" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15353/hovercard">#15353</a></p> </li> </ul> <h3>Management Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>The Policies page in the management UI incorrectly displayed quorum queue arguments<br> twice on the declaration form in place of stream queue arguments.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15335" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15335/hovercard">#15335</a></p> </li> <li> <p>The clustering listener now correctly reports its TLS enablement status.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15399" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15399/hovercard">#15399</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p><code>GET /api/overview</code> and <code>GET /api/nodes</code> now report crypto library (such as OpenSSL) version.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15468" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15468/hovercard">#15468</a></p> </li> <li> <p>RabbitMQ and Erlang/OTP versions are now included in <code>GET /api/nodes</code> responses.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15454" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15454/hovercard">#15454</a></p> </li> <li> <p>Login page usability improvements: autofocus on the username field and <code>autocomplete</code> attributes<br> for browser password manager integration.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15398" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15398/hovercard">#15398</a></p> </li> </ul> <h3>CLI Tools</h3> <h4>Enhancements</h4> <ul> <li> <p><code>rabbitmq-upgrade has_reached_target_cluster_size</code> is a new command that checks whether<br> the cluster has reached its target size, as provided in <code>rabbitmq.conf</code>.</p> <p>This is useful for automating rolling upgrades, particularly on Kubernetes.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15404" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15404/hovercard">#15404</a></p> </li> </ul> <h3>Shovel Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Stopping and deleting a shovel could fail with a <code>badmatch</code> exception<br> when the underlying worker process no longer existed.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15408" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15408/hovercard">#15408</a></p> </li> </ul> <h3>Trust Store Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>HTTPS endpoint requests now have a configurable timeout (20 seconds by default),<br> preventing the plugin from hanging indefinitely when a provider fails to respond.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/15308" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/15308/hovercard">#15308</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15310" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15310/hovercard">#15310</a></p> </li> </ul> <h3>AWS Peer Discovery Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Nodes on EC2 instances in non-running states (<code>stopping</code>, <code>stopped</code>, <code>shutting-down</code>, <code>terminated</code>)<br> are now filtered out from peer discovery results.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15388" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15388/hovercard">#15388</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>Multiple hostname resolution paths can now be configured. This is an upgrade pathway<br> for scenarios where resolution hostnames have to change.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/14705" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/14705/hovercard">#14705</a></p> </li> </ul> <h3>Tracing Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>The plugin now uses UTF-8 encoding for <a href="https://rabbitmq.com/docs/firehose" rel="nofollow">traced messages</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15439" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15439/hovercard">#15439</a></p> </li> </ul> <h3>Dependency Changes</h3> <ul> <li><code>ra</code> was upgraded to <a href="https://github.com/rabbitmq/ra/releases"><code>2.17.2</code></a></li> </ul> michaelklishin tag:github.com,2008:Repository/924551/v4.2.3 2026-01-22T03:58:29Z

RabbitMQ 4.2.3

<p>RabbitMQ <code>4.2.3</code> is a maintenance release in the <code>4.2.x</code> <a href="https://www.rabbitmq.com/release-information" rel="nofollow">release series</a>.</p> <p>It is <strong>strongly recommended</strong> that you read <a href="https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.2.0">4.2.0 release notes</a><br> in detail if upgrading from a version prior to <code>4.2.0</code>.</p> <h3>Minimum Supported Erlang Version</h3> <p><a href="https://www.rabbitmq.com/docs/which-erlang" rel="nofollow">RabbitMQ and Erlang/OTP Compatibility Matrix</a> has more details on Erlang version requirements for RabbitMQ.</p> <p>Nodes <strong>will fail to start</strong> on older Erlang releases.</p> <h2>Changes Worth Mentioning</h2> <p>Release notes can be found on GitHub at <a href="https://github.com/rabbitmq/rabbitmq-server/tree/v4.2.x/release-notes">rabbitmq-server/release-notes</a>.</p> <h3>Core Server</h3> <h4>Bug Fixes</h4> <ul> <li> <p><a href="https://www.rabbitmq.com/docs/vhosts#default-queue-type" rel="nofollow">Default queue type</a> handling is now more defensive, avoiding an issue where<br> attempts to declare a queue in a virtual host without any DQT set would result<br> in a <code>PRECONDITION_FAILED</code> exception instead of falling back to the classic queue type<br> for DQT.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/11541" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/11541/hovercard">#11541</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/issues/12109" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12109/hovercard">#12109</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/issues/12821" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12821/hovercard">#12821</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/issues/13837" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/13837/hovercard">#13837</a></p> </li> <li> <p>Classic queue recovery on Windows could fail due to an OS-specific file locking behavior.<br> Such failures are now retried in two more contexts.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15136" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15136/hovercard">#15136</a></p> </li> <li> <p>Certain exchange update operations in Khepri could cause severe contention.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15236" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15236/hovercard">#15236</a></p> </li> <li> <p>Topic exchange binding deletions could leave orphaned trie edges in the Khepri projection,<br> potentially causing a slowly creeping memory leak.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15025" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15025/hovercard">#15025</a></p> </li> <li> <p>When a client that owns an exclusive queue disconnects and immediately reconnects and redeclares the same queue<br> (under the same name), RabbitMQ node could delete the new queue depending on the timing of events.</p> <p>Previously the only workaround was to use exclusive server-named queues for clients that exhibited<br> this behavior. Now RabbitMQ nodes take internal owner identity into account and will remove<br> the original queue but not the new one.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15276" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15276/hovercard">#15276</a></p> </li> <li> <p>"Other ETS" and "Other system" memory metrics could end up being reported as negative values<br> due to concurrent ETS table updates, deletion and creation on the node.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15289" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15289/hovercard">#15289</a></p> </li> <li> <p><code>mirrored_supervisor:child/2</code> could fail with a <code>badmatch</code> exception<br> when a significant enough number of shovels (or federation links) was removed.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15229" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15229/hovercard">#15229</a></p> </li> <li> <p>Quorum queue could run into a logging exception during node drain.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15212" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15212/hovercard">#15212</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>Topic binding deletion in Khepri is now significantly more efficient.</p> <p>Deleting 100k topic bindings could previously take up to 30 minutes and now takes<br> some 3-4 seconds.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15214" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15214/hovercard">#15214</a></p> </li> <li> <p>It is now possible to <code>rabbitmq-queues shrink</code> only a subset of quorum queues on<br> a node using a pattern (a regex).</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15021" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15021/hovercard">#15021</a></p> </li> <li> <p>CRL (Certificate Revocation List) cache can now be configured via <code>rabbitmq.conf</code>.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/2338" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/2338/hovercard">#2338</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15160" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15160/hovercard">#15160</a></p> </li> </ul> <h3>Federation Plugins</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Restored exchange federation compatibility in mixed 4.2.x/4.1.x multi-node clusters.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15252" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15252/hovercard">#15252</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>Federation links and their connections are now stopped in parallel.</p> <p>This significantly improves shutdown time for nodes with many (into thousands) federation links.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15271" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15271/hovercard">#15271</a></p> </li> <li> <p>Federation links no longer restart during plugin or node shutdown.</p> <p>For nodes with hundreds or thousands of federation links, link recovery could<br> significantly delay node shutdown.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15258" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15258/hovercard">#15258</a></p> </li> <li> <p>Federation links use AMQP 0-9-1 connections to remote nodes (clusters).</p> <p>Previously the timeout used when those connections are closed was fixed to 10 seconds.<br> Now it is configurable via <code>rabbitmq.conf</code> in milliseconds:</p> <div class="highlight highlight-source-ini notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="# 3 seconds for exchange federation federation.exchanges.connection_close_timeout = 3000 # 3 seconds for queue federation federation.queues.connection_close_timeout = 3000"><pre><span class="pl-c"><span class="pl-c">#</span> 3 seconds for exchange federation</span> <span class="pl-k">federation.exchanges.connection_close_timeout</span> = 3000 <span class="pl-c"><span class="pl-c">#</span> 3 seconds for queue federation</span> <span class="pl-k">federation.queues.connection_close_timeout</span> = 3000</pre></div> <p>The maximum supported value is 5 seconds (5000 ms).</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15268" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15268/hovercard">#15268</a></p> </li> </ul> <h3>CLI Tools</h3> <h4>Enhancements</h4> <ul> <li> <p><code>rabbitmq-streams grow</code> and <code>rabbitmq-streams shrink</code> are new commands that mirror existing<br> <code>rabbitmq-queues grow</code> and <code>rabbitmq-queues shrink</code> functionality for streams.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15189" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15189/hovercard">#15189</a></p> </li> </ul> <h3>MQTT Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>A new configuration option, <code>mqtt.disconnect_on_unauthorized</code>, controls whether<br> MQTT connections are closed upon authorization failures (for example, an attempt to<br> consume from a topic the client has no permission for).</p> <p>When set to <code>false</code>, the connection remains open and an appropriate protocol-level<br> response is sent to the client instead.</p> <p>The default value is <code>true</code>, same as RabbitMQ MQTT implementation's historic behavior.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15201" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15201/hovercard">#15201</a></p> </li> </ul> <h3>Management Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>OAuth 2: <code>preferred_auth_mechanism</code> and <code>strict_auth_mechanism</code> are no longer validated<br> when not used (configured).</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15148" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15148/hovercard">#15148</a></p> </li> </ul> <h3>etcd Peer Discovery Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>When credentials were provided, the password was double-encrypted, resulting in<br> etcd authentication failures.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/15191" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/15191/hovercard">#15191</a></p> </li> </ul> <h3>HTTP Auth Backend Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>The <code>customize_hostname_check</code> TLS option was unintentionally ignored.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15184" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15184/hovercard">#15184</a></p> </li> </ul> <h3>Dependency Changes</h3> <ul> <li><code>khepri</code> was upgraded to <a href="https://github.com/rabbitmq/khepri/releases/tag/v0.17.4"><code>0.17.4</code></a></li> <li><code>khepri_mnesia_migration</code> was upgraded to <a href="https://github.com/rabbitmq/khepri_mnesia_migration/releases/tag/v0.8.1"><code>0.8.1</code></a></li> <li><code>osiris</code> was upgraded to <a href="https://github.com/rabbitmq/osiris/releases/tag/v1.10.3"><code>1.10.3</code></a></li> </ul> michaelklishin
For now, Differences are performed on text, not graphically, only the latest screenshot is available.

Screenshot requires a Content Fetcher ( Sockpuppetbrowser, selenium, etc ) that supports screenshots.