Skip to content

Commit 2d2db24

Browse files
authored
Merge pull request #15756 from rabbitmq/mergify/bp/v4.3.x/pr-15696
ra-v3 branch / QQ v8 release notes (backport #15696)
2 parents d40a76b + 8dae91b commit 2d2db24

1 file changed

Lines changed: 83 additions & 16 deletions

File tree

release-notes/4.3.0.md

Lines changed: 83 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ This release removes the original classic queue storage implementation these day
1111
known as CQv1. A 2nd generation implementation called CQv2 has been adopted
1212
as the default starting with `4.2.0`.
1313

14-
This means that attemptes to declare a queue using the following [optional queue arguments](https://www.rabbitmq.com/docs/queues#optional-arguments) will fail:
14+
This means that attempts to declare a queue using the following [optional queue arguments](https://www.rabbitmq.com/docs/queues#optional-arguments) will fail:
1515

1616
* `x-queue-mode` set to any value
1717
* `x-queue-version` set to `1`
@@ -20,9 +20,30 @@ Existing classic queues upgraded to CQv2 during an earlier upgrade to `4.2.x` wi
2020
operating as usual.
2121

2222

23+
### Consumer timeouts are no longer evaluated for classic queues and streams.
24+
25+
This release moves consumer timeout handling responsibility into the queues
26+
themselves. Also all protocols (except the stream protocol) now evaluate
27+
consumer timeout for queue types that support them. Classic queues and streams
28+
never evaluate consumer timeouts as their use cases cause less demand for it.
29+
30+
2331
## Release Highlights
2432

25-
TBD
33+
This release upgrades the [Ra](https://github.com/rabbitmq/ra) dependency to `3.0.1` and introduces
34+
`rabbit_fifo` v8, a new version of the quorum queue state machine with several new features and optimisations:
35+
36+
* **Strict priority queues** with per-priority message counts, correct
37+
redelivery ordering, and priority-aware message expiration
38+
* **Delayed retry** for quorum queues: configurable increasing backoff when
39+
messages are returned
40+
* **Consumer timeout** for quorum queues: configurable timeout for
41+
unacknowledged messages, with protocol-specific handling for AMQP 1.0 and
42+
MQTT
43+
* **Recovery snapshots** and **snapshot throttling** to reduce recovery time
44+
and improve snapshotting decisions
45+
* **Memory optimisations** including compact message references, optimised
46+
tuple storage for delayed keys, and removal of `rabbit_fifo_index` usage
2647

2748

2849
## Upgrading to 4.3.0
@@ -86,25 +107,65 @@ compared to other versions.
86107

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

89-
#### Bug Fixes
110+
* Quorum queues now support **strict priority queues** with per-priority message counts,
111+
correct redelivery ordering across priorities, and priority-aware message expiration scans.
90112

91-
* Quorum queue at-most-once dead lettering for the overflow behaviour `drop-head` now happens in the correct order.
113+
GitHub issue: [#13885](https://github.com/rabbitmq/rabbitmq-server/pull/13885)
92114

93-
GitHub issue: [#14926](https://github.com/rabbitmq/rabbitmq-server/pull/14926)
115+
* Quorum queues now support **delayed retry** with configurable backoff based on delivery count. When messages
116+
are returned (via reject, nack, or modify), they can be held in a delayed state before becoming
117+
available again. The delay is based on delivery count: `min(min_delay * delivery_count, max_delay)`.
94118

95-
#### Enhancements
119+
Configuration is available via queue arguments (`x-delayed-retry-type`, `x-delayed-retry-min`,
120+
`x-delayed-retry-max`) or policy keys (`delayed-retry-type`, `delayed-retry-min`,
121+
`delayed-retry-max`). The retry type can be set to `disabled`, `all`, `failed`, or `returned`.
96122

97-
* When a message is rejected by a queue, RabbitMQ now provides the queue name and rejection reason to AMQP 1.0 publishers
98-
in the `Rejected` outcome. This is particularly useful when multiple queues are bound to an exchange, as it allows
99-
publishers to identify which specific queue out of several target queues rejected the message and why
100-
(e.g., maximum queue length reached or queue unavailable). Previously, publishers had no way to determine which queue
101-
rejected their message or the reason for rejection.
123+
GitHub issue: [#13885](https://github.com/rabbitmq/rabbitmq-server/pull/13885)
102124

103-
The queue name and reason are included in the `info` field of the `Rejected` outcome's `error` field:
104-
* `queue: <queue name>`
105-
* `reason: maxlen | unavailable`
125+
* Quorum queues now support a configurable **consumer timeout**. When a consumer holds unacknowledged
126+
messages beyond the timeout, the messages are returned to the queue. For AMQP 1.0 clients,
127+
timed-out deliveries are released via `DISPOSITION(state=released)` instead of detaching the link,
128+
allowing the consumer to recover without re-attaching. MQTT consumers are also supported.
106129

107-
GitHub issue: [#15075](https://github.com/rabbitmq/rabbitmq-server/pull/15075)
130+
The timeout can be set via the `x-consumer-timeout` consumer argument, queue argument, `consumer-timeout`
131+
policy key, or the global `consumer_timeout` setting in `rabbitmq.conf`.
132+
133+
GitHub issue: [#13885](https://github.com/rabbitmq/rabbitmq-server/pull/13885)
134+
135+
* A new `consumer_disconnected_timeout` setting controls how long quorum queues wait before returning
136+
messages when a consumer's node becomes unreachable due to a network partition. The default is 60 seconds.
137+
Configurable via `consumer_disconnected_timeout` in `rabbitmq.conf`, the `consumer-disconnected-timeout`
138+
policy key, or the `x-consumer-disconnected-timeout` queue argument.
139+
140+
GitHub issue: [#13885](https://github.com/rabbitmq/rabbitmq-server/pull/13885)
141+
142+
* Quorum queue **recovery snapshots** reduce recovery time after a member restart by avoiding
143+
the need to replay all enqueue commands from the log.
144+
145+
GitHub issue: [#13885](https://github.com/rabbitmq/rabbitmq-server/pull/13885)
146+
147+
* Quorum queue **snapshot throttling** now uses WAL fill ratio and reclaimable byte tracking
148+
to make smarter snapshotting decisions, yielding roughly one snapshot per queue per WAL cycle
149+
instead of excessive snapshots in shallow, fast-flowing queues.
150+
151+
GitHub issue: [#13885](https://github.com/rabbitmq/rabbitmq-server/pull/13885)
152+
153+
* Quorum queue **memory optimisations**: message references now use a compact packed integer
154+
representation (fitting into a 59-bit immediate term) when possible, halving per-message
155+
memory overhead in many scenarios. The `rabbit_fifo_index` module is no longer used by the
156+
main state machine.
157+
158+
GitHub issue: [#13885](https://github.com/rabbitmq/rabbitmq-server/pull/13885)
159+
160+
* Quorum queues now allow unlimited explicit message returns. The delivery limit is based on
161+
`delivery-count` rather than `acquired-count`, so messages can be explicitly returned to the
162+
queue without counting towards the delivery limit.
163+
164+
GitHub issue: [#13885](https://github.com/rabbitmq/rabbitmq-server/pull/13885)
165+
166+
* Purging a quorum queue now also removes at-least-once dead-lettered messages that were pending delivery.
167+
168+
GitHub issue: [#13885](https://github.com/rabbitmq/rabbitmq-server/pull/13885)
108169

109170
#### Bug Fixes
110171

@@ -114,7 +175,7 @@ compared to other versions.
114175

115176
* Feature flag state in the registry and on disk were not consistent for a period of time during node boot.
116177

117-
GitHub issue: [#14943](https://github.com/rabbitmq/rabbitmq-server/pull/14943)
178+
GitHub issue: [#14943](https://github.com/rabbitmq/rabbitmq-server/pull/14943)
118179

119180

120181
### Stream Plugin
@@ -147,6 +208,11 @@ compared to other versions.
147208

148209
GitHub issue: [#14923](https://github.com/rabbitmq/rabbitmq-server/discussions/14923)
149210

211+
* Quorum queue delayed retry configuration and status, per-priority message counts, and consumer
212+
timeout state are now displayed in the management UI.
213+
214+
GitHub issue: [#13885](https://github.com/rabbitmq/rabbitmq-server/pull/13885)
215+
150216

151217
### MQTT Plugin
152218

@@ -234,6 +300,7 @@ auth_http.authorization_failure_disclosure = true
234300

235301
### Dependency Changes
236302

303+
* `ra` was upgraded from [`2.17.2`](https://github.com/rabbitmq/ra/releases/tag/v2.17.2) to [`3.0.1`](https://github.com/rabbitmq/ra/releases/tag/v3.0.1)
237304
* `cuttlefish` was upgraded to [`3.6.0`](https://github.com/kyorai/cuttlefish/releases)
238305

239306
## Source Code Archives

0 commit comments

Comments
 (0)