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 error-ing screenshot from most recent request
✨ AI Change Summary

Generating change summary…

You are a concise web change detector. Summarize ONLY what actually changed on the page in clear, plain English. Structure your reply using this exact format (omit sections with nothing to report): Added: - ... Changed: - ... Removed: - ... Focus only on meaningful changes. Ignore layout shifts, whitespace, timestamps, ads, cookies, or minor styling. Be direct and brief. Use bullet points.

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

Release notes from rabbitmq-server

2026-08-14T00:46:15Z tag:github.com,2008:Repository/924551/v4.3.5 2026-08-17T21:42:00Z
2026-09-14T07:16:01Z tag:github.com,2008:Repository/924551/v4.3.6 2026-09-14T07:26:21Z

RabbitMQ 4.3.6

<p>RabbitMQ <code>4.3.6</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>The minimum supported Erlang version for this release series is <code>27.0</code>.</p> <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>Deleting an exchange did not delete the bindings that pointed to it as a destination.<br> A few related cases around auto-delete exchanges, transient queue cleanup and<br> virtual host deletion were fixed along the way.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/17255" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/17255/hovercard">#17255</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17257" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17257/hovercard">#17257</a></p> </li> <li> <p>Quorum queue continuous membership reconciliation could add more replicas than<br> the configured target.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/17310" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/17310/hovercard">#17310</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17311" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17311/hovercard">#17311</a></p> </li> <li> <p>Certain malformed <code>urn:uuid:</code> correlation or message ID caused exceptions during message format conversion.<br> Such values are now rejected.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17328" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17328/hovercard">#17328</a></p> </li> <li> <p>An operation that refers to an unknown queue type now fails with a<br> <code>precondition_failed</code> channel exception instead of an exception and abrupt channel termination.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17327" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17327/hovercard">#17327</a></p> </li> <li> <p>Classic queue recovery counted some message store references more than once.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17351" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17351/hovercard">#17351</a></p> </li> <li> <p><code>x-max-age</code> values are now compared as durations, so redeclaring a stream<br> with <code>1D</code> when it was declared with <code>24h</code> no longer fails with a<br> <code>PRECONDITION_FAILED</code> (non-equivalent argument) exception.</p> <p>With contributions from <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Vishal-770/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Vishal-770">@Vishal-770</a>.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/8509" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/8509/hovercard">#8509</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17259" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17259/hovercard">#17259</a></p> </li> <li> <p>AMQP 1.0 SQL filters: the value matched by a <code>LIKE</code> pattern with several<br> wildcards is now bounded independently of the message size limit.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17332" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17332/hovercard">#17332</a></p> </li> <li> <p>Direct connections (used by the shovel and federation plugins) now enforce <code>channel_max_per_node</code><br> the same way network connections do.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Ayanda-D/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Ayanda-D">@Ayanda-D</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16610" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16610/hovercard">#16610</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>New <code>rabbitmq.conf</code> setting: <code>channel_tx_message_max</code>. It bounds the number of publishes a channel<br> buffers in an open AMQP 0-9-1 transaction, and defaults to 10,000. Going over the limit<br> results in a <code>precondition_failed</code> channel exception.</p> <p>Most applications won't be affected by this change and likely will not have to<br> increase the default limit.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17331" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17331/hovercard">#17331</a></p> </li> <li> <p>New <code>rabbitmq.conf</code> setting: <code>listeners.startup_delay</code>. It delays the start of client connection<br> listeners by the specified number of seconds, for environments where applications<br> begin connecting as soon as a port is open, before the node has finished booting.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Vishal-770/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Vishal-770">@Vishal-770</a>.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/13153" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/13153/hovercard">#13153</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17289" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17289/hovercard">#17289</a></p> </li> <li> <p>Several channel interceptors can now be registered for the same AMQP 0-9-1 operation,<br> as long as they use different priorities. Previously, if two enabled plugins intercepted<br> the same operation, for example <code>basic.publish</code>, channels could not be opened at all.</p> <p>Priorities are set per interceptor module in <code>rabbitmq.conf</code>. Lower values run first,<br> and omitted interceptors are assumed to have the priority of <code>0</code>:</p> <div class="highlight highlight-source-ini notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="channel_interceptor.priorities.rabbit_timestamp_interceptor = 1 channel_interceptor.priorities.rabbit_routing_node_stamp_interceptor = 2 channel_interceptor.priorities.rabbit_sharding_interceptor = 3"><pre><span class="pl-k">channel_interceptor.priorities.rabbit_timestamp_interceptor = 1 <span class="pl-k">channel_interceptor.priorities.rabbit_routing_node_stamp_interceptor = 2 <span class="pl-k">channel_interceptor.priorities.rabbit_sharding_interceptor = 3</pre></div> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Ayanda-D/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Ayanda-D">@Ayanda-D</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17182" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17182/hovercard">#17182</a></p> </li> <li> <p>Shovels now support a new AMQP URI query parameter, <code>customize_hostname_check</code>,<br> that controls how the target hostname is matched against the server certificate,<br> for example with wildcard certificates.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jiangranwang/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jiangranwang">@jiangranwang</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17221" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17221/hovercard">#17221</a></p> </li> </ul> <h3>CLI Tools</h3> <h4>Bug Fixes</h4> <ul> <li> <p><code>rabbitmq-diagnostics check_certificate_expiration</code> now handles certificate files<br> that cannot be read, and certificates that use the RFC 5280 <code>UTCTime</code> format,<br> the same way the HTTP API health check does.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Vishal-770/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Vishal-770">@Vishal-770</a>.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/12464" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/12464/hovercard">#12464</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17345" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17345/hovercard">#17345</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>Two new commands, <code>rabbitmqctl list_channel_interceptors</code> and<br> <code>rabbitmqctl set_channel_interceptor_priorities</code>, list the active channel interceptors<br> and adjust their priorities at runtime. Priorities set this way are not persisted<br> and do not survive a node restart.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Ayanda-D/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Ayanda-D">@Ayanda-D</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17182" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17182/hovercard">#17182</a></p> </li> </ul> <h3>Stream Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>During a rolling upgrade, a stream metadata request could leave out a peer node<br> that ran a different version.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17333" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17333/hovercard">#17333</a></p> </li> </ul> <h3>Stream Management Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>The publishers and consumers listing now verifies virtual host access like<br> other comparable HTTP API endpoints.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17236" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17236/hovercard">#17236</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17239" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17239/hovercard">#17239</a></p> </li> </ul> <h3>Management Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>The channels list and individual channel pages now display basic information<br> when management statistics are disabled, instead of returning a <code>400 Bad Request</code>.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/8240" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/8240/hovercard">#8240</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17198" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17198/hovercard">#17198</a></p> </li> <li> <p>Several HTTP API endpoints returned a <code>500</code> instead of a <code>400</code> for invalid<br> range parameters or an invalid timeout header: <code>GET /api/nodes/{node}</code>,<br> <code>GET /api/healthchecks/node[/{node}]</code>, <code>GET /api/federation-links</code>,<br> <code>GET /api/health/checks/alarms</code> and <code>GET /api/health/checks/local-alarms</code>.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17245" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17245/hovercard">#17245</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17247" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17247/hovercard">#17247</a></p> </li> <li> <p>The certificate expiration health check no longer responds with a <code>500</code><br> for certificate files that cannot be read, or for certificates that use the<br> RFC 5280 <code>UTCTime</code> format.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Vishal-770/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Vishal-770">@Vishal-770</a>.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/12464" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/12464/hovercard">#12464</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17345" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17345/hovercard">#17345</a></p> </li> <li> <p>Optional argument (<code>x-*</code>) values are no longer coerced to strings in the management UI.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17177" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17177/hovercard">#17177</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>Consumers on protocols without channels (for example, AMQP 1.0 and MQTT)<br> now link directly to their connection in the management UI.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/vampirebyte/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/vampirebyte">@vampirebyte</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17206" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17206/hovercard">#17206</a></p> </li> </ul> <h3>Shovel Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Shovel types provided by plugins can now be used as <code>src-protocol</code> and <code>dest-protocol</code> values.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/17341" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/17341/hovercard">#17341</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17343" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17343/hovercard">#17343</a></p> </li> <li> <p>A local shovel with <code>src-delete-after</code> set to a number could in some cases<br> transfer more messages than that number.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17209" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17209/hovercard">#17209</a></p> </li> </ul> <h3>MQTT Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>The retained message store now has per-virtual host limits on both the number of messages<br> and their total size: <code>mqtt.retained_message_store.max_messages</code> (defaults to 100000)<br> and <code>mqtt.retained_message_store.max_size_bytes</code> (defaults to 1 GiB).</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17189" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17189/hovercard">#17189</a></p> </li> </ul> <h3>STOMP Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>STOMP and Web STOMP connections now enforce credential expiry (for example, of <a href="https://www.rabbitmq.com/docs/oauth2" rel="nofollow">OAuth 2</a> tokens)<br> the same way other protocols do.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17244" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17244/hovercard">#17244</a></p> </li> </ul> <h3>Web MQTT and Web STOMP Plugins</h3> <h4>Bug Fixes</h4> <ul> <li> <p><code>web_mqtt.ssl.*</code> and <code>web_stomp.ssl.*</code> now accept more TLS keys in <code>rabbitmq.conf</code>,<br> including <a href="https://www.rabbitmq.com/docs/ssl#peer-verification" rel="nofollow"><code>verify</code> and <code>fail_if_no_peer_cert</code></a>.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/17298" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/17298/hovercard">#17298</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17304" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17304/hovercard">#17304</a></p> </li> </ul> <h3>LDAP AuthN and AuthZ Backend Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>DN escaping introduced in an earlier release was too strict for certain Active Directory<br> setups, for example when the client provides a full DN that contains a backslash.<br> Escaping is now applied to DN template values only.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/17277" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/17277/hovercard">#17277</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17278" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17278/hovercard">#17278</a></p> </li> <li> <p>Active Directory down-level logon names (<code>DOMAIN\username</code>) can be used to log in again.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jiangranwang/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jiangranwang">@jiangranwang</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17220" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17220/hovercard">#17220</a></p> </li> </ul> <h3>Trust Store Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>The <a href="https://www.rabbitmq.com/docs/trust-store" rel="nofollow">trust store</a> now also covers the HTTP API, Web MQTT<br> and Web STOMP listeners.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17303" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17303/hovercard">#17303</a></p> </li> </ul> <h3>Consul Peer Discovery Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>A <code>404</code> response from the Consul API no longer stops node boot; peer discovery is retried instead.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/17211" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/17211/hovercard">#17211</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17215" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17215/hovercard">#17215</a></p> </li> </ul> <h3>Dependency Changes</h3> <ul> <li><code>cowboy</code> was upgraded to <a href="https://github.com/ninenines/cowboy/releases"><code>2.19.0</code></a></li> <li><code>cowlib</code> was upgraded to <a href="https://github.com/ninenines/cowlib/releases"><code>2.20.0</code></a></li> <li><code>gun</code> was upgraded to <a href="https://github.com/ninenines/gun/releases"><code>2.6.0</code></a></li> <li><code>khepri</code> was upgraded to <a href="https://github.com/rabbitmq/khepri/releases/tag/v0.18.1"><code>0.18.1</code></a></li> <li><code>ranch</code> was upgraded to <a href="https://github.com/ninenines/ranch/releases/tag/2.3.0"><code>2.3.0</code></a></li> </ul> michaelklishin tag:github.com,2008:Repository/924551/v4.3.5 2026-08-17T21:42:00Z

