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