192 lines
7.0 KiB
Markdown
192 lines
7.0 KiB
Markdown
## RabbitMQ 4.0.8
|
|
|
|
RabbitMQ `4.0.8` is a maintenance release in the `4.0.x` [release series](https://www.rabbitmq.com/release-information).
|
|
|
|
Starting June 1st, 2024, community support for this series will only be provided to [regularly contributing users](https://github.com/rabbitmq/rabbitmq-server/blob/main/COMMUNITY_SUPPORT.md) and those
|
|
who hold a valid [commercial support license](https://tanzu.vmware.com/rabbitmq/oss).
|
|
|
|
It is **strongly recommended** that you read [4.0 release notes](https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.0.1)
|
|
in detail if upgrading from a version prior to `4.0.0`.
|
|
|
|
|
|
### Minimum Supported Erlang Version
|
|
|
|
This release requires Erlang 26 and supports Erlang versions up to `27.3.x`.
|
|
[RabbitMQ and Erlang/OTP Compatibility Matrix](https://www.rabbitmq.com/docs/which-erlang) has more details on
|
|
Erlang version requirements for RabbitMQ.
|
|
|
|
Nodes **will fail to start** on older Erlang releases.
|
|
|
|
|
|
## Changes Worth Mentioning
|
|
|
|
Release notes can be found on GitHub at [rabbitmq-server/release-notes](https://github.com/rabbitmq/rabbitmq-server/tree/v4.0.x/release-notes).
|
|
|
|
### Core Broker
|
|
|
|
#### Bug Fixes
|
|
|
|
* Fixes a number of rare replication safety issues for quorum queues and Khepri.
|
|
|
|
GitHub issue: [#13530](https://github.com/rabbitmq/rabbitmq-server/pull/13530)
|
|
|
|
* Peer discovery retry limit supports the value of `infinity`
|
|
but the `cluster_formation.discovery_retry_limit` key in `rabbitmq.conf` only accepted positive integers.
|
|
|
|
Contributed by @SimonUnge.
|
|
|
|
GitHub issue: [#13676](https://github.com/rabbitmq/rabbitmq-server/pull/13676)
|
|
|
|
#### Enhancements
|
|
|
|
* Quorum queue checkpoint algorithm was tweaked to take checkpoints more frequently, thus
|
|
clearing older segment files more aggressively.
|
|
|
|
Workloads that use larger messages should continue following [the documented recommendations](https://www.rabbitmq.com/docs/quorum-queues#performance-tuning-large-messages) to
|
|
avoid large disk space footprint of segment files.
|
|
|
|
GitHub issue: [#13622](https://github.com/rabbitmq/rabbitmq-server/pull/13622)
|
|
|
|
* Previously a node that was a cluster member but then was [reset](https://www.rabbitmq.com/docs/clustering#restarting-with-hostname-changes) could not
|
|
rejoin the cluster if the [schema data store](https://www.rabbitmq.com/docs/metadata-store) was Mnesia.
|
|
|
|
Now the reset node will try to leave the cluster and retry rejoining again.
|
|
This was already the case for Khepri.
|
|
|
|
Contributed by @SimonUnge.
|
|
|
|
GitHub issue: [#13669](https://github.com/rabbitmq/rabbitmq-server/pull/13669)
|
|
|
|
|
|
### CLI Tools
|
|
|
|
#### Enhancements
|
|
|
|
* [`rabbitmqadmin`](https://www.rabbitmq.com/docs/management-cli) 2.0.0 GA is now available as a standalone binary.
|
|
|
|
Learn more: [`rabbitmq/rabbitmqadmin-ng`](https://github.com/rabbitmq/rabbitmqadmin-ng)
|
|
|
|
* New health check commands help detect quorum queues without an elected leader.
|
|
|
|
```shell
|
|
# Verifies that all quorum queues in virtual host "vh-1" match the naming pattern "^naming-pattern"
|
|
# have an elected leader
|
|
rabbitmq-diagnostics check_for_quorum_queues_without_an_elected_leader --vhost "vh-1" "^naming-pattern"
|
|
|
|
# Verifies that all quorum queues in the cluster have an elected leader. This can be an expensive
|
|
# operation if there are many quorum queues in the cluster, consider providing a more specific pattern
|
|
rabbitmq-diagnostics check_for_quorum_queues_without_an_elected_leader --across-all-vhosts ".*"
|
|
```
|
|
|
|
Contributed by @Ayanda-D.
|
|
|
|
GitHub issue: [#13489](https://github.com/rabbitmq/rabbitmq-server/pull/13489/)
|
|
|
|
|
|
### Stream Plugin
|
|
|
|
#### Bug Fixes
|
|
|
|
* When a connection of one or more consumers in a [Single Active Consumer](https://www.rabbitmq.com/docs/streams#single-active-consumer) group failed,
|
|
the group could try to activate (promote) one of the consumers are are no longer online. In practical terms
|
|
this means that other consumers were not getting any deliveries.
|
|
|
|
GitHub issue: [#13660](https://github.com/rabbitmq/rabbitmq-server/pull/13660)
|
|
|
|
* TCP load balancer health checks (TCP connections that do not proceed to complete the RabbitMQ Stream Protocol handshake)
|
|
previously resulted in an exception in the log.
|
|
|
|
GitHub issue: [#13678](https://github.com/rabbitmq/rabbitmq-server/pull/13678)
|
|
|
|
#### Enhancements
|
|
|
|
* Stream replication connections now can be configured to use IPv6 using `advanced.config`:
|
|
|
|
```erl
|
|
[
|
|
{osiris, [
|
|
{replica_ip_address_family, inet6}
|
|
]}
|
|
].
|
|
```
|
|
|
|
|
|
### Management Plugin
|
|
|
|
#### Bug Fixes
|
|
|
|
* If HTTP API was configured to use a custom prefix, OAuth 2-based authentication would fail
|
|
because one of the cookies used by the workflow was using an absolute path.
|
|
|
|
GitHub issue: [#13668](https://github.com/rabbitmq/rabbitmq-server/pull/13668)
|
|
|
|
* Several endpoints could produce an exception when the requested resource (queue or exchange) did not exist.
|
|
|
|
GitHub issue: [#13619](https://github.com/rabbitmq/rabbitmq-server/pull/13619)
|
|
|
|
* When [OAuth 2 was enabled](https://www.rabbitmq.com/docs/oauth2) with an IDP-initiated login,
|
|
the UI displayed a confusing warning.
|
|
|
|
GitHub issue: [#13507](https://github.com/rabbitmq/rabbitmq-server/pull/13507)
|
|
|
|
#### Enhancements
|
|
|
|
* Historically, HTTP API access was controlled by exactly the same [authentication and authorization backend chain]()
|
|
that were configured for the messaging protocol connections.
|
|
|
|
Now it is possible to use a separate chain, that is, a separate set of backends, specifically for the HTTP API access:
|
|
|
|
```ini
|
|
# Messaging protocol access
|
|
auth_backends.1 = ldap
|
|
auth_backends.2 = internal
|
|
|
|
# HTTP API access
|
|
http_dispatch.auth_backends.1 = http
|
|
```
|
|
|
|
Contributed by @aaron-seo.
|
|
|
|
GitHub issue: [#13467](https://github.com/rabbitmq/rabbitmq-server/pull/13467)
|
|
|
|
* A new `rabbitmq.conf` setting, `management.delegate_count`, controls the size of the pool of processes
|
|
that aggregate data to respond to HTTP API client requests.
|
|
|
|
The default value is `5`. Nodes that have access to a double digit numbers of CPU cores (say, 32)
|
|
could benefit from using a higher number, e.g. `10` or `16`.
|
|
|
|
Contributed by @Ayanda-D.
|
|
|
|
GitHub issue: [#13462](https://github.com/rabbitmq/rabbitmq-server/pull/13462)
|
|
|
|
|
|
### Shovel Plugin
|
|
|
|
#### Bug Fixes
|
|
|
|
* AMQP 1.0 shovels could stop consuming after `2^16 - 1` messages.
|
|
|
|
GitHub issue: [#13578](https://github.com/rabbitmq/rabbitmq-server/pull/13578)
|
|
|
|
|
|
### LDAP Plugin
|
|
|
|
#### Enhancements
|
|
|
|
* The `in_group_nested` query now uses case-insensitive matching, which is more typical of the LDAP tooling.
|
|
|
|
GitHub issue: [#13633](https://github.com/rabbitmq/rabbitmq-server/pull/13633)
|
|
|
|
|
|
### Dependency Changes
|
|
|
|
* `ra` was upgraded to [`2.15.3`](https://github.com/rabbitmq/ra/releases)
|
|
* `osiris` was updated to [`1.8.6`](https://github.com/rabbitmq/osiris/releases)
|
|
* `credentials_obfuscation` was upgraded to [`3.5.0`](https://github.com/rabbitmq/credentials-obfuscation/releases)
|
|
|
|
|
|
## Source Code Archives
|
|
|
|
To obtain source code of the entire distribution, please download the archive named `rabbitmq-server-4.0.8.tar.xz`
|
|
instead of the source tarball produced by GitHub.
|