Skip to content

Update 4.0 release notes #12042

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Aug 17, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
233 changes: 217 additions & 16 deletions release-notes/4.0.0.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
## RabbitMQ 4.0.0-beta.4
## RabbitMQ 4.0.0-beta.5

RabbitMQ `4.0.0-beta.4` is a preview of a new major release.
RabbitMQ `4.0.0-beta.5` is a preview of a new major release.

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).

Expand All @@ -20,20 +20,73 @@ Some key improvements in this release are listed below.
use quorum queues and/or streams. Non-replicated classic queues remain and their development continues
* Classic queue [storage efficiency improvements](https://github.com/rabbitmq/rabbitmq-server/pull/11112), in particular recovery time and storage of multi-MiB messages
* Nodes with multiple enabled plugins and little on disk data to recover now [start up to 20-30% faster](https://github.com/rabbitmq/rabbitmq-server/pull/10989)
* CQv1, [the original classic queue storage layer, was removed](https://github.com/rabbitmq/rabbitmq-server/pull/10656) except for the part that's necessary for upgrades
* Several I/O-related metrics are dropped, they should be [monitored at the infrastructure and kernel layers](https://www.rabbitmq.com/docs/monitoring#system-metrics)
* New exchange type: [Local Random Exchange](https://rabbitmq.com/docs/next/local-random-exchange)

See Compatibility Notes below to learn about **breaking or potentially breaking changes** in this release.

## Breaking Changes and Compatibility Notes

* RabbitMQ 3.13 [rabbitmq.conf](https://www.rabbitmq.com/docs/configure#config-file) settings `mqtt.default_user`, `mqtt.default_password`, and `amqp1_0.default_user` are unsupported in RabbitMQ 4.0
Instead, set the new RabbitMQ 4.0 settings `anonymous_login_user` and `anonymous_login_pass` (both values default to `guest`).
For production scenarios, [disallow anonymous logins](https://www.rabbitmq.com/docs/next/production-checklist#anonymous-login)
* RabbitMQ 3.13 `rabbitmq.conf` setting `rabbitmq_amqp1_0.default_vhost` is unsupported in RabbitMQ 4.0.
Instead `default_vhost` will be used to determine the default vhost an AMQP 1.0 client connects to(i.e. when the AMQP 1.0 client does not define the vhost in the `hostname` field of the `open` frame)
* 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 >= `3.13.7`
* Quorum queues will now always set a default `delivery-limit` of 20 which can be increased or decreased by policies and queue arguments but cannot be unset. Some applications or configurations may need to be updated to handle this.
### Classic Queues is Now a Non-Replicated Queue Type

After three years of deprecated, classic queue mirroring was completely removed in this version.
[Quorum queues](https://www.rabbitmq.com/docs/quorum-queues) and [streams](https://www.rabbitmq.com/docs/streams) are two mature
replicated data types offered by RabbitMQ 4.x. Classic queues continue being supported without any breaking changes
for client libraries and applications but they are now a non-replicated queue type.

After an upgrade to 4.0, all classic queue mirroring-related parts of policies will have no effect.
Classic queues will continue to work like before but with only one replica.

Clients will be able to connect to any node to publish to and consume from any non-replicated classic queues.
Therefore applications will be able to use the same classic queues as before.

See [Mirrored Classic Queues Migration to Quorum Queues](https://www.rabbitmq.com/docs/migrate-mcq-to-qq) for guidance
on how to migrate to quorum queues for the parts of the system that really need to use replication.

### Quorum Queues Now Have a Default Redelivery Limit

Quorum queues now have a default [redelivery limit](https://www.rabbitmq.com/docs/next/quorum-queues#poison-message-handling) set to `20`.

### CQv1 Storage Implementation was Removed

CQv1, [the original classic queue storage layer, was removed](https://github.com/rabbitmq/rabbitmq-server/pull/10656)
except for the part that's necessary for upgrades to CQv2 (the 2nd generation).

### Several Disk I/O-Related Metrics were Removed

Several I/O-related metrics are dropped, they should be [monitored at the infrastructure and kernel layers](https://www.rabbitmq.com/docs/monitoring#system-metrics)

### Default Maximum Message Size Reduced to 16 MiB

Default maximum message size is reduced to 16 MiB (from 128 MiB).

The limit can be increased via a `rabbitmq.conf` setting:

```ini
# 32 MiB
max_message_size = 33554432
```

However, it is recommended that such large multi-MiB messages are put into a blob store, and their
IDs are passed around in messages instead of the entire payload.

### AMQP 1.0

RabbitMQ 3.13 `rabbitmq.conf` setting `rabbitmq_amqp1_0.default_vhost` is unsupported in RabbitMQ 4.0.

Instead `default_vhost` will be used to determine the default vhost an AMQP 1.0 client connects to(i.e. when the AMQP 1.0 client does not define the vhost in the `hostname` field of the `open` frame).

### MQTT

RabbitMQ 3.13 [rabbitmq.conf](https://www.rabbitmq.com/docs/configure#config-file) settings `mqtt.default_user`, `mqtt.default_password`,
and `amqp1_0.default_user` are unsupported in RabbitMQ 4.0.

Instead, set the new RabbitMQ 4.0 settings `anonymous_login_user` and `anonymous_login_pass` (both values default to `guest`).
For production scenarios, [disallow anonymous logins](https://www.rabbitmq.com/docs/next/production-checklist#anonymous-login).

### Shovels

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 >= `3.13.7`.


## Erlang/OTP Compatibility Notes

Expand Down Expand Up @@ -66,10 +119,10 @@ there is no upgrade path from 3.12.14 (or a later patch release) straight to `4.

### Required Feature Flags

This release does not [graduate](https://www.rabbitmq.com/docs/feature-flags#graduation) any feature flags.
This release [graduates](https://www.rabbitmq.com/docs/feature-flags#graduation) all feature flags introduced up to `3.13.0`.

However, all users are highly encouraged to enable all feature flags before upgrading to this release from
3.13.x.
All users must enable all stable [feature flags] before upgrading to 4.0 from
the latest available 3.13.x patch release.

### Mixed version cluster compatibility

Expand All @@ -92,11 +145,159 @@ TBD

## Changes Worth Mentioning

TBD
This section is incomplete and will be expanded as 4.0 approaches its release candidate stage.

### Core Server

#### Enhancements

* Efficient sub-linear quorum queue recovery on node startup using checkpoints.

GitHub issue: [#10637](https://github.com/rabbitmq/rabbitmq-server/pull/10637)

* Classic queue storage v2 (CQv2) optimizations. For example, CQv2 recovery time on node boot
is now twice as fast for some data sets.

GitHub issue: [#11112](https://github.com/rabbitmq/rabbitmq-server/pull/11112)

* Node startup time improvements. For some environments, nodes with very small on disk data sets
now start about 25% quicker.

GitHub issue: [#10989](https://github.com/rabbitmq/rabbitmq-server/pull/10989)

* Quorum queues now support [priorities](https://www.rabbitmq.com/docs/next/quorum-queues#priorities). However,
there are difference with how priorities work in classic queues.

GitHub issue: [#10637](https://github.com/rabbitmq/rabbitmq-server/pull/10637)

* Per-message metadata stored in the quorum queue Raft log now uses less disk space.

GitHub issue: [#8261](https://github.com/rabbitmq/rabbitmq-server/issues/8261)

* Single Active Consumer (SAC) implementation of quorum queues now respects consumer priorities.

GitHub issue: [#8261](https://github.com/rabbitmq/rabbitmq-server/issues/8261)

* `rabbitmq.conf` now supports [encrypted values](https://www.rabbitmq.com/docs/next/configure#configuration-encryption)
with a prefix:

``` ini
default_user = bunnies-444
default_pass = encrypted:F/bjQkteQENB4rMUXFKdgsJEpYMXYLzBY/AmcYG83Tg8AOUwYP7Oa0Q33ooNEpK9
```

GitHub issue: [#11989](https://github.com/rabbitmq/rabbitmq-server/pull/11989)

* All feature flags up to `3.13.0` have [graduated](https://www.rabbitmq.com/docs/feature-flags#graduation) and are now mandatory.

GitHub issue: [#11659](https://github.com/rabbitmq/rabbitmq-server/pull/11659)

* Quorum queues now use a default [redelivery limit](https://www.rabbitmq.com/docs/next/quorum-queues#poison-message-handling) of 20.

GitHub issue: [#11937](https://github.com/rabbitmq/rabbitmq-server/pull/11937)

* `queue_master_locator` queue setting has been deprecated in favor of `queue_leader_locator` used by quorum queues
and streams.

GitHub issue: [#10702](https://github.com/rabbitmq/rabbitmq-server/issues/10702)


### AMQP 1.0

#### Bug Fixes

* AMQP 0-9-1 to AMQP 1.0 string data type conversion improvements.

GitHub issue: [#11715](https://github.com/rabbitmq/rabbitmq-server/pull/11715)

#### Enhancements

* [AMQP 1.0 is now a core protocol](https://www.rabbitmq.com/blog/2024/08/05/native-amqp) that is always enabled.
Its plugin is now a no-op that only exists to simplify upgrades.

GitHub issues: [#9022](https://github.com/rabbitmq/rabbitmq-server/pull/9022), [#10662](https://github.com/rabbitmq/rabbitmq-server/pull/10662)

* The AMQP 1.0 implementation is now significantly more efficient: its peak throughput is more than double than that of 3.13.x
on some workloads.

GitHub issue: [#9022](https://github.com/rabbitmq/rabbitmq-server/pull/9022)

* AMQP 1.0 clients now can manage topologies (queues, exchanges, bindings).

GitHub issue: [#10559](https://github.com/rabbitmq/rabbitmq-server/pull/10559)

* AMQP 1.0 implementation now supports a new (v2) address format for referencing queues, exchanges, and so on.

GitHub issues: [#11604](https://github.com/rabbitmq/rabbitmq-server/pull/11604), [#11618](https://github.com/rabbitmq/rabbitmq-server/pull/11618)

* AMQP 1.0 implementation now supports consumer priorities.

GitHub issue: [#11705](https://github.com/rabbitmq/rabbitmq-server/pull/11705)

* Client-provided connection name will now be logged for AMQP 1.0 connections.

GitHub issue: [#11958](https://github.com/rabbitmq/rabbitmq-server/issues/11958)


### Streams

#### Enhancements

* Stream filtering is now supported for AMQP 1.0 clients.

GitHub issue: [#10098](https://github.com/rabbitmq/rabbitmq-server/pull/10098)


### Prometheus Plugin

#### Enhancements

* [Detailed memory breakdown](https://www.rabbitmq.com/docs/memory-use) metrics are now exposed via the Prometheus scraping endpoint.

GitHub issue: [#11743](https://github.com/rabbitmq/rabbitmq-server/issues/11743)

* New per-exchange and per-queue metrics.

Contributed by @LoisSotoLopez.

GitHub issue: [#11559](https://github.com/rabbitmq/rabbitmq-server/pull/11559)

* Shovel and Federation metrics are now available via two new plugins: `rabbitmq_shovel_prometheus` and `rabbitmq_federation_prometheus`.

Contributed by @SimonUnge.

GitHub issue: [#11942](https://github.com/rabbitmq/rabbitmq-server/pull/11942)


### Shovel Plugin

#### Enhancements

* Shovels now can be configured to use pre-declared topologies. This is primarily useful in environments where
schema definition comes from [definitions](https://www.rabbitmq.com/docs/definitions).

GitHub issue: [#10501](https://github.com/rabbitmq/rabbitmq-server/issues/10501)


### Local Random Exchange Plugin

This is an initial release that includes [Local Random Exchange](https://www.rabbitmq.com/docs/next/local-random-exchange).

GitHub issues: [#8334](https://github.com/rabbitmq/rabbitmq-server/pull/8334), [#10091](https://github.com/rabbitmq/rabbitmq-server/pull/10091).


### STOMP Plugin

#### Enhancements

* STOMP now supports consumer priorities.

GitHub issue: [#11947](https://github.com/rabbitmq/rabbitmq-server/pull/11947)


### Dependency Changes

* Ra was [upgraded to `2.13.5`](https://github.com/rabbitmq/ra/releases)
* Ra was [upgraded to `2.13.6`](https://github.com/rabbitmq/ra/releases)
* Khepri was [upgraded to `0.14.0`](https://github.com/rabbitmq/khepri/releases)
* Cuttlefish was [upgraded to `3.4.0`](https://github.com/Kyorai/cuttlefish/releases)

Expand Down
Loading