RabbitMQ 4.3.5

<p>RabbitMQ <code>4.3.5</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>The minimum supported Erlang version for this release series is <code>27.0</code>.</p> <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>With <a href="https://www.rabbitmq.com/docs/direct-reply-to" rel="nofollow">direct reply-to</a>, a message routed to multiple<br> targets that resolved to the same process could be delivered to it more than once.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17071" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17071/hovercard">#17071</a></p> </li> <li> <p>Quorum queue recovery from a recovery checkpoint could leave a part of the queue's<br> internal state only partially initialized.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17012" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17012/hovercard">#17012</a></p> </li> <li> <p>In clusters that run a mix of <code>4.2.x</code> and <code>4.3.x</code> nodes during a rolling upgrade,<br> local quorum queue queries now fall back to the previous state machine version<br> instead of failing.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17128" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17128/hovercard">#17128</a></p> </li> <li> <p>A malformed AMQP 1.0 frame now results in a framing error returned to the client<br> instead of an exception.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17101" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17101/hovercard">#17101</a></p> </li> <li> <p>The AMQP 1.0 message parser now validates message sections more strictly<br> and decodes certain types of arrays more efficiently.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17049" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17049/hovercard">#17049</a></p> </li> <li> <p>Topic exchanges now limit the number of multi-segment (<code>#</code>) wildcards a binding key<br> can use to two. The <code>#</code> wildcard is meant to be used as the final segment, that is, just once.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17039" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17039/hovercard">#17039</a></p> </li> <li> <p>When connection credentials are refreshed (for example, when an <a href="https://www.rabbitmq.com/docs/oauth2" rel="nofollow">OAuth 2</a> token<br> is renewed), the user's tags are now updated instead of being carried over from the<br> original state.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17029" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17029/hovercard">#17029</a></p> </li> <li> <p><a href="https://www.rabbitmq.com/docs/definitions#import-on-boot" rel="nofollow">Definition import</a> from an HTTPS endpoint<br> no longer fails when a password-protected TLS (HTTPS) client certificate is used.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Pyolar/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Pyolar">@Pyolar</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16973" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16973/hovercard">#16973</a></p> </li> <li> <p>The AMQP 1.0 Erlang client no longer logs an exception when a link is already detached.<br> Workloads that use short lived links could produce a substantial amount of log noise.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17124" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17124/hovercard">#17124</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>Authentication events are now logged under a new logging category, <code>user</code>.<br> Successful logins are logged at the <code>info</code> level, failed login attempts at the <code>warning</code> level.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16907" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16907/hovercard">#16907</a></p> </li> </ul> <h3>CLI Tools</h3> <h4>Enhancements</h4> <ul> <li> <p><code>rabbitmqctl hash_password</code> now supports more password hashing functions.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/14215" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/14215/hovercard">#14215</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17108" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17108/hovercard">#17108</a></p> </li> </ul> <h3>Stream Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>A stream protocol connection can have at most 256 publishers and 256 subscriptions,<br> a limit that comes from the protocol's wire format. Attempts to go over these limits<br> are now rejected early with a clear error instead of failing later with an unrelated one.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17123" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17123/hovercard">#17123</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>Before a stream client connection completes authentication and authorization (that is, before<br> a successful <code>open</code>), the server now enforces a low <code>frame_max</code> ceiling instead of<br> the full configured value. The default, 8192 bytes, is high enough to accommodate realistic<br> <a href="https://www.rabbitmq.com/docs/oauth2" rel="nofollow">JWT tokens</a> used with SASL PLAIN authentication,<br> and mirrors a mechanism already in place for AMQP 0-9-1 connections. It can be adjusted<br> with the new <code>stream.initial_frame_max</code> setting.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17053" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17053/hovercard">#17053</a></p> </li> <li> <p>New setting: <code>stream.max_uncompressed_sub_entry_batch_size</code>. It bounds the declared<br> uncompressed size of a published sub-entry batch, and defaults to 67108864 (64 MiB),<br> the same default already used by the Java client's <code>maxUncompressedSubEntryBatchSize</code>.<br> The broker and any client publishing to it should be configured with the same value.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17103" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17103/hovercard">#17103</a></p> </li> </ul> <h3>Management Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>HTTP API endpoints that accept a node name, including the federation and tracing related ones,<br> now validate that the target node is a cluster member.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17106" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17106/hovercard">#17106</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17118" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17118/hovercard">#17118</a></p> </li> <li> <p>The management UI no longer displays certain alert messages twice.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17127" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17127/hovercard">#17127</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>When <code>management.credential_encryption_secret</code> is configured, the management UI login endpoint<br> (<code>POST /api/login</code>) returns client credentials encrypted using <code>AES-256-GCM</code> with a key<br> derived from the configured secret, and returns the ciphertext as an opaque token prefixed<br> with <code>rmqe.</code>. The browser stores this token and presents it on all subsequent requests<br> using the <code>Authorization: Bearer rmqe.<token></code> header.</p> <p>The secret MUST be identical on every node in the cluster.</p> <p><strong>Important</strong>: during a rolling cluster upgrade, enable this feature only after all nodes have been upgraded.<br> This is particularly important for clusters behind a load balancer: nodes that run older<br> versions will not recognize the encrypted tokens and will reject the requests,<br> unexpectedly logging users out.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16705" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16705/hovercard">#16705</a></p> </li> <li> <p><code>GET /api/definitions</code> now supports conditional requests (<code>ETag</code>).</p> <p>The <code>ETag</code> value is derived from the metadata store Raft index, so the tag will<br> naturally change as the metadata store serves writes.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/16724" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16724/hovercard">#16724</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17121" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17121/hovercard">#17121</a></p> </li> <li> <p>The <code>Referrer-Policy</code> HTTP response header can now be configured with<br> the <code>management.headers.referrer_policy</code> setting.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16893" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16893/hovercard">#16893</a></p> </li> <li> <p>When <code>management.http.hide_allow_header</code> is set to <code>true</code>, the <code>Allow</code> HTTP response header<br> is omitted from all responses except <code>405 Method Not Allowed</code> ones, where it is required<br> by the HTTP specification. This avoids disclosing the supported HTTP methods to clients.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16893" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16893/hovercard">#16893</a></p> </li> <li> <p>When <code>management.definitions.require_json_extension</code> is set to <code>true</code>, both the management UI<br> and the HTTP API will reject definition upload where the file does not have a <code>.json</code> extension.<br> The setting defaults to <code>false</code>. Regardless of this setting, the server always validates<br> that the uploaded content is valid JSON before importing it.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16946" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16946/hovercard">#16946</a></p> </li> </ul> <h3>OAuth 2 AuthN and AuthZ Backend Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>When RabbitMQ is behind a proxy that terminates TLS, the <a href="https://www.rabbitmq.com/docs/oauth2" rel="nofollow">OAuth 2</a> login flow<br> now honors the <code>X-Forwarded-Proto</code>, <code>X-Forwarded-Host</code> and <code>X-Forwarded-Port</code> headers<br> when rewriting the token endpoint URL in the OpenID discovery payload.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17153" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17153/hovercard">#17153</a></p> </li> </ul> <h3>Shovel Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Reduced log noise.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17028" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17028/hovercard">#17028</a></p> </li> <li> <p>Static shovels that do not define any <code>declarations</code> failed to start.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/17063" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/17063/hovercard">#17063</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17067" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17067/hovercard">#17067</a></p> </li> <li> <p>When a topology setup failure stops a shovel worker, the specific reason is now<br> reported instead of a generic one.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17135" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17135/hovercard">#17135</a></p> </li> <li> <p>The Shovel HTTP API now processes shovel URIs the same way the federation plugin<br> processes its upstream URIs.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17134" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17134/hovercard">#17134</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>Shovel TTL: dynamic shovels support a new setting, <code>src-delete-after-duration</code>,<br> that instructs the shovel to self-delete after at least the specified duration.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/michalovits/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/michalovits">@michalovits</a>.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17055" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17055/hovercard">#17055</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17064" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17064/hovercard">#17064</a></p> </li> </ul> <h3>Federation Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>A malformed upstream URI could prevent a federation link from starting even when other,<br> well-formed URIs were available. All candidate URIs are now tried.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sauravonwww/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sauravonwww">@sauravonwww</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17046" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17046/hovercard">#17046</a></p> </li> </ul> <h3>MQTT Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Packets split across many network fragments are now parsed more efficiently.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17093" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17093/hovercard">#17093</a></p> </li> <li> <p>MQTT 5.0 properties are now parsed strictly: a property that is not valid<br> for a given packet type is rejected.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17039" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17039/hovercard">#17039</a></p> </li> <li> <p>A <code>Receive Maximum</code> value of 0, prohibited by the MQTT 5.0 specification, is now rejected.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17035" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17035/hovercard">#17035</a></p> </li> </ul> <h3>STOMP Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Frame size limits are now enforced earlier in the connection lifecycle.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17116" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17116/hovercard">#17116</a></p> </li> </ul> <h3>Web STOMP Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>The accumulated frame size is now checked against <code>max_frame_size</code> after a connection<br> has authenticated, matching the behavior of "regular" STOMP connections.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17065" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17065/hovercard">#17065</a></p> </li> </ul> <h3>Consistent Hash Exchange Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>An edge case in bucket selection is now handled gracefully.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17081" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17081/hovercard">#17081</a></p> </li> </ul> <h3>Dependency Changes</h3> <ul> <li><code>cowboy</code> was upgraded to <a href="https://github.com/ninenines/cowboy/releases"><code>2.18.0</code></a></li> <li><code>cowlib</code> was upgraded to <a href="https://github.com/ninenines/cowlib/releases"><code>2.19.0</code></a></li> <li><code>gun</code> was upgraded to <a href="https://github.com/ninenines/gun/releases"><code>2.5.0</code></a></li> <li><code>ra</code> was upgraded to <a href="https://github.com/rabbitmq/ra/releases/tag/v3.1.10"><code>3.1.10</code></a></li> <li><code>ranch</code> was upgraded to <a href="https://github.com/ninenines/ranch/releases/tag/2.2.1"><code>2.2.1</code></a></li> </ul> michaelklishin tag:github.com,2008:Repository/924551/v4.3.4 2026-08-26T13:57:29Z

