tag:github.com,2008:https://github.com/rabbitmq/rabbitmq-server/releases Release notes from rabbitmq-server 2024-12-16T03:48:51Z tag:github.com,2008:Repository/924551/v4.0.5 2024-12-18T20:52:07Z RabbitMQ 4.0.5 <p>RabbitMQ <code>4.0.5</code> is a maintenance release in the <code>4.0.x</code> <a href="https://www.rabbitmq.com/release-information" rel="nofollow">release series</a>.</p> <p>Starting June 1st, 2024, community support for this series will only be provided to <a href="https://github.com/rabbitmq/rabbitmq-server/blob/main/COMMUNITY_SUPPORT.md">regularly contributing users</a> and those<br> who hold a valid <a href="https://tanzu.vmware.com/rabbitmq/oss" rel="nofollow">commercial support license</a>.</p> <p>It is <strong>strongly recommended</strong> that you read <a href="https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.0.1">4.0 release notes</a><br> in detail if upgrading from a version prior to <code>4.0.0</code>.</p> <h3>Minimum Supported Erlang Version</h3> <p>This release requires Erlang 26 and supports Erlang versions up to <code>27.2.x</code>.<br> <a href="https://www.rabbitmq.com/docs/which-erlang" rel="nofollow">RabbitMQ and Erlang/OTP Compatibility Matrix</a> has more details on<br> 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.0.x/release-notes">rabbitmq-server/release-notes</a>.</p> <h3>Core Broker</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Reintroduced transient flow control between classic queue replicas and AMQP 0-9-1 channels,<br> MQTT connections.</p> <p>Flow control between these specific parts of the core were unintentionally<br> removed in <code>4.0.0</code> together with classic queue mirroring.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/gomoripeti/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/gomoripeti">@gomoripeti</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12907" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12907/hovercard">#12907</a></p> </li> <li> <p>The feature that warns when deprecated features are used in the cluster had a false positive that treated (and reported) any queue<br> as a "transient non-exclusive classic queue", even if the queue was of a different type, was not transient, and so on.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/12802" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/12802/hovercard">#12802</a></p> </li> <li> <p>AMQP 1.0 clients with close to peak consumption rates with a high <code>max_link_creadit</code> setting could run into an exception<br> because RabbitMQ could set the incoming window size to a negative value.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/12816" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/12816/hovercard">#12816</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12904" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12904/hovercard">#12904</a></p> </li> <li> <p>AMQP 0-9-1 channel exception generator could not handle entity names (say, queue or stream names)<br> that contained non-ASCII characters.</p> <p>This affected applications that use passive queue declarations, such as the Shovel plugin.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bpint/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bpint">@bpint</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12888" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12888/hovercard">#12888</a></p> </li> <li> <p>Peer discovery resilience improvements.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12801" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12801/hovercard">#12801</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12809" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12809/hovercard">#12809</a></p> </li> <li> <p>Deadlettering of some messages could result in an exception.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/12933" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/12933/hovercard">#12933</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12938" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12938/hovercard">#12938</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>For virtual hosts that have a <a href="https://www.rabbitmq.com/docs/vhosts#default-queue-type" rel="nofollow">default queue type</a> configured, the DQT value is now injected into<br> queue definitions in exported definition documents.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/12776" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/12776/hovercard">#12776</a></p> </li> <li> <p>Definition export files now have an additional "type" markers that help distinguish a cluster-wide definition file from<br> that of a single virtual host.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/12835" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/12835/hovercard">#12835</a></p> </li> </ul> <h3>Prometheus Plugin and Grafana Dashboards</h3> <h4>Enhancements</h4> <ul> <li> <p>Two new metrics for streams.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/gomoripeti/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/gomoripeti">@gomoripeti</a> and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/markus812498/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/markus812498">@markus812498</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12765" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12765/hovercard">#12765</a></p> </li> </ul> <h3>Management Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Fixes a false positive that incorrectly reported deprecated feature use, specifically<br> the use of non-exclusive transient classic queues.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12840" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12840/hovercard">#12840</a></p> </li> <li> <p><code>GET /api/overview</code> did not format empty cluster and node list tags as an empty JSON object,<br> which was problematic for HTTP API clients with statically typed response data structures.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12797" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12797/hovercard">#12797</a></p> </li> <li> <p>When a logged in user's JWT token was refreshed, the user identity displayed in the UI was changed.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12818" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12818/hovercard">#12818</a></p> </li> </ul> <h3>OAuth 2 Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>When a logged in user's JWT token was refreshed, the user identity displayed in the UI was changed.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12818" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12818/hovercard">#12818</a></p> </li> </ul> <h3>AWS Peer Discovery Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Avoids an exception during automatic removal of cluster members that are<br> no longer returned by peer discovery (an <a href="https://www.rabbitmq.com/docs/cluster-formation#node-health-checks-and-cleanup" rel="nofollow">opt-in feature</a>).</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12809" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12809/hovercard">#12809</a></p> </li> </ul> <h3>Kubernetes Peer Discovery Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Avoids an exception during automatic removal of cluster members that are<br> no longer returned by peer discovery (an <a href="https://www.rabbitmq.com/docs/cluster-formation#node-health-checks-and-cleanup" rel="nofollow">opt-in feature</a>).</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12809" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12809/hovercard">#12809</a></p> </li> </ul> <h3>Consul Peer Discovery Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Avoids an exception during automatic removal of cluster members that are<br> no longer returned by peer discovery (an <a href="https://www.rabbitmq.com/docs/cluster-formation#node-health-checks-and-cleanup" rel="nofollow">opt-in feature</a>).</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12809" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12809/hovercard">#12809</a></p> </li> </ul> <h3>etcd Peer Discovery Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Avoids an exception during automatic removal of cluster members that are<br> no longer returned by peer discovery (an <a href="https://www.rabbitmq.com/docs/cluster-formation#node-health-checks-and-cleanup" rel="nofollow">opt-in feature</a>).</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12809" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12809/hovercard">#12809</a></p> </li> </ul> <h3>Dependency Changes</h3> <ul> <li><code>osiris</code> was upgraded to <a href="https://github.com/rabbitmq/osiris/releases"><code>1.8.5</code></a></li> </ul> <h3>Build Commit</h3> <p><a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/rabbitmq/rabbitmq-server/commit/293a4f665ac59c6d53732a18340a76e69c257ea8/hovercard" href="https://github.com/rabbitmq/rabbitmq-server/commit/293a4f665ac59c6d53732a18340a76e69c257ea8"><tt>293a4f6</tt></a></p> <h2>Source Code Archives</h2> <p>To obtain source code of the entire distribution, please download the archive named <code>rabbitmq-server-4.0.5.tar.xz</code><br> instead of the source tarball produced by GitHub.</p> rabbitmq-ci tag:github.com,2008:Repository/924551/v4.1.0-beta.3 2024-12-11T01:26:56Z RabbitMQ 4.1.0-beta.3 <p>RabbitMQ 4.1.0-beta.3 is a preview release (in development) of a new feature release.</p> <p>See Compatibility Notes below to learn about <strong>breaking or potentially breaking changes</strong> in this release.</p> <h2>Highlights</h2> <p>Some key improvements in this release are listed below.</p> <h3>Initial Support for AMQP 1.0 Filter Expressions</h3> <p>Support for the <code>properties</code> and <code>appliation-properties</code> filters of <a href="https://groups.oasis-open.org/higherlogic/ws/public/document?document_id=66227" rel="nofollow">AMQP Filter Expressions Version 1.0 Working Draft 09</a>.</p> <h3>Feature Flags Quality of Life Improvements</h3> <p>Graduated (mandatory) <a href="https://www.rabbitmq.com/docs/feature-flags" rel="nofollow">feature flags</a> several minors ago has proven that they could use some user experience improvements.<br> For example, certain required feature flags will now be enabled on node boot when all nodes in the cluster support them.</p> <p>See core server changes below as well as the <a href="https://github.com/orgs/rabbitmq/projects/4/views/1">GitHub project dedicated to feature flags improvements</a><br> for the complete list of related changes.</p> <h2>Breaking Changes and Compatibility Notes</h2> <h3>MQTT</h3> <ul> <li> <p>The default MQTT <a href="https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901086" rel="nofollow">Maximum Packet Size</a> changed from 256 MiB to 16 MiB.</p> <p>This default can be overridden by <a href="https://www.rabbitmq.com/docs/configure#config-file" rel="nofollow">configuring</a> <code>mqtt.max_packet_size_authenticated</code>.<br> Note that this value must not be greater than <code>max_message_size</code> (which also defaults to 16 MiB).</p> </li> </ul> <h2>Erlang/OTP Compatibility Notes</h2> <p>This release <a href="https://www.rabbitmq.com/docs/which-erlang" rel="nofollow">requires Erlang 26.2</a> and supports Erlang 27.x.</p> <p><a href="https://www.rabbitmq.com/docs/which-erlang#erlang-repositories" rel="nofollow">Provisioning Latest Erlang Releases</a> explains<br> what package repositories and tools can be used to provision latest patch versions of Erlang 26.x.</p> <h2>Release Artifacts</h2> <p>Artifacts for preview releases are distributed via GitHub releases:</p> <ul> <li>In main repository, <a href="https://github.com/rabbitmq/rabbitmq-server/releases"><code>rabbitmq/rabbitmq-server</code></a></li> <li>In the development builds repository, <a href="https://github.com/rabbitmq/server-packages/releases"><code>rabbitmq/server-packages</code></a></li> </ul> <p>There is a <code>4.1.0</code> preview version of the <a href="https://github.com/docker-library/rabbitmq">community RabbitMQ image</a>.</p> <h2>Upgrading to 4.1.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 only supports upgrades from <code>4.0.x</code>.</p> <p><a href="https://www.rabbitmq.com/docs/blue-green-upgrade" rel="nofollow">Blue/Green Deployment</a>-style upgrades are avaialble for migrations from 3.12.x and 3.13.x series<br> to <code>4.1.x</code>.</p> <h3>Required Feature Flags</h3> <p>None/TBD.</p> <h3>Mixed version cluster compatibility</h3> <p>RabbitMQ 4.1.0 nodes can run alongside <code>4.0.x</code> nodes. <code>4.1.x</code>-specific features can only be made available when all nodes in the cluster<br> upgrade to 4.0.0 or a later patch release in the new series.</p> <p>While operating in mixed version mode, some aspects of the system may not behave as expected. The list of known behavior changes will be covered in future updates.<br> Once all nodes are upgraded to 4.1.0, these irregularities will go away.</p> <p>Mixed version clusters are a mechanism that allows rolling upgrade 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> <p>This section can be incomplete and will be expanded as 4.1 approaches its release candidate stage.</p> <h3>Core Server</h3> <h4>Enhancements</h4> <ul> <li> <p>Feature flag quality of live improvements.</p> <p>Certain required feature flags will now be automatically required on node boot<br> and do not have to be explicitly enabled before an upgrade.<br> This does not apply to all feature flags, however.</p> <p>GitHub project: <a href="https://github.com/orgs/rabbitmq/projects/4/views/1">#4</a>.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12466" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12466/hovercard">#12466</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12444" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12444/hovercard">#12444</a>,<br> <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12447" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12447/hovercard">#12447</a></p> </li> <li> <p><code>properties</code> and <code>appliation-properties</code> filters of <a href="https://groups.oasis-open.org/higherlogic/ws/public/document?document_id=66227" rel="nofollow">AMQP Filter Expressions Version 1.0 Working Draft 09</a><br> when consuming from a stream via AMQP 1.0. String prefix and suffix matching is also supported.</p> <p>This feature adds the ability to RabbitMQ to have multiple concurrent clients each consuming only a subset of messages while maintaining message order.<br> It also reduces network traffic between RabbitMQ and clients by only dispatching those messages that the clients are actually interested in.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12415" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12415/hovercard">#12415</a></p> </li> <li> <p>AMQP 1.0 connections that use OAuth 2.0 now can renew their JWT tokens<br> This allows clients to set a new token proactively before the current one <a href="/rabbitmq/rabbitmq-server/blob/v4.1.0-beta.3/docs/oauth2#token-expiration">expires</a>, ensuring uninterrupted connectivity.<br> If a client does not set a new token before the existing one expires, RabbitMQ will automatically close the AMQP 1.0 connection.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12599" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12599/hovercard">#12599</a></p> </li> <li> <p>Nodes will now fall back to system CA certificate list (if available) when no CA certificate<br> is explicitly configured.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/LoisSotoLopez/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/LoisSotoLopez">@LoisSotoLopez</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/10519" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/10519/hovercard">#10519</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12564" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12564/hovercard">#12564</a></p> </li> <li> <p>Support for Multiple Routing Keys in AMQP 1.0 via <code>x-cc</code> Message Annotation.</p> <p>AMQP 1.0 publishers now can set multiple routing keys by using the <code>x-cc</code> message annotation.<br> This annotation allows publishers to specify a <a href="https://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-types-v1.0-os.html#type-list" rel="nofollow">list</a><br> of routing keys (<a href="https://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-types-v1.0-os.html#type-string" rel="nofollow">strings</a>) for more flexible message distribution,<br> similar to the <a href="https://www.rabbitmq.com/docs/sender-selected" rel="nofollow">CC</a> header in AMQP 0.9.1.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12559" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12559/hovercard">#12559</a></p> </li> <li> <p>Peer discovery resilience improvements.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12801" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12801/hovercard">#12801</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12809" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12809/hovercard">#12809</a></p> </li> </ul> <h4>Bug Fixes</h4> <ul> <li> <p>AMQP 0-9-1 channel exception generator could not handle entity names (say, queue or stream names)<br> that contained non-ASCII characters.</p> <p>This affected applications that use passive queue declarations, such as the Shovel plugin.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bpint/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bpint">@bpint</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12888" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12888/hovercard">#12888</a></p> </li> <li> <p>Reintroduced transient flow control between classic queue replicas and AMQP 0-9-1 channels,<br> MQTT connections.</p> <p>Flow control between these specific parts of the core were unintentionally<br> removed in <code>4.0.0</code> together with classic queue mirroring.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/gomoripeti/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/gomoripeti">@gomoripeti</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12907" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12907/hovercard">#12907</a></p> </li> <li> <p>AMQP 1.0 connections with a higher consumption rate could set the incoming window field<br> on the flow frame to a negative value, which resulted in an exception that affected the consumer.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/12816" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/12816/hovercard">#12816</a></p> </li> <li> <p>In rare cases quorum queue could end up without an elected leader because<br> chosen candidate replica was not verified for aliveness.</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 issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12727" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12727/hovercard">#12727</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/discussions/10423" data-hovercard-type="discussion" data-hovercard-url="/rabbitmq/rabbitmq-server/discussions/10423/hovercard">#10423</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/discussions/12701" data-hovercard-type="discussion" data-hovercard-url="/rabbitmq/rabbitmq-server/discussions/12701/hovercard">#12701</a></p> </li> <li> <p>When a new replica is added to a quorum queue, the node that handles this request will now wait<br> the operation to complete. Previously an early return could result in confusing <code>cluster_change_not_permitted</code><br> errors for subsequent operations, for example, an addition of another replica.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12837" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12837/hovercard">#12837</a></p> </li> <li> <p>In very rare cases, RabbitMQ could fail to notify stream consumers connected to follower replicas<br> about newly committed offsets as quickly as it usually happens for consumers connected to the stream leader.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12785" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12785/hovercard">#12785</a></p> </li> </ul> <h3>MQTT Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>The default MQTT <a href="https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901086" rel="nofollow">Maximum Packet Size</a> changed from 256 MiB to 16 MiB.</p> <p>This default can be overridden by <a href="https://www.rabbitmq.com/docs/configure#config-file" rel="nofollow">configuring</a> <code>mqtt.max_packet_size_authenticated</code>.<br> Note that this value must not be greater than <code>max_message_size</code> (which also defaults to 16 MiB).</p> </li> </ul> <h3>CLI Tools</h3> <h4>Enhancements</h4> <ul> <li> <p>New major version of <code>rabbitmqadmin</code>, a CLI tool that targets RabbitMQ's HTTP API, is maturing.<br> Unlike its predecessor, the tool is distirbuted via GitHub as as a standalone native binary.</p> <p>There are minor command line interface changes and a slightly different configuration file<br> format (<a href="https://toml.io/en/" rel="nofollow">TOML</a> instead of <code>ini</code>)</p> <p>GitHub repository: <a href="https://github.com/rabbitmq/rabbitmqadmin-ng"><code>rabbitmq/rabbitmqadmin-ng</code></a></p> </li> <li> <p><code>rabbitmq-diagnostics check_if_any_deprecated_features_are_used</code> implementation is now more complete<br> (checks for a more deprecated features).</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12675" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12675/hovercard">#12675</a></p> </li> </ul> <h4>Bug Fixes</h4> <ul> <li> <p>Fixes a false positive that incorrectly reported deprecated feature use, specifically<br> the use of non-exclusive transient classic queues.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12840" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12840/hovercard">#12840</a></p> </li> </ul> <h3>Prometheus Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>RabbitMQ nodes now provide a Prometheus histogram for message sizes published by applications.</p> <p>This feature allows operators to gain insights into the message sizes being published to RabbitMQ,<br> such as average message size, number of messages per pre-defined bucket (which can both be computed accurately), and percentiles (which will be approximated).<br> Each metric is labelled by protocol (AMQP 1.0, AMQP 0.9.1, MQTT 5.0, MQTT 3.1.1, and MQTT 3.1).</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12342" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12342/hovercard">#12342</a></p> </li> <li> <p>Two new stream metrics for streams.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/gomoripeti/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/gomoripeti">@gomoripeti</a> and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/markus812498/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/markus812498">@markus812498</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12765" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12765/hovercard">#12765</a></p> </li> </ul> <h3>Grafana Dashboards</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Grafana 11.3.x compatibility.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/anhanhnguyen/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/anhanhnguyen">@anhanhnguyen</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12720" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12720/hovercard">#12720</a></p> </li> </ul> <h3>Management UI</h3> <h4>Enhancements</h4> <ul> <li> <p>Static assets served by the management UI now have a <code>control-cache</code> header set<br> to make sure that browsers reload them between upgrades.</p> <p>UI code now tries to track version changes to perform a forced reload of the entire page.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12749" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12749/hovercard">#12749</a></p> </li> <li> <p>Connection pages now display detailed AMQP 1.0 session and link information:</p> <ol> <li>Link names</li> <li>Link target and source addresses</li> <li>Link flow control state</li> <li>Session flow control state</li> <li>Number of unconfirmed and unacknowledged messages</li> </ol> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12670" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12670/hovercard">#12670</a></p> </li> <li> <p>The management UI now shows if a feature flag has a migration function (in other words, it may take time to be enabled),<br> if it is experimental and whether it is supported or not. To enable an experimental feature flag,<br> a user must to tick checkboxes to confirm they know what they are doing.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12643" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12643/hovercard">#12643</a></p> </li> <li> <p>Feature flags are now enabled using asynchronous requests in the management UI.<br> This means that feature flags that perform data migrations (which can take some time)<br> won't block the browser tab.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12643" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12643/hovercard">#12643</a></p> </li> </ul> <h4>Bug Fixes</h4> <ul> <li> <p>Fixes a false positive that incorrectly reported deprecated feature use, specifically<br> the use of non-exclusive transient classic queues.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12840" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12840/hovercard">#12840</a></p> </li> <li> <p>When a logged in user's JWT token was refreshed, the user identity displayed in the UI was changed.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12818" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12818/hovercard">#12818</a></p> </li> </ul> <h3>Shovel Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>AMQP 0-9-1 channel exception generator could not handle entity names (say, queue or stream names)<br> that contained non-ASCII characters.</p> <p>This affected applications that use passive queue declarations, such as the Shovel plugin.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bpint/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bpint">@bpint</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12888" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12888/hovercard">#12888</a></p> </li> </ul> <h3>Event Exchange Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>The <code>rabbitmq_event_exchange</code> plugin now can be configured to internally publish AMQP 1.0 instead of AMQP 0.9.1 messages to the <code>amq.rabbitmq.event</code> topic exchange.</p> <p>This allows AMQP 1.0 consumers to receive event properties containing complex types such as <a href="https://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-types-v1.0-os.html#type-list" rel="nofollow">lists</a><br> or <a href="https://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-types-v1.0-os.html#type-map" rel="nofollow">maps</a>, for example queue arguments for the <code>queue.created</code><br> event or client provided properties for the <code>connection.created</code> event.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12714" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12714/hovercard">#12714</a></p> </li> </ul> <h3>AWS Peer Discovery Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Avoids an exception during automatic removal of cluster members that are<br> no longer returned by peer discovery (an <a href="https://www.rabbitmq.com/docs/cluster-formation#node-health-checks-and-cleanup" rel="nofollow">opt-in feature</a>).</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12809" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12809/hovercard">#12809</a></p> </li> </ul> <h3>Kubernetes Peer Discovery Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Avoids an exception during automatic removal of cluster members that are<br> no longer returned by peer discovery (an <a href="https://www.rabbitmq.com/docs/cluster-formation#node-health-checks-and-cleanup" rel="nofollow">opt-in feature</a>).</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12809" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12809/hovercard">#12809</a></p> </li> </ul> <h3>Consul Peer Discovery Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Avoids an exception during automatic removal of cluster members that are<br> no longer returned by peer discovery (an <a href="https://www.rabbitmq.com/docs/cluster-formation#node-health-checks-and-cleanup" rel="nofollow">opt-in feature</a>).</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12809" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12809/hovercard">#12809</a></p> </li> </ul> <h3>etcd Peer Discovery Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Avoids an exception during automatic removal of cluster members that are<br> no longer returned by peer discovery (an <a href="https://www.rabbitmq.com/docs/cluster-formation#node-health-checks-and-cleanup" rel="nofollow">opt-in feature</a>).</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12809" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12809/hovercard">#12809</a></p> </li> </ul> <h3>Dependency Changes</h3> <ul> <li><code>osiris</code> was upgraded to <a href="https://github.com/rabbitmq/osiris/releases"><code>1.8.5</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.1.0.tar.xz</code><br> instead of the source tarball produced by GitHub.</p> rabbitmq-ci tag:github.com,2008:Repository/924551/v4.1.0-beta.2 2024-11-24T00:08:34Z RabbitMQ 4.1.0-beta.2 <p>RabbitMQ 4.1.0-beta.2 is a preview release (in development) of a new feature release.</p> <p>See Compatibility Notes below to learn about <strong>breaking or potentially breaking changes</strong> in this release.</p> <h2>Highlights</h2> <p>Some key improvements in this release are listed below.</p> <h3>Initial Support for AMQP 1.0 Filter Expressions</h3> <p>Support for the <code>properties</code> and <code>appliation-properties</code> filters of <a href="https://groups.oasis-open.org/higherlogic/ws/public/document?document_id=66227" rel="nofollow">AMQP Filter Expressions Version 1.0 Working Draft 09</a>.</p> <h3>Feature Flags Quality of Life Improvements</h3> <p>Graduated (mandatory) <a href="https://www.rabbitmq.com/docs/feature-flags" rel="nofollow">feature flags</a> several minors ago has proven that they could use some user experience improvements.<br> For example, certain required feature flags will now be enabled on node boot when all nodes in the cluster support them.</p> <p>See core server changes below as well as the <a href="https://github.com/orgs/rabbitmq/projects/4/views/1">GitHub project dedicated to feature flags improvements</a><br> for the complete list of related changes.</p> <h2>Breaking Changes and Compatibility Notes</h2> <h3>MQTT</h3> <ul> <li> <p>The default MQTT <a href="https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901086" rel="nofollow">Maximum Packet Size</a> changed from 256 MiB to 16 MiB.</p> <p>This default can be overridden by <a href="https://www.rabbitmq.com/docs/configure#config-file" rel="nofollow">configuring</a> <code>mqtt.max_packet_size_authenticated</code>.<br> Note that this value must not be greater than <code>max_message_size</code> (which also defaults to 16 MiB).</p> </li> </ul> <h2>Erlang/OTP Compatibility Notes</h2> <p>This release <a href="https://www.rabbitmq.com/docs/which-erlang" rel="nofollow">requires Erlang 26.2</a>.</p> <p><a href="https://www.rabbitmq.com/docs/which-erlang#erlang-repositories" rel="nofollow">Provisioning Latest Erlang Releases</a> explains<br> what package repositories and tools can be used to provision latest patch versions of Erlang 26.x.</p> <h2>Release Artifacts</h2> <p>TBD</p> <h2>Upgrading to 4.1.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 only supports upgrades from <code>4.0.x</code>.</p> <p><a href="https://www.rabbitmq.com/docs/blue-green-upgrade" rel="nofollow">Blue/Green Deployment</a>-style upgrades are avaialble for migrations from 3.12.x and 3.13.x series<br> to <code>4.1.x</code>.</p> <h3>Required Feature Flags</h3> <p>None/TBD.</p> <h3>Mixed version cluster compatibility</h3> <p>RabbitMQ 4.1.0 nodes can run alongside <code>4.0.x</code> nodes. <code>4.1.x</code>-specific features can only be made available when all nodes in the cluster<br> upgrade to 4.0.0 or a later patch release in the new series.</p> <p>While operating in mixed version mode, some aspects of the system may not behave as expected. The list of known behavior changes will be covered in future updates.<br> Once all nodes are upgraded to 4.1.0, these irregularities will go away.</p> <p>Mixed version clusters are a mechanism that allows rolling upgrade 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>TBD</p> <h2>Changes Worth Mentioning</h2> <p>This section is incomplete and will be expanded as 4.1 approaches its release candidate stage.</p> <h3>Core Server</h3> <h4>Enhancements</h4> <ul> <li> <p>Feature flag quality of live improvements.</p> <p>Certain required feature flags will now be automatically required on node boot<br> and do not have to be explicitly enabled before an upgrade.<br> This does not apply to all feature flags, however.</p> <p>GitHub project: <a href="https://github.com/orgs/rabbitmq/projects/4/views/1">#4</a>.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12466" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12466/hovercard">#12466</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12444" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12444/hovercard">#12444</a>,<br> <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12447" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12447/hovercard">#12447</a></p> </li> <li> <p><code>properties</code> and <code>appliation-properties</code> filters of <a href="https://groups.oasis-open.org/higherlogic/ws/public/document?document_id=66227" rel="nofollow">AMQP Filter Expressions Version 1.0 Working Draft 09</a><br> when consuming from a stream via AMQP 1.0. String prefix and suffix matching is also supported.</p> <p>This feature adds the ability to RabbitMQ to have multiple concurrent clients each consuming only a subset of messages while maintaining message order.<br> It also reduces network traffic between RabbitMQ and clients by only dispatching those messages that the clients are actually interested in.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12415" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12415/hovercard">#12415</a></p> </li> <li> <p>AMQP 1.0 connections that use OAuth 2.0 now can renew their JWT tokens<br> This allows clients to set a new token proactively before the current one <a href="/rabbitmq/rabbitmq-server/blob/v4.1.0-beta.2/docs/oauth2#token-expiration">expires</a>, ensuring uninterrupted connectivity.<br> If a client does not set a new token before the existing one expires, RabbitMQ will automatically close the AMQP 1.0 connection.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12599" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12599/hovercard">#12599</a></p> </li> <li> <p>Support for Multiple Routing Keys in AMQP 1.0 via <code>x-cc</code> Message Annotation.</p> <p>AMQP 1.0 publishers now can set multiple routing keys by using the <code>x-cc</code> message annotation.<br> This annotation allows publishers to specify a <a href="https://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-types-v1.0-os.html#type-list" rel="nofollow">list</a><br> of routing keys (<a href="https://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-types-v1.0-os.html#type-string" rel="nofollow">strings</a>) for more flexible message distribution,<br> similar to the <a href="https://www.rabbitmq.com/docs/sender-selected" rel="nofollow">CC</a> header in AMQP 0.9.1.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12559" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12559/hovercard">#12559</a></p> </li> </ul> <h3>MQTT Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>The default MQTT <a href="https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901086" rel="nofollow">Maximum Packet Size</a> changed from 256 MiB to 16 MiB.</p> <p>This default can be overridden by <a href="https://www.rabbitmq.com/docs/configure#config-file" rel="nofollow">configuring</a> <code>mqtt.max_packet_size_authenticated</code>.<br> Note that this value must not be greater than <code>max_message_size</code> (which also defaults to 16 MiB).</p> </li> </ul> <h3>Prometheus Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>RabbitMQ nodes now provide a Prometheus histogram for message sizes published by applications.</p> <p>This feature allows operators to gain insights into the message sizes being published to RabbitMQ,<br> such as average message size, number of messages per pre-defined bucket (which can both be computed accurately), and percentiles (which will be approximated).<br> Each metric is labelled by protocol (AMQP 1.0, AMQP 0.9.1, MQTT 5.0, MQTT 3.1.1, and MQTT 3.1).</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12342" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12342/hovercard">#12342</a></p> </li> </ul> <h3>Management UI</h3> <h4>Enhancements</h4> <ul> <li> <p>Connection pages now display detailed AMQP 1.0 session and link information:</p> <ol> <li>Link names</li> <li>Link target and source addresses</li> <li>Link flow control state</li> <li>Session flow control state</li> <li>Number of unconfirmed and unacknowledged messages</li> </ol> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12670" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12670/hovercard">#12670</a></p> </li> <li> <p>The management UI now shows if a feature flag has a migration function (in other words, it may take time to be enabled),<br> if it is experimental and whether it is supported or not. To enable an experimental feature flag,<br> a user must to tick checkboxes to confirm they know what they are doing.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12643" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12643/hovercard">#12643</a></p> </li> <li> <p>Feature flags are now enabled using asynchronous requests in the management UI.<br> This means that feature flags that perform data migrations (which can take some time)<br> won't block the browser tab.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12643" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12643/hovercard">#12643</a></p> </li> </ul> <h3>Event Exchange Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>The <code>rabbitmq_event_exchange</code> plugin now can be configured to internally publish AMQP 1.0 instead of AMQP 0.9.1 messages to the <code>amq.rabbitmq.event</code> topic exchange.</p> <p>This allows AMQP 1.0 consumers to receive event properties containing complex types such as <a href="https://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-types-v1.0-os.html#type-list" rel="nofollow">lists</a><br> or <a href="https://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-types-v1.0-os.html#type-map" rel="nofollow">maps</a>, for example queue arguments for the <code>queue.created</code><br> event or client provided properties for the <code>connection.created</code> event.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12714" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12714/hovercard">#12714</a></p> </li> </ul> <h3>Dependency Changes</h3> <p>TBD</p> <h2>Source Code Archives</h2> <p>To obtain source code of the entire distribution, please download the archive named <code>rabbitmq-server-4.1.0.tar.xz</code><br> instead of the source tarball produced by GitHub.</p> rabbitmq-ci tag:github.com,2008:Repository/924551/v4.0.4 2024-12-13T19:00:38Z RabbitMQ 4.0.4 <p>RabbitMQ <code>4.0.4</code> is a maintenance release in the <code>4.0.x</code> <a href="https://www.rabbitmq.com/release-information" rel="nofollow">release series</a>.</p> <p>It was re-tagged (but not rebuilt) to <a href="https://github.com/rabbitmq/rabbitmq-server/commit/bdb30ca0edc7065a5be58decb4714d2488ce7362"><code>bdb30ca</code></a> after its original release on Nov 21, 2024.<br> Packages were not rebuilt, only the tag was incorrect.</p> <p>Starting June 1st, 2024, community support for this series will only be provided to <a href="https://github.com/rabbitmq/rabbitmq-server/blob/main/COMMUNITY_SUPPORT.md">regularly contributing users</a> and those<br> who hold a valid <a href="https://tanzu.vmware.com/rabbitmq/oss" rel="nofollow">commercial support license</a>.</p> <p>It is <strong>strongly recommended</strong> that you read <a href="https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.0.1">4.0 release notes</a><br> in detail if upgrading from a version prior to <code>4.0.0</code>.</p> <h3>Minimum Supported Erlang Version</h3> <p>This release requires Erlang 26 and supports Erlang versions up to <code>27.1.x</code>.<br> <a href="https://www.rabbitmq.com/docs/which-erlang" rel="nofollow">RabbitMQ and Erlang/OTP Compatibility Matrix</a> has more details on<br> 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.0.x/release-notes">rabbitmq-server/release-notes</a>.</p> <h3>Core Broker</h3> <h4>Bug Fixes</h4> <ul> <li> <p>In rare cases quorum queue could end up without an elected leader because<br> chosen candidate replica was not verified for aliveness.</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 issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12727" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12727/hovercard">#12727</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/discussions/10423" data-hovercard-type="discussion" data-hovercard-url="/rabbitmq/rabbitmq-server/discussions/10423/hovercard">#10423</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/discussions/12701" data-hovercard-type="discussion" data-hovercard-url="/rabbitmq/rabbitmq-server/discussions/12701/hovercard">#12701</a></p> </li> <li> <p>Quorum queue follower replicas that have falled behind the leader could<br> run into an exception after installing a snapshot.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/12635" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/12635/hovercard">#12635</a></p> </li> <li> <p>Clusters with a large number of streams could run into confusing timeout<br> exceptions.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12693" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12693/hovercard">#12693</a></p> </li> <li> <p>Stream members could fail to start when their data directories had externally added files,<br> for example, metadata of certain file systems.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/12688" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/12688/hovercard">#12688</a></p> </li> <li> <p>Fetching metrics of AMQP 1.0 connections could fail with an exception.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12700" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12700/hovercard">#12700</a></p> </li> <li> <p>Nodes using Khepri for schema data store now follow a set of <code>rabbitmqctl reset</code> procedures<br> better aligned with those performed by nodes still using Mnesia.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12763" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12763/hovercard">#12763</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>Policy changes are now periodicaly re-applied (only if necessary) to quorum queues.<br> Quorum queues that did not have an online elected leader at the time<br> of policy change would now eventually "pick up" the settings from that policy.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/LoisSotoLopez/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/LoisSotoLopez">@LoisSotoLopez</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12667" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12667/hovercard">#12667</a></p> </li> <li> <p>Clusters with many streams and stream consumers will see a reduced per-stream CPU and network I/O<br> footprint.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12685" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12685/hovercard">#12685</a></p> </li> <li> <p>Clusters now can optionally be tagged with key-value pairs (cluster tags). The tags will<br> be reported by <code>rabbitmq-diagnostics cluster_status</code> and the <code>GET /api/overview</code> HTTP API endpoint.</p> <p>Note that the Prometheus scraper API endpoint intentionally omits them because this kind of<br> metadata in Prometheus is considered to be <a href="https://github.com/rabbitmq/rabbitmq-server/issues/12552#issuecomment-2424985095" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/12552/hovercard">deployment and not application metadata</a>.</p> <p>The tags are configured using <code>rabbitmq.conf</code>:</p> <div class="highlight highlight-source-ini notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="cluster_tags.environment = production cluster_tags.region = us-east cluster_tags.az = us-east-3"><pre><span class="pl-k">cluster_tags.environment</span> = production <span class="pl-k">cluster_tags.region</span> = us-east <span class="pl-k">cluster_tags.az</span> = us-east-3</pre></div> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/SimonUnge/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/SimonUnge">@SimonUnge</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/12552" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/12552/hovercard">#12552</a></p> </li> <li> <p>Nodes now can optionally be tagged with key-value pairs (node tags). The tags will<br> be reported by <code>rabbitmq-diagnostics status</code> and the <code>GET /api/overview</code> HTTP API endpoint.</p> <p>Note that the Prometheus scraper API endpoint intentionally omits them because this kind of<br> metadata in Prometheus is considered to be <a href="https://github.com/rabbitmq/rabbitmq-server/issues/12552#issuecomment-2424985095" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/12552/hovercard">deployment and not application metadata</a>.</p> <p>The tags are configured using <code>rabbitmq.conf</code>:</p> <div class="highlight highlight-source-ini notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="nodes_tags.environment = production nodes_tags.region = us-east nodes_tags.az = us-east-3"><pre><span class="pl-k">nodes_tags.environment</span> = production <span class="pl-k">nodes_tags.region</span> = us-east <span class="pl-k">nodes_tags.az</span> = us-east-3</pre></div> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/SimonUnge/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/SimonUnge">@SimonUnge</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12703" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12703/hovercard">#12703</a></p> </li> <li> <p>When a <a href="https://www.rabbitmq.com/docs/maxlength" rel="nofollow">max length</a> limit is applied to a quorum queue with a larger backlog (e.g. millions of messages),<br> the deletion of excess messages now carries a significantly more moderate spike in memory footprint<br> of the queue.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/12608" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/12608/hovercard">#12608</a></p> </li> </ul> <h3>CLI Tools</h3> <h4>Bug Fixes</h4> <ul> <li> <p><code>rabbitmq-diagnostics check_if_any_deprecated_features_are_used</code> now takes more deprecated features<br> into account.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12734" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12734/hovercard">#12734</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12738" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12738/hovercard">#12738</a></p> </li> </ul> <h3>MQTT Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p>A message with expiration (TTL) set, that was published by an AMQP 0-9-1 publusher,<br> could not be converted for an MQTT consumer.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12711" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12711/hovercard">#12711</a></p> </li> <li> <p>When x.509 (TLS) certificate-based authentication was used, two keys that controlled<br> what SAN (Subject Alternative Name) fields were used to fetch client identity did not<br> have any effect when used in <code>rabbitmq.conf</code>.</p> <p>Partially contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/janezturk/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/janezturk">@janezturk</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12618" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12618/hovercard">#12618</a></p> </li> </ul> <h3>Prometheus Plugin and Grafana Dashboards</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Tweaks for Grafana 11.3 compatibility.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/anhanhnguyen/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/anhanhnguyen">@anhanhnguyen</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12720" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12720/hovercard">#12720</a></p> </li> </ul> <h3>Management Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>The endpoint that creates bindings now uses a much smaller HTTP request body<br> size limit by default. Unlike the definition upload endpoint that accepts<br> large definition documents, bindings do not need the generous multi-MiB limit.</p> <p>Note that the default HTTP request body size limit <a href="https://www.rabbitmq.com/docs/management#http-body-size-limit" rel="nofollow">can be configured</a>,<br> for example, to reduce it across the board.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12697" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12697/hovercard">#12697</a></p> </li> <li> <p>Improved alignment of optional queue arguments on the queue declaration page.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/markus812498/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/markus812498">@markus812498</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12678" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12678/hovercard">#12678</a></p> </li> </ul> <h3>OAuth 2 Plugin</h3> <h4>Bug Fixes</h4> <ul> <li>When configuring <a href="https://www.rabbitmq.com/docs/oauth2#multiple-resource-servers-configuration" rel="nofollow">multiple resource servers</a>,<br> <code>additional_scopes_key</code> was not taken into account, which means some scopes were not considered<br> when making an authorization decision.</li> </ul> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Hathoute/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Hathoute">@Hathoute</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/12750" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/12750/hovercard">#12750</a></p> <h3>Debian Package</h3> <h4>Enhancements</h4> <ul> <li> <p>The package now lists Erlang 27.x as a supported series.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/12603" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/12603/hovercard">#12603</a></p> </li> </ul> <h3>RPM Package</h3> <h4>Enhancements</h4> <ul> <li> <p>The package now lists Erlang 27.x as a supported series.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/12603" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/12603/hovercard">#12603</a></p> </li> </ul> <h3>Dependency Changes</h3> <ul> <li><code>osiris</code> was upgraded to <a href="https://github.com/rabbitmq/osiris/releases"><code>1.8.4</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.0.4.tar.xz</code><br> instead of the source tarball produced by GitHub.</p> rabbitmq-ci tag:github.com,2008:Repository/924551/v4.1.0-beta.1 2024-11-14T20:25:17Z RabbitMQ 4.1.0-beta.1 <p>RabbitMQ <code>4.1.0-beta.1</code> is the first preview of the next feature release.</p> <h2>Highlights</h2> <h3>AMQP 1.0 Filter Expressions</h3> <p>As of <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12415" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12415/hovercard">#12415</a>, RabbitMQ implements <code>properties</code> and <code>application-properties</code> filters of <a href="https://groups.oasis-open.org/higherlogic/ws/public/document?document_id=66227" rel="nofollow">AMQP Filter Expressions Version 1.0 Working Draft 09</a> when consuming from a stream via AMQP 1.0.<br> String prefix and suffix matching is also supported.</p> <p>This feature:</p> <ul> <li>adds the ability to RabbitMQ to have multiple concurrent clients each consuming only a subset of messages while maintaining message order, and</li> <li>reduces network traffic between RabbitMQ and clients by only dispatching those messages that the clients are actually interested in.</li> </ul> <h3>Support for Multiple Routing Keys in AMQP 1.0 via <code>x-cc</code> Message Annotation</h3> <p><a href="https://github.com/rabbitmq/rabbitmq-server/pull/12559" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12559/hovercard">PR #12559</a> enables AMQP 1.0 publishers to set multiple routing keys by using the <code>x-cc</code> message annotation.<br> This annotation allows publishers to specify a <a href="https://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-types-v1.0-os.html#type-list" rel="nofollow">list</a> of routing keys (<a href="https://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-types-v1.0-os.html#type-string" rel="nofollow">strings</a>) for more flexible message distribution, similar to the <a href="https://www.rabbitmq.com/docs/sender-selected" rel="nofollow">CC</a> header in AMQP 0.9.1.</p> <h3>OAuth 2.0 Token Renewal on AMQP 1.0 Connections</h3> <p><a href="https://github.com/rabbitmq/rabbitmq-server/pull/12599" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12599/hovercard">PR #12599</a> introduces support for OAuth 2.0 token renewal on AMQP 1.0 connections.<br> This feature allows clients to set a new token proactively before the current one <a href="/rabbitmq/rabbitmq-server/blob/v4.1.0-beta.1/docs/oauth2#token-expiration">expires</a>, ensuring uninterrupted connectivity.<br> If a client does not set a new token before the existing one expires, RabbitMQ will automatically close the AMQP 1.0 connection.</p> <h3>Metrics for AMQP 1.0 Connections</h3> <p><a href="https://github.com/rabbitmq/rabbitmq-server/pull/12638" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12638/hovercard">PR #12638</a> exposes the following AMQP 1.0 connection metrics in the RabbitMQ Management UI and the <a href="https://www.rabbitmq.com/docs/prometheus#per-object-endpoint" rel="nofollow">/metrics/per-object</a> Prometheus endpoint:</p> <ul> <li>Bytes received and sent</li> <li>Reductions</li> <li>Garbage collections</li> <li>Number of channels/sessions</li> </ul> <p>These metrics have already been emitted for AMQP 0.9.1 connections prior to RabbitMQ 4.1.</p> <h3>AMQP 1.0 Sessions and Links in the Management UI</h3> <p><a href="https://github.com/rabbitmq/rabbitmq-server/pull/12670" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12670/hovercard">PR #12670</a> displays detailed AMQP 1.0 session and link information on the Connection page of the Management UI including:</p> <ul> <li>Link names</li> <li>Link target and source addresses</li> <li>Link flow control state</li> <li>Session flow control state</li> <li>Number of unconfirmed and unacknowledged messages</li> </ul> <h3>Prometheus Histogram for Message Sizes</h3> <p><a href="https://github.com/rabbitmq/rabbitmq-server/pull/12342" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12342/hovercard">PR #12342</a> exposes a Prometheus histogram for message sizes received by RabbitMQ.</p> <p>This feature allows operators to gain insights into the message sizes being published to RabbitMQ, such as average message size, number of messages per pre-defined bucket (which can both be computed accurately), and percentiles (which will be approximated).<br> Each metric is labelled by protocol (AMQP 1.0, AMQP 0.9.1, MQTT 5.0, MQTT 3.1.1, and MQTT 3.1).</p> <h3>Feature flags quality of life improvements</h3> <p>The introduction of required feature flags several minor versions ago showed the poor user experience around them. Therefore, several improvements were made to the subsystem and the management UI to improve the general usage:</p> <ul> <li> <p>Required feature flags have now a soft/hard requirement attribute.</p> <p>Hard required feature flags are the ones already in use: the user has to enable a feature flag before upgrading to a version that requires it, otherwise the node will refuse to start.</p> <p>Soft required feature flags are the new kind: when the user upgrades to a version that requires a feature flag that is not enabled yet, the feature flag will be enabled automatically during startup. To achieve that, some compatibility code is kept with a soft required feature flag, unlike a hard required one. In the future, RabbitMQ will use soft required feature flags as much as possible. This is only a measure to help users that did not follow recommendations. The recommendations is still that feature flags should always be enabled at the best time for the workload.</p> <p>See <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12466" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12466/hovercard">#12466</a>.</p> </li> <li> <p>The management UI now shows if a feature flag has a migration function (in other words, it may take time to be enabled), if it is experimental and whether it is supported or not. To enable an experimental feature flag, a user has to tick checkboxes to confirm they know what they are doing. The feature flags UI has other fixes under the hood; the most important one is that a feature flag that takes time to be enabled will not freeze the browser tab anymore (the HTTP request was synchronous and executed from the browser main thread before). See <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12643" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12643/hovercard">#12643</a>.</p> </li> <li> <p>Required feature flags are hidden from the CLI and the management UI because there is nothing a user can do about them. See <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12447" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12447/hovercard">#12447</a>.</p> </li> <li> <p>Logging was made less verbose. See <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12444" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12444/hovercard">#12444</a>.</p> </li> </ul> <p>See the <a href="https://github.com/orgs/rabbitmq/projects/4/views/1">full GitHub project</a> for the complete list of improvements and fixes.</p> <h2>Potential incompatibilities</h2> <ul> <li>The default MQTT <a href="https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901086" rel="nofollow">Maximum Packet Size</a> changed from 256 MiB to 16 MiB. This default can be overridden by <a href="https://www.rabbitmq.com/docs/configure#config-file" rel="nofollow">configuring</a> <code>mqtt.max_packet_size_authenticated</code>. Note that this value must not be greater than <code>max_message_size</code> (which also defaults to 16 MiB).</li> </ul> rabbitmq-ci tag:github.com,2008:Repository/924551/v4.0.3 2024-10-28T20:54:28Z RabbitMQ 4.0.3 <p>RabbitMQ <code>4.0.3</code> is a maintenance release in the <code>4.0.x</code> <a href="https://www.rabbitmq.com/release-information" rel="nofollow">release series</a>.</p> <p>Starting June 1st, 2024, community support for this series will only be provided to <a href="https://github.com/rabbitmq/rabbitmq-server/blob/main/COMMUNITY_SUPPORT.md">regularly contributing users</a> and those<br> who hold a valid <a href="https://tanzu.vmware.com/rabbitmq/oss" rel="nofollow">commercial support license</a>.</p> <p>It is <strong>strongly recommended</strong> that you read <a href="https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.0.1">4.0 release notes</a><br> in detail if upgrading from a version prior to <code>4.0.0</code>.</p> <h3>Minimum Supported Erlang Version</h3> <p>This release requires Erlang 26 and supports Erlang versions up to <code>26.2.x</code>.<br> <a href="https://www.rabbitmq.com/docs/which-erlang" rel="nofollow">RabbitMQ and Erlang/OTP Compatibility Matrix</a> has more details on<br> 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.0.x/release-notes">rabbitmq-server/release-notes</a>.</p> <h3>Core Broker</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Classic queues could run into an exception.</p> <p>Kudos to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/netrmqdev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/netrmqdev">@netrmqdev</a> for helping the core team reproduce this rare behavior.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/12367" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/12367/hovercard">#12367</a></p> </li> <li> <p><a href="https://www.rabbitmq.com/docs/quorum-queues#replica-reconciliation" rel="nofollow">Continuous membership reconciliation</a> of quorum queues did not propagate a timeout error.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/SimonUnge/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/SimonUnge">@SimonUnge</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12578" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12578/hovercard">#12578</a></p> </li> <li> <p>Quorum queues could truncate the log too aggresively (by one entry too many).</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12358" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12358/hovercard">#12358</a></p> </li> <li> <p>Quorum queues failed to requeue a message with a specific workload where consumers<br> requeued a delivery and then immediately cancelled themselves.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12442" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12442/hovercard">#12442</a></p> </li> <li> <p>When a quorum queue was forced to shrink, it did not stop the replicas on the nodes that were<br> removed from the list of replicas. In many cases this had no visible effects because the node<br> in question is stopped or even removed entirely from the cluster.</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/12475" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12475/hovercard">#12475</a></p> </li> <li> <p>AMQP 1.0 implementation now complies with the Anonymous Terminus extension (section <a href="https://docs.oasis-open.org/amqp/anonterm/v1.0/cs01/anonterm-v1.0-cs01.html#doc-routingerrors" rel="nofollow">2.2.2 Routing Errors</a>).</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12397" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12397/hovercard">#12397</a></p> </li> <li> <p>For AMQP 1.0 clients, correct (compatible, sensible) combinations of the settle mode and a transfer's <code>settled</code> field<br> are now enforced.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12371" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12371/hovercard">#12371</a></p> </li> <li> <p>If an AMQP 1.0 client used a reserved annotation key, the connection was closed<br> with an exception.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12527" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12527/hovercard">#12527</a></p> </li> <li> <p>Messages with arrays in annotations published by AMQP 1.0 publishers and consumed by AMQP 0-9-1 consumers<br> lead to an exception.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12572" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12572/hovercard">#12572</a></p> </li> <li> <p>Quorum queues with a configured <a href="https://www.rabbitmq.com/docs/quorum-queues#poison-message-handling" rel="nofollow">delivery limit</a> could run into an exception.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12405" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12405/hovercard">#12405</a></p> </li> <li> <p>Publisher ID length is now validated to not exceed its internal limit of 255 bytes.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/12499" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/12499/hovercard">#12499</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p>Initial support for Erlang/OTP 27, starting with <a href="https://github.com/erlang/otp/releases/tag/OTP-27.1.2"><code>27.1.2</code></a>.</p> <p>Releases prior to <code>27.1.2</code> are affected<br> by several bugs that can seriously affect RabbitMQ users, in particular those using TLS for client connections.</p> <p>RPM and Debian packages will reflect Erlang 27 support in their metadata starting with a later patch release, <code>4.0.4</code>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12208" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12208/hovercard">#12208</a> (and many others, including on the Erlang/OTP side)</p> </li> <li> <p>Delivery requeue history is now better tracked using <a href="https://www.rabbitmq.com/blog/2024/10/11/modified-outcome" rel="nofollow">AMQP 1.0's Modified Outcome</a> feature.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12506" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12506/hovercard">#12506</a></p> </li> <li> <p>Nodes now avoid logging potentially confusing messages about schema data store operations when<br> querying for traces of any deprecated (or removed) features in the system.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12348" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12348/hovercard">#12348</a></p> </li> </ul> <h3>Prometheus Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p><code>rabbitmq_queue_exchange_messages_published_total</code> included a duplicate <code>vhost</code> label.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/LoisSotoLopez/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/LoisSotoLopez">@LoisSotoLopez</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/12347" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/12347/hovercard">#12347</a></p> </li> </ul> <h3>Management Plugin</h3> <h4>Bug Fixes</h4> <ul> <li> <p><code>GET /api/queues/{vhost}</code> and similar endpoints ran into an exception when a sorting parameter was provided and one of the<br> queues in the result set was a quorum one.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/12374" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/12374/hovercard">#12374</a></p> </li> </ul> <h3>Dependency Changes</h3> <ul> <li>CSV was upgraded to <a href="https://github.com/beatrichartz/csv/blob/main/CHANGELOG.md"><code>3.2.1</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.0.3.tar.xz</code><br> instead of the source tarball produced by GitHub.</p> rabbitmq-ci tag:github.com,2008:Repository/924551/v4.0.2 2024-09-21T05:36:15Z RabbitMQ 4.0.2 <p>RabbitMQ <code>4.0.2</code> is a maintenance release in the <code>4.0.x</code> <a href="https://www.rabbitmq.com/release-information" rel="nofollow">release series</a>.</p> <p>Starting June 1st, 2024, community support for this series will only be provided to <a href="https://github.com/rabbitmq/rabbitmq-server/blob/main/COMMUNITY_SUPPORT.md">regularly contributing users</a> and those<br> who hold a valid <a href="https://tanzu.vmware.com/rabbitmq/oss" rel="nofollow">commercial support license</a>.</p> <p>Please refer to the upgrade section from the <a href="https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.0.1">4.0 release notes</a><br> if upgrading from a version prior to 4.0.</p> <p>This release requires Erlang 26 and supports Erlang versions up to <code>26.2.x</code>.<br> <a href="https://www.rabbitmq.com/docs/which-erlang" rel="nofollow">RabbitMQ and Erlang/OTP Compatibility Matrix</a> has more details on<br> Erlang version requirements for RabbitMQ.</p> <h3>Minimum Supported Erlang Version</h3> <p>As of 4.0, RabbitMQ requires Erlang 26. 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.0.x/release-notes">rabbitmq-server/release-notes</a>.</p> <h3>Generic Binary Package</h3> <h4>Bug Fixes</h4> <ul> <li> <p>Generic binary packages used an incorrect version (<code>4.0.0+2</code> instead of <code>4.0.1</code>) at build time</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/12339" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/12339/hovercard">#12339</a></p> </li> </ul> <h3>Dependency Changes</h3> <p>None in this release.</p> <h2>Source Code Archives</h2> <p>To obtain source code of the entire distribution, please download the archive named <code>rabbitmq-server-4.0.2.tar.xz</code><br> instead of the source tarball produced by GitHub.</p> rabbitmq-ci tag:github.com,2008:Repository/924551/v4.0.1 2024-11-13T02:51:50Z RabbitMQ 4.0.1 <p>RabbitMQ <code>4.0</code> is a new major release.</p> <p>Starting June 1st, 2024, community support for this series will only be provided to <a href="https://github.com/rabbitmq/rabbitmq-server/blob/main/COMMUNITY_SUPPORT.md">regularly contributing users</a><br> and those who hold a valid <a href="https://tanzu.vmware.com/rabbitmq/oss" rel="nofollow">commercial support license</a>.</p> <h2>Highlights</h2> <p>Some key improvements in this release are listed below.</p> <ul> <li><a href="https://www.youtube.com/watch?v=whVqpgvep90" rel="nofollow">Khepri</a>, an <a href="https://github.com/rabbitmq/rabbitmq-server/pull/7206" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/7206/hovercard">alternative schema data store</a> developed to replace Mnesia,<br> has matured and is now fully supported (it previously was an experimental feature)</li> <li><a href="https://www.rabbitmq.com/blog/2024/08/05/native-amqp" rel="nofollow">AMQP 1.0 is now a core protocol</a> that is always enabled. Its plugin is now a no-op that only exists to simplify upgrades.</li> <li>The AMQP 1.0 implementation is now significantly more efficient: its peak throughput is <a href="https://www.rabbitmq.com/blog/2024/08/21/amqp-benchmarks" rel="nofollow">more than double than that of 3.13.x</a><br> on some workloads</li> <li>Efficient sub-linear <a href="https://www.rabbitmq.com/blog/2024/08/28/quorum-queues-in-4.0#faster-recovery-of-long-queues" rel="nofollow">quorum queue recovery on node startup using checkpoints</a></li> <li>Quorum queues now <a href="https://www.rabbitmq.com/blog/2024/08/28/quorum-queues-in-4.0#message-priorities" rel="nofollow">support priorities</a> (but not exactly the same way as classic queues)</li> <li><a href="https://github.com/rabbitmq/rabbitmq-server/pull/10559" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/10559/hovercard">AMQP 1.0 clients now can manage topologies</a> similarly to how AMQP 0-9-1 clients do it</li> <li>The AMQP 1.0 convention (address format) used for interacting with with AMQP 0-9-1 entities <a href="https://www.rabbitmq.com/docs/next/amqp#addresses" rel="nofollow">is now easier to reason about</a></li> <li>Mirroring (replication) of classic queues <a href="https://github.com/rabbitmq/rabbitmq-server/pull/9815" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/9815/hovercard">was removed</a> after several years of deprecation. For replicated messaging data types,<br> use quorum queues and/or streams. Non-replicated classic queues remain and their development continues</li> <li>Classic queue <a href="https://github.com/rabbitmq/rabbitmq-server/pull/11112" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/11112/hovercard">storage efficiency improvements</a>, in particular recovery time and storage of multi-MiB messages</li> <li>Nodes with multiple enabled plugins and little on disk data to recover now <a href="https://github.com/rabbitmq/rabbitmq-server/pull/10989" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/10989/hovercard">start up to 20-30% faster</a></li> <li>New exchange type: <a href="https://rabbitmq.com/docs/next/local-random-exchange" rel="nofollow">Local Random Exchange</a></li> </ul> <p>See Compatibility Notes below to learn about <strong>breaking or potentially breaking changes</strong> in this release.</p> <h2>Breaking Changes and Compatibility Notes</h2> <h3>Classic Queues is Now a Non-Replicated Queue Type</h3> <p>After three years of deprecation, classic queue mirroring was completely removed in this version.<br> <a href="https://www.rabbitmq.com/docs/quorum-queues" rel="nofollow">Quorum queues</a> and <a href="https://www.rabbitmq.com/docs/streams" rel="nofollow">streams</a> are two mature<br> replicated data types offered by RabbitMQ 4.x. Classic queues continue being supported without any breaking changes<br> for client libraries and applications but they are now a non-replicated queue type.</p> <p>After an upgrade to 4.0, all classic queue mirroring-related parts of policies will have no effect.<br> Classic queues will continue to work like before but with only one replica.</p> <p>Clients will be able to connect to any node to publish to and consume from any non-replicated classic queues.<br> Therefore applications will be able to use the same classic queues as before.</p> <p>See <a href="https://www.rabbitmq.com/docs/migrate-mcq-to-qq" rel="nofollow">Mirrored Classic Queues Migration to Quorum Queues</a> for guidance<br> on how to migrate to quorum queues for the parts of the system that really need to use replication.</p> <h3>Quorum Queues Now Have a Default Redelivery Limit</h3> <p>Quorum queues now have a default <a href="https://www.rabbitmq.com/docs/next/quorum-queues#poison-message-handling" rel="nofollow">redelivery limit</a> set to <code>20</code>.<br> Messages that are redelivered 20 times or more will be <a href="https://www.rabbitmq.com/docs/dlx" rel="nofollow">dead-lettered</a> or dropped (removed).</p> <p>This limit is necessary to protect nodes from consumers that run into infinite fail-requeue-fail-requeue loops. Such<br> consumers can drive a node out of disk space by making a quorum queue Raft log grow forever without allowing compaction<br> of older entries to happen.</p> <p>If 20 deliveries per message is a common scenario for a queue, a dead-lettering target or a higher limit must be configured<br> for such queues. The recommended way of doing that is via a <a href="https://www.rabbitmq.com/docs/parameters#policies" rel="nofollow">policy</a>.<br> See the <a href="https://www.rabbitmq.com/docs/next/quorum-queues#poison-message-handling" rel="nofollow">Position Messaging Handling</a> section<br> in the quorum queue documentation guide.</p> <p>Note that increasing the limit is recommended against: usually the presence of messages that have been redelivered 20 times or more suggests<br> that a consumer has entered a fail-requeue-fail-requeue loop, in which case even a much higher limit<br> won't help avoid the dead-lettering.</p> <p>For specific cases where the RabbitMQ configuration cannot be updated to include a dead letter policy<br> the delivery limit can be disabled by setting a delivery limit configuration of <code>-1</code>. However, the RabbitMQ team<br> strongly recommends keeping the delivery limit in place to ensure cluster availability isn't<br> accidentally sacrificed.</p> <h3>AMQP 0.9.1 x-death header</h3> <p>Up to RabbitMQ 3.13, when an AMQP 0.9.1 client (re-)published a message to RabbitMQ, RabbitMQ interpreted the<br> AMQP 0.9.1 <a href="https://www.rabbitmq.com/docs/dlx#effects" rel="nofollow"><code>x-death</code></a> header in the published message's <code>basic_message.content.properties.headers</code> field.</p> <p>RabbitMQ 4.x will not interpret this <code>x-death</code> header anymore when clients (re-)publish a message.<br> Note that RabbitMQ 4.x will continue to set and update the <code>x-death</code> header every time a message is dead-lettered, including when a client <strong>rejects</strong> the message.</p> <p>Applications that rely on RabbitMQ incrementing the <code>count</code> fields within the <code>x-death</code> header array elements for new messages <strong>(re-)published</strong><br> (instead of existing messages being rejected), should introduce and increment <a href="https://github.com/rabbitmq/rabbitmq-server/issues/10709#issuecomment-1997083246" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/10709/hovercard">a separate <code>x-</code> header</a>,<br> with a name that would not be updated by RabbitMQ itself.</p> <h3>CQv1 Storage Implementation was Removed</h3> <p>CQv1, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/10656" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/10656/hovercard">the original classic queue storage layer, was removed</a><br> except for the part that's necessary for upgrades to CQv2 (the 2nd generation).</p> <p>In case <code>rabbitmq.conf</code> explicitly sets <code>classic_queue.default_version</code> to <code>1</code> like so</p> <div class="highlight highlight-source-ini notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="# this configuration value is no longer supported, # remove this line or set the version to 2 classic_queue.default_version = 1"><pre><span class="pl-c"><span class="pl-c">#</span> this configuration value is no longer supported,</span> <span class="pl-c"><span class="pl-c">#</span> remove this line or set the version to 2</span> <span class="pl-k">classic_queue.default_version</span> = 1</pre></div> <p>nodes will now fail to start. Removing the line will make the node start and perform<br> the migration from CQv1 to CQv2.</p> <h3>Settings <code>cluster_formation.randomized_startup_delay_range.*</code> were Removed</h3> <p>The following two deprecated <code>rabbitmq.conf</code> settings were <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12050" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12050/hovercard">removed</a>:</p> <div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="cluster_formation.randomized_startup_delay_range.min cluster_formation.randomized_startup_delay_range.max"><pre class="notranslate"><code>cluster_formation.randomized_startup_delay_range.min cluster_formation.randomized_startup_delay_range.max </code></pre></div> <p>RabbitMQ 4.0 will fail to boot if these settings are configured in <code>rabbitmq.conf</code>.</p> <h3>Several Disk I/O-Related Metrics were Removed</h3> <p>Several I/O-related metrics are dropped, they should be <a href="https://www.rabbitmq.com/docs/monitoring#system-metrics" rel="nofollow">monitored at the infrastructure and kernel layers</a></p> <h3>Default Maximum Message Size Reduced to 16 MiB</h3> <p>Default maximum message size is reduced to 16 MiB (from 128 MiB).</p> <p>The limit can be increased via a <code>rabbitmq.conf</code> setting:</p> <div class="highlight highlight-source-ini notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="# 32 MiB max_message_size = 33554432"><pre><span class="pl-c"><span class="pl-c">#</span> 32 MiB</span> <span class="pl-k">max_message_size</span> = 33554432</pre></div> <p>However, it is recommended that such large multi-MiB messages are put into a blob store, and their<br> IDs are passed around in messages instead of the entire payload.</p> <h3>AMQP 1.0</h3> <p>RabbitMQ 3.13 <code>rabbitmq.conf</code> setting <code>rabbitmq_amqp1_0.default_vhost</code> is unsupported in RabbitMQ 4.0.</p> <p>Instead <code>default_vhost</code> will be used to determine the default vhost an AMQP 1.0 client connects to(i.e. when the AMQP 1.0 client<br> does not define the vhost in the <code>hostname</code> field of the <code>open</code> frame).</p> <p>Starting with RabbitMQ 4.0, RabbitMQ strictly validates that<br> <a href="https://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-messaging-v1.0-os.html#type-delivery-annotations" rel="nofollow">delivery annotations</a>,<br> <a href="https://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-messaging-v1.0-os.html#type-message-annotations" rel="nofollow">message annotations</a>, and<br> <a href="https://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-messaging-v1.0-os.html#type-footer" rel="nofollow">footer</a> contain only<br> <a href="https://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-messaging-v1.0-os.html#type-annotations" rel="nofollow">non-reserved annotation keys</a>.<br> As a result, clients can only send symbolic keys that begin with <code>x-</code>.</p> <h3>MQTT</h3> <p>RabbitMQ 3.13 <a href="https://www.rabbitmq.com/docs/configure#config-file" rel="nofollow">rabbitmq.conf</a> settings <code>mqtt.default_user</code>, <code>mqtt.default_password</code>,<br> and <code>amqp1_0.default_user</code> are unsupported in RabbitMQ 4.0.</p> <p>Instead, set the new RabbitMQ 4.0 settings <code>anonymous_login_user</code> and <code>anonymous_login_pass</code> (both values default to <code>guest</code>).<br> For production scenarios, <a href="https://www.rabbitmq.com/docs/next/production-checklist#anonymous-login" rel="nofollow">disallow anonymous logins</a>.</p> <h3>TLS Client (LDAP, Shovels, Federation) Defaults</h3> <p>Starting with Erlang 26, client side <a href="https://www.rabbitmq.com/docs/ssl#peer-verification" rel="nofollow">TLS peer certificate chain verification</a> settings are enabled by default in most contexts:<br> from federation links to shovels to TLS-enabled LDAP client connections.</p> <p>If using TLS peer certificate chain verification is not practical or necessary, it can be disabled.<br> Please refer to the docs of the feature in question, for example,<br> this one <a href="http://rabbitmq.com/docs/ldap/#tls" rel="nofollow">on TLS-enabled LDAP client</a> connections,<br> two others on <a href="https://www.rabbitmq.com/docs/shovel#tls" rel="nofollow">TLS-enabled dynamic shovels</a> and <a href="https://www.rabbitmq.com/docs/uri-query-parameters" rel="nofollow">dynamic shovel URI query parameters</a>.</p> <h3>Shovels</h3> <p>RabbitMQ Shovels will be able connect to a RabbitMQ 4.0 node via AMQP 1.0 only when the Shovel runs on a RabbitMQ node &gt;= <code>3.13.7</code>.</p> <p>TLS-enabled Shovels will be affected by the TLS client default changes in Erlang 26 (see above).</p> <h2>Erlang/OTP Compatibility Notes</h2> <p>This release <a href="https://www.rabbitmq.com/docs/which-erlang" rel="nofollow">requires Erlang 26.2</a>.</p> <p><a href="https://www.rabbitmq.com/docs/which-erlang#erlang-repositories" rel="nofollow">Provisioning Latest Erlang Releases</a> explains<br> what package repositories and tools can be used to provision latest patch versions of Erlang 26.x.</p> <h2>Release Artifacts</h2> <p>RabbitMQ releases are distributed via <a href="https://github.com/rabbitmq/rabbitmq-server/releases">GitHub</a>.<br> <a href="https://rabbitmq.com/docs/install-debian/" rel="nofollow">Debian</a> and <a href="https://rabbitmq.com/docs/install-rpm/" rel="nofollow">RPM packages</a> are available via<br> repositories maintained by the RabbitMQ Core Team.</p> <p><a href="https://hub.docker.com/_/rabbitmq/" rel="nofollow">Community Docker image</a>, <a href="https://community.chocolatey.org/packages/rabbitmq" rel="nofollow">Chocolatey package</a>, and the <a href="https://www.rabbitmq.com/docs/install-homebrew" rel="nofollow">Homebrew formula</a><br> are other installation options. They are updated with a delay.</p> <h3>Known Issue: Incorrect Version in Generic Binary Builds</h3> <p>Generic binary builds of <code>4.0.1</code> incorrectly report their version as <code>4.0.0+2</code>. This also applies to plugin versions. This was <a href="https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.0.2">addressed in <code>4.0.2</code></a>.</p> <p>Other artifacts (Debian and RPM packages, the Windows installer) are not affected.</p> <h2>Upgrading to 4.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 only supports upgrades from <code>3.13.x</code>.</p> <p>This release requires <strong>all feature flags</strong> in the 3.x series (specifically <code>3.13.x</code>) to be enabled before upgrading,<br> there is no direct upgrade path from 3.12.14 (or a later patch release) straight to a <code>4.0.x</code> version.</p> <p><a href="https://www.rabbitmq.com/docs/blue-green-upgrade" rel="nofollow">Blue/Green Deployment</a>-style upgrades are avaialble for migrations from 3.12.14 to <code>4.0.x</code>.</p> <h3>Required Feature Flags</h3> <p>This release <a href="https://www.rabbitmq.com/docs/feature-flags#graduation" rel="nofollow">graduates</a> all feature flags introduced up to <code>3.13.0</code>.</p> <p>All users must enable all stable [feature flags] before upgrading to 4.0 from<br> the latest available 3.13.x patch release.</p> <h3>Migrating 3.13.x Clusters with Khepri Enabled</h3> <p>Khepri was an experimental feature in the <code>3.13.x</code> series. There is no direct upgrade path for clusters on <code>3.13.x</code> with Khepri enabled to <code>4.0.x</code>,<br> because internal data model used to store various metadata (users, virtual hosts, queues, streams, policies, and so on) has changed dramatically.</p> <p>Such clusters should be <a href="https://www.rabbitmq.com/docs/blue-green-upgrade" rel="nofollow">migrated using the Blue/Green deployment strategy</a>.</p> <h3>Mixed version cluster compatibility</h3> <p>RabbitMQ 4.0.0 nodes can run alongside <code>3.13.x</code> nodes. <code>4.0.x</code>-specific features can only be made available when all nodes in the cluster<br> upgrade to 4.0.0 or a later patch release in the new series.</p> <p>While operating in mixed version mode, some aspects of the system may not behave as expected. The list of known behavior changes will be covered in future updates.<br> Once all nodes are upgraded to 4.0.0, these irregularities will go away.</p> <p>Mixed version clusters are a mechanism that allows rolling upgrade 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> <h4>Configure Dead Lettering or Increase the Limit for Frequently Redelivered Messages</h4> <p>In environments where messages can experience 20 redeliveries, the affected queues should have <a href="https://www.rabbitmq.com/docs/dlx" rel="nofollow">dead lettering</a><br> configured (usually via a <a href="https://www.rabbitmq.com/docs/parameters#policies" rel="nofollow">policy</a>) to make sure<br> that messages that are redelivered 20 times are moved to a separate queue (or stream) instead of<br> being dropped (removed) by the <a href="https://www.rabbitmq.com/docs/next/quorum-queues#poison-message-handling" rel="nofollow">crash-requeue-redelivery loop protection mechanism</a>.</p> <p>Alternatively, the limit can be <a href="https://www.rabbitmq.com/docs/next/quorum-queues#poison-message-handling" rel="nofollow">increased</a> using a policy.<br> This option is recommended against: usually the presence of messages that have been redelivered 20 times or more suggests<br> that a consumer has entered a fail-requeue-fail-requeue loop, in which case even a much higher limit<br> won't help avoid the dead-lettering.</p> <h2>Changes Worth Mentioning</h2> <p>This section is incomplete and will be expanded as 4.0 approaches its release candidate stage.</p> <h3>Core Server</h3> <h4>Enhancements</h4> <ul> <li> <p>Efficient sub-linear quorum queue recovery on node startup using checkpoints.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/10637" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/10637/hovercard">#10637</a></p> </li> <li> <p>Classic queue storage v2 (CQv2) optimizations. For example, CQv2 recovery time on node boot<br> is now twice as fast for some data sets.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/11112" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/11112/hovercard">#11112</a></p> </li> <li> <p>Node startup time improvements. For some environments, nodes with very small on disk data sets<br> now start about 25% quicker.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/10989" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/10989/hovercard">#10989</a></p> </li> <li> <p>Quorum queues now support <a href="https://www.rabbitmq.com/docs/next/quorum-queues#priorities" rel="nofollow">priorities</a>. However,<br> there are difference with how priorities work in classic queues.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/10637" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/10637/hovercard">#10637</a></p> </li> <li> <p>Per-message metadata stored in the quorum queue Raft log now uses less disk space.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/8261" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/8261/hovercard">#8261</a></p> </li> <li> <p>Single Active Consumer (SAC) implementation of quorum queues now <a href="https://www.rabbitmq.com/blog/2024/08/28/quorum-queues-in-4.0#consumer-priorities-combined-with-single-active-consumer" rel="nofollow">respects</a> consumer priorities.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/8261" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/8261/hovercard">#8261</a></p> </li> <li> <p><code>rabbitmq.conf</code> now supports <a href="https://www.rabbitmq.com/docs/next/configure#configuration-encryption" rel="nofollow">encrypted values</a><br> with a prefix:</p> <div class="highlight highlight-source-ini notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="default_user = bunnies-444 default_pass = encrypted:F/bjQkteQENB4rMUXFKdgsJEpYMXYLzBY/AmcYG83Tg8AOUwYP7Oa0Q33ooNEpK9"><pre><span class="pl-k">default_user</span> = bunnies-444 <span class="pl-k">default_pass</span> = encrypted:F/bjQkteQENB4rMUXFKdgsJEpYMXYLzBY/AmcYG83Tg8AOUwYP7Oa0Q33ooNEpK9</pre></div> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/11989" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/11989/hovercard">#11989</a></p> </li> <li> <p>All feature flags up to <code>3.13.0</code> have <a href="https://www.rabbitmq.com/docs/feature-flags#graduation" rel="nofollow">graduated</a> and are now mandatory.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/11659" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/11659/hovercard">#11659</a></p> </li> <li> <p>Quorum queues now use a default <a href="https://www.rabbitmq.com/docs/next/quorum-queues#poison-message-handling" rel="nofollow">redelivery limit</a> of 20.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/11937" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/11937/hovercard">#11937</a></p> </li> <li> <p><code>queue_master_locator</code> queue setting has been deprecated in favor of <code>queue_leader_locator</code> used by quorum queues<br> and streams.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/10702" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/10702/hovercard">#10702</a></p> </li> </ul> <h3>AMQP 1.0</h3> <h4>Bug Fixes</h4> <ul> <li> <p>AMQP 0-9-1 to AMQP 1.0 string data type conversion improvements.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/11715" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/11715/hovercard">#11715</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p><a href="https://www.rabbitmq.com/blog/2024/08/05/native-amqp" rel="nofollow">AMQP 1.0 is now a core protocol</a> that is always enabled.<br> Its plugin is now a no-op that only exists to simplify upgrades.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/9022" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/9022/hovercard">#9022</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/10662" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/10662/hovercard">#10662</a></p> </li> <li> <p>The AMQP 1.0 implementation is now significantly more efficient: its peak throughput is <a href="https://www.rabbitmq.com/blog/2024/08/21/amqp-benchmarks" rel="nofollow">more than double than that of 3.13.x</a><br> on some workloads.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/9022" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/9022/hovercard">#9022</a></p> </li> <li> <p>For AMQP 1.0, <a href="/rabbitmq/rabbitmq-server/blob/v4.0.1">resource alarms</a> only block inbound <code>TRANSFER</code> frames instead of blocking all traffic.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/9022" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/9022/hovercard">#9022</a></p> </li> <li> <p>AMQP 1.0 clients now can manage topologies (queues, exchanges, bindings).</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/10559" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/10559/hovercard">#10559</a></p> </li> <li> <p>AMQP 1.0 implementation now supports a new (v2) address format for referencing queues, exchanges, and so on.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/11604" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/11604/hovercard">#11604</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/11618" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/11618/hovercard">#11618</a></p> </li> <li> <p>AMQP 1.0 implementation now supports consumer priorities.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/11705" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/11705/hovercard">#11705</a></p> </li> <li> <p>Client-provided connection name will now be logged for AMQP 1.0 connections.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/11958" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/11958/hovercard">#11958</a></p> </li> </ul> <h3>Streams</h3> <h4>Enhancements</h4> <ul> <li> <p>Stream filtering is now supported for AMQP 1.0 clients.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/10098" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/10098/hovercard">#10098</a></p> </li> </ul> <h3>Prometheus Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p><a href="https://www.rabbitmq.com/docs/memory-use" rel="nofollow">Detailed memory breakdown</a> metrics are now exposed via the Prometheus scraping endpoint.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/11743" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/11743/hovercard">#11743</a></p> </li> <li> <p>New per-exchange and per-queue metrics.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/LoisSotoLopez/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/LoisSotoLopez">@LoisSotoLopez</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/11559" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/11559/hovercard">#11559</a></p> </li> <li> <p>Shovel and Federation metrics are now available via two new plugins: <code>rabbitmq_shovel_prometheus</code> and <code>rabbitmq_federation_prometheus</code>.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/SimonUnge/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/SimonUnge">@SimonUnge</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/11942" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/11942/hovercard">#11942</a></p> </li> </ul> <h3>Shovel Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>Shovels now can be configured to use pre-declared topologies. This is primarily useful in environments where<br> schema definition comes from <a href="https://www.rabbitmq.com/docs/definitions" rel="nofollow">definitions</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/10501" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/10501/hovercard">#10501</a></p> </li> </ul> <h3>Local Random Exchange Plugin</h3> <p>This is an initial release that includes <a href="https://www.rabbitmq.com/docs/next/local-random-exchange" rel="nofollow">Local Random Exchange</a>.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/8334" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/8334/hovercard">#8334</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/10091" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/10091/hovercard">#10091</a>.</p> <h3>STOMP Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>STOMP now supports consumer priorities.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/11947" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/11947/hovercard">#11947</a></p> </li> </ul> <h3>Dependency Changes</h3> <ul> <li>Ra was <a href="https://github.com/rabbitmq/ra/releases">upgraded to <code>2.14.0</code></a></li> <li>Khepri was <a href="https://github.com/rabbitmq/khepri/releases">upgraded to <code>0.16.0</code></a></li> <li>Cuttlefish was <a href="https://github.com/Kyorai/cuttlefish/releases">upgraded to <code>3.4.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.0.1.tar.xz</code><br> instead of the source tarball produced by GitHub.</p> rabbitmq-ci tag:github.com,2008:Repository/924551/v4.0.0 2024-09-18T15:15:09Z v4.0.0 <p>Release 4.0.0</p> unknown tag:github.com,2008:Repository/924551/v4.0.0-rc.2 2024-09-17T07:15:25Z RabbitMQ 4.0.0-rc.2 <p>RabbitMQ <code>4.0.0-rc.2</code> is a candidate of a new major release.</p> <p>Starting June 1st, 2024, community support for this series will only be provided to <a href="https://github.com/rabbitmq/rabbitmq-server/blob/main/COMMUNITY_SUPPORT.md">regularly contributing users</a><br> and those who hold a valid <a href="https://tanzu.vmware.com/rabbitmq/oss" rel="nofollow">commercial support license</a>.</p> <h2>Highlights</h2> <p>Some key improvements in this release are listed below.</p> <ul> <li><a href="https://www.youtube.com/watch?v=whVqpgvep90" rel="nofollow">Khepri</a>, an <a href="https://github.com/rabbitmq/rabbitmq-server/pull/7206" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/7206/hovercard">alternative schema data store</a> developed to replace Mnesia,<br> has matured and is now fully supported (it previously was an experimental feature)</li> <li><a href="https://www.rabbitmq.com/blog/2024/08/05/native-amqp" rel="nofollow">AMQP 1.0 is now a core protocol</a> that is always enabled. Its plugin is now a no-op that only exists to simplify upgrades.</li> <li>The AMQP 1.0 implementation is now significantly more efficient: its peak throughput is <a href="https://www.rabbitmq.com/blog/2024/08/21/amqp-benchmarks" rel="nofollow">more than double than that of 3.13.x</a><br> on some workloads</li> <li>Efficient sub-linear <a href="https://www.rabbitmq.com/blog/2024/08/28/quorum-queues-in-4.0#faster-recovery-of-long-queues" rel="nofollow">quorum queue recovery on node startup using checkpoints</a></li> <li>Quorum queues now <a href="https://www.rabbitmq.com/blog/2024/08/28/quorum-queues-in-4.0#message-priorities" rel="nofollow">support priorities</a> (but not exactly the same way as classic queues)</li> <li><a href="https://github.com/rabbitmq/rabbitmq-server/pull/10559" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/10559/hovercard">AMQP 1.0 clients now can manage topologies</a> similarly to how AMQP 0-9-1 clients do it</li> <li>The AMQP 1.0 convention (address format) used for interacting with with AMQP 0-9-1 entities <a href="https://www.rabbitmq.com/docs/next/amqp#addresses" rel="nofollow">is now easier to reason about</a></li> <li>Mirroring (replication) of classic queues <a href="https://github.com/rabbitmq/rabbitmq-server/pull/9815" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/9815/hovercard">was removed</a> after several years of deprecation. For replicated messaging data types,<br> use quorum queues and/or streams. Non-replicated classic queues remain and their development continues</li> <li>Classic queue <a href="https://github.com/rabbitmq/rabbitmq-server/pull/11112" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/11112/hovercard">storage efficiency improvements</a>, in particular recovery time and storage of multi-MiB messages</li> <li>Nodes with multiple enabled plugins and little on disk data to recover now <a href="https://github.com/rabbitmq/rabbitmq-server/pull/10989" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/10989/hovercard">start up to 20-30% faster</a></li> <li>New exchange type: <a href="https://rabbitmq.com/docs/next/local-random-exchange" rel="nofollow">Local Random Exchange</a></li> </ul> <p>See Compatibility Notes below to learn about <strong>breaking or potentially breaking changes</strong> in this release.</p> <h2>Breaking Changes and Compatibility Notes</h2> <h3>Classic Queues is Now a Non-Replicated Queue Type</h3> <p>After three years of deprecated, classic queue mirroring was completely removed in this version.<br> <a href="https://www.rabbitmq.com/docs/quorum-queues" rel="nofollow">Quorum queues</a> and <a href="https://www.rabbitmq.com/docs/streams" rel="nofollow">streams</a> are two mature<br> replicated data types offered by RabbitMQ 4.x. Classic queues continue being supported without any breaking changes<br> for client libraries and applications but they are now a non-replicated queue type.</p> <p>After an upgrade to 4.0, all classic queue mirroring-related parts of policies will have no effect.<br> Classic queues will continue to work like before but with only one replica.</p> <p>Clients will be able to connect to any node to publish to and consume from any non-replicated classic queues.<br> Therefore applications will be able to use the same classic queues as before.</p> <p>See <a href="https://www.rabbitmq.com/docs/migrate-mcq-to-qq" rel="nofollow">Mirrored Classic Queues Migration to Quorum Queues</a> for guidance<br> on how to migrate to quorum queues for the parts of the system that really need to use replication.</p> <h3>Quorum Queues Now Have a Default Redelivery Limit</h3> <p>Quorum queues now have a default <a href="https://www.rabbitmq.com/docs/next/quorum-queues#poison-message-handling" rel="nofollow">redelivery limit</a> set to <code>20</code>.<br> Messages that are redelivered 20 times or more will be <a href="https://www.rabbitmq.com/docs/dlx" rel="nofollow">dead-lettered</a> or dropped (removed).</p> <p>This limit is necessary to protect nodes from consumers that run into infinite fail-requeue-fail-requeue loops. Such<br> consumers can drive a node out of disk space by making a quorum queue Raft log grow forever without allowing compaction<br> of older entries to happen.</p> <p>If 20 deliveries per message is a common scenario for a queue, a dead-lettering target or a higher limit must be configured<br> for such queues. The recommended way of doing that is via a <a href="https://www.rabbitmq.com/docs/parameters#policies" rel="nofollow">policy</a>.<br> See the <a href="https://www.rabbitmq.com/docs/next/quorum-queues#poison-message-handling" rel="nofollow">Position Messaging Handling</a> section<br> in the quorum queue documentation guide.</p> <p>Note that increasing the limit is recommended against: usually the presence of messages that have been redelivered 20 times or more suggests<br> that a consumer has entered a fail-requeue-fail-requeue loop, in which case even a much higher limit<br> won't help avoid the dead-lettering.</p> <p>For specific cases where the RabbitMQ configuration cannot be updated to include a dead letter policy<br> the delivery limit can be disabled by setting a delivery limit configuration of <code>-1</code>. However, the RabbitMQ team<br> strongly recommends keeping the delivery limit in place to ensure cluster availability isn't<br> accidentally sacrificed.</p> <h3>CQv1 Storage Implementation was Removed</h3> <p>CQv1, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/10656" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/10656/hovercard">the original classic queue storage layer, was removed</a><br> except for the part that's necessary for upgrades to CQv2 (the 2nd generation).</p> <p>In case <code>rabbitmq.conf</code> explicitly sets <code>classic_queue.default_version</code> to <code>1</code> like so</p> <div class="highlight highlight-source-ini notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="# this configuration value is no longer supported, # remove this line or set the version to 2 classic_queue.default_version = 1"><pre><span class="pl-c"><span class="pl-c">#</span> this configuration value is no longer supported,</span> <span class="pl-c"><span class="pl-c">#</span> remove this line or set the version to 2</span> <span class="pl-k">classic_queue.default_version</span> = 1</pre></div> <p>nodes will now fail to start. Removing the line will make the node start and perform<br> the migration from CQv1 to CQv2.</p> <h3>Settings <code>cluster_formation.randomized_startup_delay_range.*</code> were Removed</h3> <p>The following two deprecated <code>rabbitmq.conf</code> settings were <a href="https://github.com/rabbitmq/rabbitmq-server/pull/12050" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/12050/hovercard">removed</a>:</p> <div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="cluster_formation.randomized_startup_delay_range.min cluster_formation.randomized_startup_delay_range.max"><pre class="notranslate"><code>cluster_formation.randomized_startup_delay_range.min cluster_formation.randomized_startup_delay_range.max </code></pre></div> <p>RabbitMQ 4.0 will fail to boot if these settings are configured in <code>rabbitmq.conf</code>.</p> <h3>Several Disk I/O-Related Metrics were Removed</h3> <p>Several I/O-related metrics are dropped, they should be <a href="https://www.rabbitmq.com/docs/monitoring#system-metrics" rel="nofollow">monitored at the infrastructure and kernel layers</a></p> <h3>Default Maximum Message Size Reduced to 16 MiB</h3> <p>Default maximum message size is reduced to 16 MiB (from 128 MiB).</p> <p>The limit can be increased via a <code>rabbitmq.conf</code> setting:</p> <div class="highlight highlight-source-ini notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="# 32 MiB max_message_size = 33554432"><pre><span class="pl-c"><span class="pl-c">#</span> 32 MiB</span> <span class="pl-k">max_message_size</span> = 33554432</pre></div> <p>However, it is recommended that such large multi-MiB messages are put into a blob store, and their<br> IDs are passed around in messages instead of the entire payload.</p> <h3>AMQP 1.0</h3> <p>RabbitMQ 3.13 <code>rabbitmq.conf</code> setting <code>rabbitmq_amqp1_0.default_vhost</code> is unsupported in RabbitMQ 4.0.</p> <p>Instead <code>default_vhost</code> will be used to determine the default vhost an AMQP 1.0 client connects to(i.e. when the AMQP 1.0 client<br> does not define the vhost in the <code>hostname</code> field of the <code>open</code> frame).</p> <h3>MQTT</h3> <p>RabbitMQ 3.13 <a href="https://www.rabbitmq.com/docs/configure#config-file" rel="nofollow">rabbitmq.conf</a> settings <code>mqtt.default_user</code>, <code>mqtt.default_password</code>,<br> and <code>amqp1_0.default_user</code> are unsupported in RabbitMQ 4.0.</p> <p>Instead, set the new RabbitMQ 4.0 settings <code>anonymous_login_user</code> and <code>anonymous_login_pass</code> (both values default to <code>guest</code>).<br> For production scenarios, <a href="https://www.rabbitmq.com/docs/next/production-checklist#anonymous-login" rel="nofollow">disallow anonymous logins</a>.</p> <h3>TLS Client (LDAP, Shovels, Federation) Defaults</h3> <p>Starting with Erlang 26, client side <a href="https://www.rabbitmq.com/docs/ssl#peer-verification" rel="nofollow">TLS peer certificate chain verification</a> settings are enabled by default in most contexts:<br> from federation links to shovels to TLS-enabled LDAP client connections.</p> <p>If using TLS peer certificate chain verification is not practical or necessary, it can be disabled.<br> Please refer to the docs of the feature in question, for example,<br> this one <a href="http://rabbitmq.com/docs/ldap/#tls" rel="nofollow">on TLS-enabled LDAP client</a> connections,<br> two others on <a href="https://www.rabbitmq.com/docs/shovel#tls" rel="nofollow">TLS-enabled dynamic shovels</a> and <a href="https://www.rabbitmq.com/docs/uri-query-parameters" rel="nofollow">dynamic shovel URI query parameters</a>.</p> <h3>Shovels</h3> <p>RabbitMQ Shovels will be able connect to a RabbitMQ 4.0 node via AMQP 1.0 only when the Shovel runs on a RabbitMQ node &gt;= <code>3.13.7</code>.</p> <p>TLS-enabled Shovels will be affected by the TLS client default changes in Erlang 26 (see above).</p> <h2>Erlang/OTP Compatibility Notes</h2> <p>This release <a href="https://www.rabbitmq.com/docs/which-erlang" rel="nofollow">requires Erlang 26.2</a>.</p> <p><a href="https://www.rabbitmq.com/docs/which-erlang#erlang-repositories" rel="nofollow">Provisioning Latest Erlang Releases</a> explains<br> what package repositories and tools can be used to provision latest patch versions of Erlang 26.x.</p> <h2>Release Artifacts</h2> <p>RabbitMQ releases are distributed via <a href="https://github.com/rabbitmq/rabbitmq-server/releases">GitHub</a>.<br> <a href="https://rabbitmq.com/docs/install-debian/" rel="nofollow">Debian</a> and <a href="https://rabbitmq.com/docs/install-rpm/" rel="nofollow">RPM packages</a> are available via<br> repositories maintained by the RabbitMQ Core Team.</p> <p><a href="https://hub.docker.com/_/rabbitmq/" rel="nofollow">Community Docker image</a>, <a href="https://community.chocolatey.org/packages/rabbitmq" rel="nofollow">Chocolatey package</a>, and the <a href="https://www.rabbitmq.com/docs/install-homebrew" rel="nofollow">Homebrew formula</a><br> are other installation options. They are updated with a delay.</p> <h2>Upgrading to 4.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 only supports upgrades from <code>3.13.x</code>.</p> <p>This release requires <strong>all feature flags</strong> in the 3.x series (specifically <code>3.13.x</code>) to be enabled before upgrading,<br> there is no upgrade path from 3.12.14 (or a later patch release) straight to <code>4.0.0</code>.</p> <h3>Required Feature Flags</h3> <p>This release <a href="https://www.rabbitmq.com/docs/feature-flags#graduation" rel="nofollow">graduates</a> all feature flags introduced up to <code>3.13.0</code>.</p> <p>All users must enable all stable [feature flags] before upgrading to 4.0 from<br> the latest available 3.13.x patch release.</p> <h3>Mixed version cluster compatibility</h3> <p>RabbitMQ 4.0.0 nodes can run alongside <code>3.13.x</code> nodes. <code>4.0.x</code>-specific features can only be made available when all nodes in the cluster<br> upgrade to 4.0.0 or a later patch release in the new series.</p> <p>While operating in mixed version mode, some aspects of the system may not behave as expected. The list of known behavior changes will be covered in future updates.<br> Once all nodes are upgraded to 4.0.0, these irregularities will go away.</p> <p>Mixed version clusters are a mechanism that allows rolling upgrade 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> <h4>Configure Dead Lettering or Increase the Limit for Frequently Redelivered Messages</h4> <p>In environments where messages can experience 20 redeliveries, the affected queues should have <a href="https://www.rabbitmq.com/docs/dlx" rel="nofollow">dead lettering</a><br> configured (usually via a <a href="https://www.rabbitmq.com/docs/parameters#policies" rel="nofollow">policy</a>) to make sure<br> that messages that are redelivered 20 times are moved to a separate queue (or stream) instead of<br> being dropped (removed) by the <a href="https://www.rabbitmq.com/docs/next/quorum-queues#poison-message-handling" rel="nofollow">crash-requeue-redelivery loop protection mechanism</a>.</p> <p>Alternatively, the limit can be <a href="https://www.rabbitmq.com/docs/next/quorum-queues#poison-message-handling" rel="nofollow">increased</a> using a policy.<br> This option is recommended against: usually the presence of messages that have been redelivered 20 times or more suggests<br> that a consumer has entered a fail-requeue-fail-requeue loop, in which case even a much higher limit<br> won't help avoid the dead-lettering.</p> <h2>Changes Worth Mentioning</h2> <p>This section is incomplete and will be expanded as 4.0 approaches its release candidate stage.</p> <h3>Core Server</h3> <h4>Enhancements</h4> <ul> <li> <p>Efficient sub-linear quorum queue recovery on node startup using checkpoints.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/10637" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/10637/hovercard">#10637</a></p> </li> <li> <p>Classic queue storage v2 (CQv2) optimizations. For example, CQv2 recovery time on node boot<br> is now twice as fast for some data sets.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/11112" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/11112/hovercard">#11112</a></p> </li> <li> <p>Node startup time improvements. For some environments, nodes with very small on disk data sets<br> now start about 25% quicker.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/10989" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/10989/hovercard">#10989</a></p> </li> <li> <p>Quorum queues now support <a href="https://www.rabbitmq.com/docs/next/quorum-queues#priorities" rel="nofollow">priorities</a>. However,<br> there are difference with how priorities work in classic queues.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/10637" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/10637/hovercard">#10637</a></p> </li> <li> <p>Per-message metadata stored in the quorum queue Raft log now uses less disk space.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/8261" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/8261/hovercard">#8261</a></p> </li> <li> <p>Single Active Consumer (SAC) implementation of quorum queues now <a href="https://www.rabbitmq.com/blog/2024/08/28/quorum-queues-in-4.0#consumer-priorities-combined-with-single-active-consumer" rel="nofollow">respects</a> consumer priorities.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/8261" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/8261/hovercard">#8261</a></p> </li> <li> <p><code>rabbitmq.conf</code> now supports <a href="https://www.rabbitmq.com/docs/next/configure#configuration-encryption" rel="nofollow">encrypted values</a><br> with a prefix:</p> <div class="highlight highlight-source-ini notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="default_user = bunnies-444 default_pass = encrypted:F/bjQkteQENB4rMUXFKdgsJEpYMXYLzBY/AmcYG83Tg8AOUwYP7Oa0Q33ooNEpK9"><pre><span class="pl-k">default_user</span> = bunnies-444 <span class="pl-k">default_pass</span> = encrypted:F/bjQkteQENB4rMUXFKdgsJEpYMXYLzBY/AmcYG83Tg8AOUwYP7Oa0Q33ooNEpK9</pre></div> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/11989" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/11989/hovercard">#11989</a></p> </li> <li> <p>All feature flags up to <code>3.13.0</code> have <a href="https://www.rabbitmq.com/docs/feature-flags#graduation" rel="nofollow">graduated</a> and are now mandatory.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/11659" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/11659/hovercard">#11659</a></p> </li> <li> <p>Quorum queues now use a default <a href="https://www.rabbitmq.com/docs/next/quorum-queues#poison-message-handling" rel="nofollow">redelivery limit</a> of 20.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/11937" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/11937/hovercard">#11937</a></p> </li> <li> <p><code>queue_master_locator</code> queue setting has been deprecated in favor of <code>queue_leader_locator</code> used by quorum queues<br> and streams.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/10702" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/10702/hovercard">#10702</a></p> </li> </ul> <h3>AMQP 1.0</h3> <h4>Bug Fixes</h4> <ul> <li> <p>AMQP 0-9-1 to AMQP 1.0 string data type conversion improvements.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/11715" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/11715/hovercard">#11715</a></p> </li> </ul> <h4>Enhancements</h4> <ul> <li> <p><a href="https://www.rabbitmq.com/blog/2024/08/05/native-amqp" rel="nofollow">AMQP 1.0 is now a core protocol</a> that is always enabled.<br> Its plugin is now a no-op that only exists to simplify upgrades.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/9022" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/9022/hovercard">#9022</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/10662" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/10662/hovercard">#10662</a></p> </li> <li> <p>The AMQP 1.0 implementation is now significantly more efficient: its peak throughput is <a href="https://www.rabbitmq.com/blog/2024/08/21/amqp-benchmarks" rel="nofollow">more than double than that of 3.13.x</a><br> on some workloads.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/9022" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/9022/hovercard">#9022</a></p> </li> <li> <p>For AMQP 1.0, <a href="/rabbitmq/rabbitmq-server/blob/v4.0.0-rc.2">resource alarms</a> only block inbound <code>TRANSFER</code> frames instead of blocking all traffic.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/9022" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/9022/hovercard">#9022</a></p> </li> <li> <p>AMQP 1.0 clients now can manage topologies (queues, exchanges, bindings).</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/10559" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/10559/hovercard">#10559</a></p> </li> <li> <p>AMQP 1.0 implementation now supports a new (v2) address format for referencing queues, exchanges, and so on.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/11604" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/11604/hovercard">#11604</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/11618" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/11618/hovercard">#11618</a></p> </li> <li> <p>AMQP 1.0 implementation now supports consumer priorities.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/11705" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/11705/hovercard">#11705</a></p> </li> <li> <p>Client-provided connection name will now be logged for AMQP 1.0 connections.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/11958" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/11958/hovercard">#11958</a></p> </li> </ul> <h3>Streams</h3> <h4>Enhancements</h4> <ul> <li> <p>Stream filtering is now supported for AMQP 1.0 clients.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/10098" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/10098/hovercard">#10098</a></p> </li> </ul> <h3>Prometheus Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p><a href="https://www.rabbitmq.com/docs/memory-use" rel="nofollow">Detailed memory breakdown</a> metrics are now exposed via the Prometheus scraping endpoint.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/11743" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/11743/hovercard">#11743</a></p> </li> <li> <p>New per-exchange and per-queue metrics.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/LoisSotoLopez/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/LoisSotoLopez">@LoisSotoLopez</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/11559" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/11559/hovercard">#11559</a></p> </li> <li> <p>Shovel and Federation metrics are now available via two new plugins: <code>rabbitmq_shovel_prometheus</code> and <code>rabbitmq_federation_prometheus</code>.</p> <p>Contributed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/SimonUnge/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/SimonUnge">@SimonUnge</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/11942" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/11942/hovercard">#11942</a></p> </li> </ul> <h3>Shovel Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>Shovels now can be configured to use pre-declared topologies. This is primarily useful in environments where<br> schema definition comes from <a href="https://www.rabbitmq.com/docs/definitions" rel="nofollow">definitions</a>.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/issues/10501" data-hovercard-type="issue" data-hovercard-url="/rabbitmq/rabbitmq-server/issues/10501/hovercard">#10501</a></p> </li> </ul> <h3>Local Random Exchange Plugin</h3> <p>This is an initial release that includes <a href="https://www.rabbitmq.com/docs/next/local-random-exchange" rel="nofollow">Local Random Exchange</a>.</p> <p>GitHub issues: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/8334" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/8334/hovercard">#8334</a>, <a href="https://github.com/rabbitmq/rabbitmq-server/pull/10091" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/10091/hovercard">#10091</a>.</p> <h3>STOMP Plugin</h3> <h4>Enhancements</h4> <ul> <li> <p>STOMP now supports consumer priorities.</p> <p>GitHub issue: <a href="https://github.com/rabbitmq/rabbitmq-server/pull/11947" data-hovercard-type="pull_request" data-hovercard-url="/rabbitmq/rabbitmq-server/pull/11947/hovercard">#11947</a></p> </li> </ul> <h3>Dependency Changes</h3> <ul> <li>Ra was <a href="https://github.com/rabbitmq/ra/releases">upgraded to <code>2.14.0</code></a></li> <li>Khepri was <a href="https://github.com/rabbitmq/khepri/releases">upgraded to <code>0.16.0</code></a></li> <li>Cuttlefish was <a href="https://github.com/Kyorai/cuttlefish/releases">upgraded to <code>3.4.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.0.0-rc.2.tar.xz</code><br> instead of the source tarball produced by GitHub.</p> rabbitmq-ci