RabbitMQ 4.3.4

<p>RabbitMQ <code>4.3.4</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>The minimum supported Erlang version for this release series is <code>27.0</code>.</p> <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>Quorum queues in clusters upgraded from <code>3.13.x</code> to <code>4.2.x</code> and then to <code>4.3.x</code> could stop<br> emitting metrics and taking snapshots after a node restart.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/16974" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/16974/hovercard">#16974</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16990" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16990/hovercard">#16990</a></p> </li> <li> <p>The AMQP 1.0 parser now detects standard message body sections more strictly.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17017" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17017/hovercard">#17017</a></p> </li> <li> <p>The AMQP 1.0 parser now decodes certain array values more efficiently.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16994" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16994/hovercard">#16994</a></p> </li> </ul> <h3>Stream Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>The <a href="https://www.rabbitmq.com/docs/streams#single-active-consumer" rel="nofollow">single active consumer</a> coordinator<br> did not notify a consumer that was re-selected for activation while it was still deactivating,<br> leaving the group without an active consumer.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/pterygota/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/pterygota">@pterygota</a>.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/16975" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/16975/hovercard">#16975</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16976" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16976/hovercard">#16976</a></p> </li> </ul> <h3>Management Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Very short lived exclusive queues could cause an exception during metric collection, producing<br> log noise.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/16989">#16989</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/issues/16999" data-hovercard-type="discussion" data-hovercard-url="/rabbitmq/rabbitmq-server/discussions/16999/hovercard">#16999</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/17002" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/17002/hovercard">#17002</a></p> </li> <li> <p>After an IdP-initiated OAuth 2 login, the management UI now returns the user<br> to the page that was open before the login instead of the default one.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/thisisnsh/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/thisisnsh">@thisisnsh</a>.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16957" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16957/hovercard">#16957</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16961" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16961/hovercard">#16961</a></p> </li> <li> <p>Several security fixes and validation gaps were addressed:</p> <ul> <li>The HTTP API now returns 404 Not Found instead of 401 Unauthorized when a user lacks permission to a vhost, avoiding disclosure of the vhost's existence.</li> <li>Token expiry values that use a floating point number are now accepted, not just integers.</li> <li>To access all user-limits it is required administrator priviledge</li> <li>To access a user-limits for a specific user now require the requester to be that same user or have administrator/monitoring privileges.</li> </ul> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16709" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16709/hovercard">#16709</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>The management UI Content Security Policy (CSP) no longer includes the <code>unsafe-eval</code> and<br> <code>unsafe-inline</code> directives.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16916" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16916/hovercard">#16916</a></p> </li> </ul> <h3>Federation Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>In scenarios that involved a federated queue and a federated exchange with exactly the same name in the same virtual host,<br> deleting an upstream unintentionally corrupted the federated exchange(s) operating state, breaking federation<br> for the exchange in question.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/16991" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/16991/hovercard">#16991</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16997" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16997/hovercard">#16997</a></p> </li> </ul> <h3>Dependency Changes</h3> <p>None in this release.</p> michaelklishin tag:github.com,2008:Repository/924551/v4.2.9 2026-07-20T15:59:46Z

RabbitMQ 4.2.9

<p>RabbitMQ <code>4.2.9</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><strong>Important</strong>: starting with this release, the minimum supported Erlang version is <code>27.0</code>. Erlang/OTP <code>26</code> has reached<br> <a href="https://endoflife.date/erlang" rel="nofollow">end of life</a> and is no longer supported.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16914" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16914/hovercard">#16914</a></p> <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 index directory paths could accumulate slashes, eventually failing<br> with an <code>enametoolong</code> file system error.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16833" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16833/hovercard">#16833</a></p> </li> <li> <p>AMQP 1.0 management operations that declare an exchange with an alternate exchange now verify<br> the necessary permissions on the alternate exchange, matching AMQP 0-9-1.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16785" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16785/hovercard">#16785</a></p> </li> <li> <p>AMQP 1.0 management <code>GET /bindings</code> operations now behave consistently with the rest<br> of the binding-related handlers.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16790" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16790/hovercard">#16790</a></p> </li> <li> <p>Worker pool processes no longer terminate when they receive an unexpected message.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Ayanda-D/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Ayanda-D">@Ayanda-D</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16666" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16666/hovercard">#16666</a></p> </li> <li> <p>A race condition between concurrent queue (or virtual host) deletion and a Ra cluster shutdown<br> could log an exception.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Ayanda-D/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Ayanda-D">@Ayanda-D</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16880" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16880/hovercard">#16880</a></p> </li> <li> <p>A closing channel (connection) that failed to send <code>channel.close_ok</code> on an already terminated<br> writer or socket no longer produce log noise.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Ayanda-D/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Ayanda-D">@Ayanda-D</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16651" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16651/hovercard">#16651</a></p> </li> <li> <p>Unexpected failures during channel termination cleanup no longer produce log noise.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Ayanda-D/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Ayanda-D">@Ayanda-D</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16740" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16740/hovercard">#16740</a></p> </li> <li> <p>Code paths that use <code>rabbit_queue_type_util:erpc_call/5</code> now handle more errors.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Ayanda-D/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Ayanda-D">@Ayanda-D</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16701" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16701/hovercard">#16701</a></p> </li> <li> <p>Nodes could fail to start with a <code>bad_generator</code> exception in <code>rabbit_queue_decorator:select/1</code><br> when a quorum queue record in the metadata store had its decorators set to <code>undefined</code>.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/16843" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/16843/hovercard">#16843</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16844" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16844/hovercard">#16844</a></p> </li> <li> <p>Enabling <a href="https://www.rabbitmq.com/docs/firehose" rel="nofollow">tracing</a> on multiple virtual hosts concurrently could silently drop<br> some of the virtual hosts from the traced set. All virtual host tracing state modifications<br> are now linearized.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/16755" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/16755/hovercard">#16755</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16763" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16763/hovercard">#16763</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>Password salts are now generated using a cryptographically secure pseudo-random number generator (CSPRNG).</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16775" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16775/hovercard">#16775</a></p> </li> <li> <p>Socket-level metric collection used by several protocol readers and the management agent<br> now handles concurrently closed connections safely.</p> <p>Inspired by a contribution of <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/MugemaneBertin2001/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/MugemaneBertin2001">@MugemaneBertin2001</a>.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16856" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16856/hovercard">#16856</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16832" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16832/hovercard">#16832</a></p> </li> </ul> <h3>CLI Tools</h3> <h4>Bug Fixes</h4> <ul> <li> <p><code>rabbitmq-plugins</code> commands now tolerate plugins that are listed as enabled but are not installed.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16896" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16896/hovercard">#16896</a></p> </li> <li> <p><code>rabbitmq-plugins list</code> no longer outputs an empty plugin table when the target node<br> cannot be reached.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16791" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16791/hovercard">#16791</a></p> </li> <li> <p><code>rabbitmq-plugins</code> commands now correctly handle file paths of remote nodes, validate remote nodes<br> in offline mode, and no longer report false positives for <code>rabbitmq-plugins is_enabled</code>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16842" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16842/hovercard">#16842</a></p> </li> <li> <p>Shell (Bash, zsh) command completion fixes.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Chr1s70ph/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Chr1s70ph">@Chr1s70ph</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16776" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16776/hovercard">#16776</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p><code>rabbitmq-queues</code> and <code>rabbitmq-streams</code> now provide <code>transfer_leadership</code> commands<br> for individual queues and streams.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16757" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16757/hovercard">#16757</a></p> </li> <li> <p><code>rabbitmq-upgrade drain</code> safety improvements: the command now handles certain failures<br> more gracefully.</p> <p>Proposed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/MugemaneBertin2001/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/MugemaneBertin2001">@MugemaneBertin2001</a>.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16865" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16865/hovercard">#16865</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/issues/3369" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/3369/hovercard">#3369</a></p> </li> </ul> <h3>Stream Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Permissions required for certain stream protocol operations were adjusted to be consistent<br> with comparable operations over other protocols.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16754" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16754/hovercard">#16754</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>The maximum number of super stream partitions is now limited to 1,000 partitions by default.<br> This limit can be increased using the <code>stream.max_super_stream_partitions</code> key in <code>rabbitmq.conf</code>.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16689" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16689/hovercard">#16689</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16706" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16706/hovercard">#16706</a></p> </li> <li> <p>A client RPC timeout is now logged as a concise message instead of an exception<br> with a stack trace.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/MugemaneBertin2001/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/MugemaneBertin2001">@MugemaneBertin2001</a>.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16829" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16829/hovercard">#16829</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/issues/15744" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/15744/hovercard">#15744</a></p> </li> </ul> <h3>Management Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>OAuth 2 login could fail in Safari. A new token endpoint proxy is now used<br> for the affected authorization flow.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/16664" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/16664/hovercard">#16664</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16892" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16892/hovercard">#16892</a></p> </li> <li> <p>Several management UI templates now use safe string escaping in more places.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16738" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16738/hovercard">#16738</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16677" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16677/hovercard">#16677</a></p> </li> <li> <p>HTTP API message publishing endpoint now uses a timeout when waiting for publisher confirms.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16911" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16911/hovercard">#16911</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>Definition export over the HTTP API is now significantly more efficient and<br> transfers the result using HTTP response streaming.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16734" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16734/hovercard">#16734</a></p> </li> <li> <p>The <code>Referrer-Policy</code> HTTP response header is now set (and configurable).</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16893" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16893/hovercard">#16893</a></p> </li> <li> <p>HTTP API error responses were refactored to be more consistent and expose fewer internal details.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16709" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16709/hovercard">#16709</a></p> </li> </ul> <h3>OAuth 2 AuthN and AuthZ Backend Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Fractional <code>exp</code> (token expiry) timestamp values are now honored.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16713" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16713/hovercard">#16713</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>The token refresh path is now more robust.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16858" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16858/hovercard">#16858</a></p> </li> </ul> <h3>Shovel Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Several shovel bug fixes, including one for static shovel URIs whose credentials<br> could be logged.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16855" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16855/hovercard">#16855</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/issues/16835" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/16835/hovercard">#16835</a></p> </li> <li> <p>A shovel deleted before it successfully connected (in the <code>starting</code> state) no longer<br> leaks its status entry.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16767" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16767/hovercard">#16767</a></p> </li> </ul> <h3>Federation Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Federation upstream URIs are now validated more strictly.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16942" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16942/hovercard">#16942</a></p> </li> </ul> <h3>MQTT Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>More correct peer host detection in setups that have Proxy Protocol enabled.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16933" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16933/hovercard">#16933</a></p> </li> </ul> <h3>Web MQTT Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>More correct peer host detection in setups that have Proxy Protocol enabled.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16933" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16933/hovercard">#16933</a></p> </li> <li> <p>The <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security" rel="nofollow">HSTS</a> response header policy can now be configured for Web MQTT listeners.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/14161" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/14161/hovercard">#14161</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16772" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16772/hovercard">#16772</a></p> </li> </ul> <h3>STOMP Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>Internal socket handling refactoring shared by STOMP and Web STOMP connections.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16935" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16935/hovercard">#16935</a></p> </li> </ul> <h3>Web STOMP Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>More correct peer host detection in setups that have Proxy Protocol enabled.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16935" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16935/hovercard">#16935</a></p> </li> <li> <p>The <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security" rel="nofollow">HSTS</a> response header policy can now be configured for Web STOMP listeners.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/14161" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/14161/hovercard">#14161</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16772" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16772/hovercard">#16772</a></p> </li> </ul> <h3>LDAP AuthN and AuthZ Backend Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Additional DN escaping (RFC 4514) improvements</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16712" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16712/hovercard">#16712</a></p> </li> </ul> <h3>JMS Topic Exchange Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>JMS selector evaluation now uses much smaller, safer limits.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16951" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16951/hovercard">#16951</a></p> </li> </ul> <h3>AWS Peer Discovery Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Fixed a SigV4 request signing issue (<code>SignatureDoesNotMatch</code>) for body-less requests such as S3 <code>GET</code>s.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sdewhitt/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sdewhitt">@sdewhitt</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16759" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16759/hovercard">#16759</a></p> </li> </ul> <h3>Dependency Changes</h3> <ul> <li><code>cowboy</code> was upgraded to <a href="https://github.com/ninenines/cowboy/releases"><code>2.17.0</code></a></li> </ul> michaelklishin tag:github.com,2008:Repository/924551/v4.3.3 2026-07-20T16:00:02Z

RabbitMQ 4.3.3

<p>RabbitMQ <code>4.3.3</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><strong>Important</strong>: starting with this release, the minimum supported Erlang version is <code>27.0</code>. Erlang/OTP <code>26</code> has reached<br> <a href="https://endoflife.date/erlang" rel="nofollow">end of life</a> and is no longer supported.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16914" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16914/hovercard">#16914</a></p> <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>Quorum queue, Khepri and other Raft leaders could optimistically commit new log entries in certain scenarios.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/ra/pull/637" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/ra/pull/637/hovercard">rabbitmq/ra#637</a></p> </li> <li> <p>Quorum queues that use <a href="https://www.rabbitmq.com/docs/quorum-queues#dead-lettering" rel="nofollow"><code>at-least-once</code> dead lettering</a> could get their<br> dead lettering process permanently stuck after repeated queue membership changes.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/16652" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/16652/hovercard">#16652</a></p> </li> <li> <p>Classic queue index directory paths could accumulate slashes, eventually failing<br> with an <code>enametoolong</code> file system error.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16833" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16833/hovercard">#16833</a></p> </li> <li> <p>Enabling the <code>tie_binding_to_dest_with_keep_while_cond</code> feature flag could fail with an exception<br> when certain exchange-to-exchange topologies.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16824" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16824/hovercard">#16824</a></p> </li> <li> <p>An invalid <code>consumer_timeout</code> value in the configuration now falls back to the default<br> value (24 hours) instead of being used as is.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16799" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16799/hovercard">#16799</a></p> </li> <li> <p>AMQP 1.0 management operations that declare an exchange with an alternate exchange now verify<br> the necessary permissions on the alternate exchange, matching AMQP 0-9-1.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16785" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16785/hovercard">#16785</a></p> </li> <li> <p>AMQP 1.0 management <code>GET /bindings</code> operations now behave consistently with the rest<br> of the binding-related handlers.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16790" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16790/hovercard">#16790</a></p> </li> <li> <p>Worker pool processes no longer terminate when they receive an unexpected message.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Ayanda-D/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Ayanda-D">@Ayanda-D</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16666" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16666/hovercard">#16666</a></p> </li> <li> <p>A race condition between concurrent queue (or virtual host) deletion and a Ra cluster shutdown<br> could log an exception.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Ayanda-D/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Ayanda-D">@Ayanda-D</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16880" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16880/hovercard">#16880</a></p> </li> <li> <p>A closing channel (connection) that failed to send <code>channel.close_ok</code> on an already terminated<br> writer or socket no longer produce log noise.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Ayanda-D/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Ayanda-D">@Ayanda-D</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16651" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16651/hovercard">#16651</a></p> </li> <li> <p>Unexpected failures during channel termination cleanup no longer produce log noise.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Ayanda-D/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Ayanda-D">@Ayanda-D</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16740" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16740/hovercard">#16740</a></p> </li> <li> <p>Code paths that use <code>rabbit_queue_type_util:erpc_call/5</code> now handle more errors.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Ayanda-D/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Ayanda-D">@Ayanda-D</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16701" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16701/hovercard">#16701</a></p> </li> <li> <p>Nodes could fail to start with a <code>bad_generator</code> exception in <code>rabbit_queue_decorator:select/1</code><br> when a quorum queue record in the metadata store had its decorators set to <code>undefined</code>.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/16843" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/16843/hovercard">#16843</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16844" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16844/hovercard">#16844</a></p> </li> <li> <p>Enabling <a href="https://www.rabbitmq.com/docs/firehose" rel="nofollow">tracing</a> on multiple virtual hosts concurrently could silently drop<br> some of the virtual hosts from the traced set. All virtual host tracing state modifications<br> are now linearized.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/16755" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/16755/hovercard">#16755</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16763" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16763/hovercard">#16763</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>Password salts are now generated using a cryptographically secure pseudo-random number generator (CSPRNG).</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16775" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16775/hovercard">#16775</a></p> </li> <li> <p>Socket-level metric collection used by several protocol readers and the management agent<br> now handles concurrently closed connections safely.</p> <p>Inspired by a contribution of <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/MugemaneBertin2001/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/MugemaneBertin2001">@MugemaneBertin2001</a>.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16856" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16856/hovercard">#16856</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16832" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16832/hovercard">#16832</a></p> </li> </ul> <h3>CLI Tools</h3> <h4>Bug Fixes</h4> <ul> <li> <p><code>rabbitmq-plugins</code> commands now tolerate plugins that are listed as enabled but are not installed.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16896" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16896/hovercard">#16896</a></p> </li> <li> <p><code>rabbitmq-plugins list</code> no longer outputs an empty plugin table when the target node<br> cannot be reached.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16791" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16791/hovercard">#16791</a></p> </li> <li> <p><code>rabbitmq-plugins</code> commands now correctly handle file paths of remote nodes, validate remote nodes<br> in offline mode, and no longer report false positives for <code>rabbitmq-plugins is_enabled</code>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16842" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16842/hovercard">#16842</a></p> </li> <li> <p>Shell (Bash, zsh) command completion fixes.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Chr1s70ph/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Chr1s70ph">@Chr1s70ph</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16776" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16776/hovercard">#16776</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p><code>rabbitmq-queues</code> and <code>rabbitmq-streams</code> now provide <code>transfer_leadership</code> commands<br> for individual queues and streams.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16757" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16757/hovercard">#16757</a></p> </li> <li> <p><code>rabbitmq-upgrade drain</code> safety improvements: the command now handles certain failures<br> more gracefully.</p> <p>Proposed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/MugemaneBertin2001/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/MugemaneBertin2001">@MugemaneBertin2001</a>.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16865" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16865/hovercard">#16865</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/issues/3369" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/3369/hovercard">#3369</a></p> </li> </ul> <h3>Stream Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Permissions required for certain stream protocol operations were adjusted to be consistent<br> with comparable operations over other protocols.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16754" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16754/hovercard">#16754</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>The maximum number of super stream partitions is now limited to 1,000 partitions by default.<br> This limit can be increased using the <code>stream.max_super_stream_partitions</code> key in <code>rabbitmq.conf</code>.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16689" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16689/hovercard">#16689</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16706" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16706/hovercard">#16706</a></p> </li> <li> <p>A client RPC timeout is now logged as a concise message instead of an exception<br> with a stack trace.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/MugemaneBertin2001/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/MugemaneBertin2001">@MugemaneBertin2001</a>.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16829" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16829/hovercard">#16829</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/issues/15744" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/15744/hovercard">#15744</a></p> </li> </ul> <h3>Management Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>OAuth 2 login could fail in Safari. A new token endpoint proxy is now used<br> for the affected authorization flow.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/16664" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/16664/hovercard">#16664</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16892" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16892/hovercard">#16892</a></p> </li> <li> <p>Several management UI templates now use safe string escaping in more places.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16738" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16738/hovercard">#16738</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16677" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16677/hovercard">#16677</a></p> </li> <li> <p>HTTP API message publishing endpoint now uses a timeout when waiting for publisher confirms.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16911" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16911/hovercard">#16911</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>Definition export over the HTTP API is now significantly more efficient and<br> transfers the result using HTTP response streaming.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16734" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16734/hovercard">#16734</a></p> </li> <li> <p>The <code>Referrer-Policy</code> HTTP response header is now set (and configurable).</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16893" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16893/hovercard">#16893</a></p> </li> <li> <p>The <code>Allow</code> HTTP response header can now be excluded from HTTP API responses.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16907" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16907/hovercard">#16907</a></p> </li> <li> <p>HTTP API error responses were refactored to be more consistent and expose fewer internal details.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16709" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16709/hovercard">#16709</a></p> </li> <li> <p>HTTP access log entries for OAuth 2-authenticated requests now use the username determined<br> by the authentication backend (e.g. <code>preferred_username</code>) instead of the client ID.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16879" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16879/hovercard">#16879</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/issues/16559" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/16559/hovercard">#16559</a></p> </li> <li> <p>Definition file uploads via the management UI now require a <code>.json</code> file extension<br> (enabled via a feature switch).</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16946" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16946/hovercard">#16946</a></p> </li> </ul> <h3>OAuth 2 AuthN and AuthZ Backend Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Fractional <code>exp</code> (token expiry) timestamp values are now honored.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16713" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16713/hovercard">#16713</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>The token refresh path is now more robust.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16858" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16858/hovercard">#16858</a></p> </li> </ul> <h3>Shovel Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Several shovel bug fixes, including one for static shovel URIs whose credentials<br> could be logged.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16855" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16855/hovercard">#16855</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/issues/16835" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/16835/hovercard">#16835</a></p> </li> <li> <p>A shovel deleted before it successfully connected (in the <code>starting</code> state) no longer<br> leaks its status entry.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16767" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16767/hovercard">#16767</a></p> </li> <li> <p>Improved network failure recovery for shovels.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16662" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16662/hovercard">#16662</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>Shovels with AMQP 1.0 sources now support the <code>src-consumer-args</code> parameter.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16800" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16800/hovercard">#16800</a></p> </li> </ul> <h3>Federation Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Federation upstream URIs are now validated more strictly.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16942" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16942/hovercard">#16942</a></p> </li> <li> <p>Improved network failure recovery for shovels.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16662" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16662/hovercard">#16662</a></p> </li> <li> <p>Exchange federation links now trap exits later in the initialization process,<br> avoiding confusing timeouts and log noise.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16801" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16801/hovercard">#16801</a></p> </li> </ul> <h3>MQTT Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>More correct peer host detection in setups that have Proxy Protocol enabled.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16933" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16933/hovercard">#16933</a></p> </li> </ul> <h3>STOMP Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>Internal socket handling refactoring shared by STOMP and Web STOMP connections.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16935" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16935/hovercard">#16935</a></p> </li> </ul> <h3>Web MQTT Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>More correct peer host detection in setups that have Proxy Protocol enabled.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16933" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16933/hovercard">#16933</a></p> </li> <li> <p>The <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security" rel="nofollow">HSTS</a> response header policy can now be configured for Web MQTT listeners.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/14161" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/14161/hovercard">#14161</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16772" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16772/hovercard">#16772</a></p> </li> </ul> <h3>Web STOMP Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>More correct peer host detection in setups that have Proxy Protocol enabled.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16933" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16933/hovercard">#16933</a></p> </li> <li> <p>The <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security" rel="nofollow">HSTS</a> response header policy can now be configured for Web STOMP listeners.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/14161" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/14161/hovercard">#14161</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16772" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16772/hovercard">#16772</a></p> </li> </ul> <h3>LDAP AuthN and AuthZ Backend Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Additional DN escaping (RFC 4514) improvements</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16712" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16712/hovercard">#16712</a></p> </li> </ul> <h3>JMS Topic Exchange Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>JMS selector evaluation now uses much smaller, safer limits.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16951" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16951/hovercard">#16951</a></p> </li> </ul> <h3>AWS Peer Discovery Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Fixed a SigV4 request signing issue (<code>SignatureDoesNotMatch</code>) for body-less requests such as S3 <code>GET</code>s.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sdewhitt/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sdewhitt">@sdewhitt</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16759" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16759/hovercard">#16759</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.9"><code>3.1.9</code></a></li> <li><code>cowboy</code> was upgraded to <a href="https://github.com/ninenines/cowboy/releases"><code>2.17.0</code></a></li> </ul> michaelklishin tag:github.com,2008:Repository/924551/v4.2.8 2026-06-15T15:19:19Z

RabbitMQ 4.2.8

<p>RabbitMQ <code>4.2.8</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>Users created without a password or a password hash (for example, those that rely on<br> X.509 certificate-based authentication) over the HTTP API are now stored correctly,<br> exactly like the users whose password was cleared with <code>rabbitmqctl clear_password</code>.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/16629" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/16629/hovercard">#16629</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16633" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16633/hovercard">#16633</a></p> </li> <li> <p>Consumer activity status of classic queue consumers was not always correctly updated and reported<br> when <a href="https://www.rabbitmq.com/docs/consumers#single-active-consumer" rel="nofollow">single active consumer</a> was enabled.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16532" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16532/hovercard">#16532</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/issues/16450" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16450/hovercard">#16450</a></p> </li> <li> <p>Default queue type (DQT) validation now treats empty strings the same way as a missing value: by falling back<br> to the default (classic queues).</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16481" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/16481/hovercard">#16481</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16488" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16488/hovercard">#16488</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>The per-node channel limit (<code>channel_max_per_node</code>) is now also enforced for channels opened<br> on direct Erlang client connections used by the Shovel and Federation plugins, matching the behavior<br> enforced for "regular" AMQP 0-9-1 clients.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16616" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16616/hovercard">#16616</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16618" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16618/hovercard">#16618</a></p> </li> <li> <p>Modules are now loaded in parallel early on node boot, reducing node startup time.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16479" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16479/hovercard">#16479</a></p> </li> <li> <p>Several new <code>rabbitmq.conf</code> keys now support <a href="https://www.rabbitmq.com/docs/configure#configuration-encryption" rel="nofollow">encrypted values</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16632" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16632/hovercard">#16632</a></p> </li> </ul> <h3>CLI Tools</h3> <h4>Bug Fixes</h4> <ul> <li> <p><code>rabbitmqctl add_vhost</code> now validates the provided default queue type value.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16481" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/16481/hovercard">#16481</a></p> </li> </ul> <h3>Stream Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Fixed a frame assembly performance regression in the stream protocol reader.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16588" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16588/hovercard">#16588</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>Several stream protocol reader optimizations: stream metadata queries now contact cluster nodes concurrently,<br> subscription lookups use a more efficient data structure, and frame processing short-circuits<br> when a connection reaches a terminal state.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16588" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16588/hovercard">#16588</a></p> </li> </ul> <h3>Management Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>CORS hardening: <code>access-control-request-headers</code> values are now validated and<br> a wildcard (<code>*</code>) <code>origin</code> header value is rejected.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16544" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16544/hovercard">#16544</a></p> </li> <li> <p>Definitions import now limits the size of multipart upload bodies, and definitions export<br> download filenames are restricted to a safe character set.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16544" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16544/hovercard">#16544</a></p> </li> <li> <p>HTTP API 500 responses no longer include internal error details in the response body.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16544" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16544/hovercard">#16544</a></p> </li> <li> <p>Several HTTP response headers are now consistently lowercase, and a previously missing<br> <code>content-type</code> header was added to certain responses.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16544" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16544/hovercard">#16544</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>A one-time warning is now logged when the HSTS or CSP headers are disabled.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16544" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16544/hovercard">#16544</a></p> </li> <li> <p>The timestamp of the oldest message in a stream is now displayed on the stream page.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15412" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15412/hovercard">#15412</a></p> </li> </ul> <h3>Prometheus Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>More plugin configuration keys, such as <code>prometheus.ssl.password</code>, now support<br> <a href="https://www.rabbitmq.com/docs/configure#configuration-encryption" rel="nofollow">encrypted values</a> in <code>rabbitmq.conf</code>.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16516" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16516/hovercard">#16516</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16521" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16521/hovercard">#16521</a></p> </li> </ul> <h3>MQTT Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p><code>mqtt.tcp_listen_options.*</code> settings in <code>rabbitmq.conf</code> did not take effect<br> due to a configuration translation issue.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16529" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16529/hovercard">#16529</a></p> </li> </ul> <h3>Dependency Changes</h3> <ul> <li><code>cuttlefish</code> was upgraded to <a href="https://github.com/Kyorai/cuttlefish/releases"><code>3.9.1</code></a></li> <li><code>cowboy</code> was upgraded to <a href="https://github.com/ninenines/cowboy/releases"><code>2.16.0</code></a></li> <li><code>cowlib</code> was upgraded to <a href="https://github.com/ninenines/cowlib/releases"><code>2.17.0</code></a></li> <li><code>gun</code> was upgraded to <a href="https://github.com/ninenines/gun/releases"><code>2.4.0</code></a></li> </ul> michaelklishin tag:github.com,2008:Repository/924551/v4.3.2 2026-06-15T15:38:54Z

RabbitMQ 4.3.2

<p>RabbitMQ <code>4.3.2</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>Enabling the <code>tie_binding_to_dest_with_keep_while_cond</code> feature flag could fail in some<br> rare cases.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/16587" data-hovercard-type="discussion" data-hovercard-url="/rabbitmq/rabbitmq-server/discussions/16587/hovercard">#16587</a></p> </li> <li> <p>Users created without a password or a password hash (for example, those that rely on<br> X.509 certificate-based authentication) over the HTTP API are now stored correctly,<br> exactly like the users whose password was cleared with <code>rabbitmqctl clear_password</code>.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/16629" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/16629/hovercard">#16629</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16633" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16633/hovercard">#16633</a></p> </li> <li> <p>Consumer activity status of classic queue consumers was not always correctly updated and reported<br> when <a href="https://www.rabbitmq.com/docs/consumers#single-active-consumer" rel="nofollow">single active consumer</a> was enabled.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16532" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16532/hovercard">#16532</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/issues/16450" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16450/hovercard">#16450</a></p> </li> <li> <p>The values of the <code>x-consumer-timeout</code> and <code>x-consumer-disconnected-timeout</code> optional arguments<br> are now validated at queue declaration time.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16557" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16557/hovercard">#16557</a></p> </li> <li> <p>Default queue type (DQT) validation now treats empty strings the same way as a missing value: by falling back.<br> to the default (classic queues).</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16481" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/16481/hovercard">#16481</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16488" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16488/hovercard">#16488</a></p> </li> <li> <p>Feature flag operations now avoid unnecessary work: flags that are already enabled on all cluster nodes<br> are excluded from synchronization, and enabling an empty set of flags is a no-op.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16497" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16497/hovercard">#16497</a></p> </li> <li> <p>Configuration changes for <a href="https://www.rabbitmq.com/docs/deprecated-features" rel="nofollow">deprecated features</a> are now<br> honored when possible.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16500" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16500/hovercard">#16500</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>The per-node channel limit (<code>channel_max_per_node</code>) is now also enforced for channels opened<br> on direct Erlang client connections used by the Shovel and Federation plugins, matching the behavior<br> enforced for "regular" AMQP 0-9-1 clients.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16616" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16616/hovercard">#16616</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16618" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16618/hovercard">#16618</a></p> </li> <li> <p>Modules are now loaded in parallel early on node boot, reducing node startup time.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16479" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16479/hovercard">#16479</a></p> </li> <li> <p>Several new <code>rabbitmq.conf</code> keys now supports <a href="https://www.rabbitmq.com/docs/configure#configuration-encryption" rel="nofollow">encrypted values</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16632" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16632/hovercard">#16632</a></p> </li> </ul> <h3>CLI Tools</h3> <h4>Bug Fixes</h4> <ul> <li> <p><code>rabbitmqctl set_topic_permissions</code> now validates target user and exchange for existence.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16590" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16590/hovercard">#16590</a></p> </li> <li> <p><code>rabbitmqctl add_vhost</code> now validates the provided default queue type value.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16481" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/16481/hovercard">#16481</a></p> </li> </ul> <h3>Stream Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Fixed a frame assembly performance regression in the stream protocol reader.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16588" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16588/hovercard">#16588</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>Several stream protocol reader optimizations: stream metadata queries now contact cluster nodes concurrently,<br> subscription lookups use a more efficient data structure, and frame processing short-circuits<br> when a connection reaches a terminal state.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16588" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16588/hovercard">#16588</a></p> </li> </ul> <h3>Management Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>CORS hardening: <code>access-control-request-headers</code> values are now validated and<br> a wildcard (<code>*</code>) <code>origin</code> header value is rejected.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16544" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16544/hovercard">#16544</a></p> </li> <li> <p>Definitions import now limits the size of multipart upload bodies, and definitions export<br> download filenames are restricted to a safe character set.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16544" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16544/hovercard">#16544</a></p> </li> <li> <p>HTTP API 500 responses no longer include internal error details in the response body.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16544" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16544/hovercard">#16544</a></p> </li> <li> <p>Several HTTP response headers are now consistently lowercase, and a previously missing<br> <code>content-type</code> header was added to certain responses.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16544" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16544/hovercard">#16544</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>A one-time warning is now logged when the HSTS or CSP headers are disabled.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16544" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16544/hovercard">#16544</a></p> </li> <li> <p>The timestamp of the oldest message in a stream is now displayed on the stream page.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/15412" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/15412/hovercard">#15412</a></p> </li> <li> <p>The queue list page can now display a "Delayed" message count column, for example, for<br> <a href="https://www.rabbitmq.com/docs/quorum-queues" rel="nofollow">quorum queues</a> that have a retry policy configured.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16639" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16639/hovercard">#16639</a></p> </li> </ul> <h3>Prometheus Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>More plugin configuration keys, such as <code>prometheus.ssl.password</code>, now support<br> <a href="https://www.rabbitmq.com/docs/configure#configuration-encryption" rel="nofollow">encrypted values</a> in <code>rabbitmq.conf</code>.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16516" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16516/hovercard">#16516</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16521" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16521/hovercard">#16521</a></p> </li> </ul> <h3>MQTT Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p><code>mqtt.tcp_listen_options.*</code> settings in <code>rabbitmq.conf</code> did not take effect<br> due to a configuration translation issue.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/16529" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/16529/hovercard">#16529</a></p> </li> </ul> <h3>Dependency Changes</h3> <ul> <li><code>cuttlefish</code> was upgraded to <a href="https://github.com/Kyorai/cuttlefish/releases"><code>3.9.1</code></a></li> <li><code>cowboy</code> was upgraded to <a href="https://github.com/ninenines/cowboy/releases"><code>2.16.0</code></a></li> <li><code>cowlib</code> was upgraded to <a href="https://github.com/ninenines/cowlib/releases"><code>2.17.0</code></a></li> <li><code>gun</code> was upgraded to <a href="https://github.com/ninenines/gun/releases"><code>2.4.0</code></a></li> </ul> michaelklishin 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"># Enables deprecated non-durable (transient) non-exclusive queues <span class="pl-c"><span class="pl-c"># (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</span>
</span>
RabbitMQ 4.2.6</span>
</span>
<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</span>
<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</span>
Tip: Highlight text to share or add to ignore lists.  — Download difference patch
For now, Differences are performed on text, not graphically, only the latest screenshot is available.
Screenshot requires Playwright/WebDriver enabled