1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357
|
## Highlights
This release [improves efficiency](https://blog.rabbitmq.com/posts/2022/05/rabbitmq-3.10-performance-improvements/) of quorum and classic queues.
Per-queue memory footprint was reduced for some
workloads. Queue operations produce less runtime GC pressure.
Quorum queues now support [message TTL](https://rabbitmq.com/ttl.html), at-most-once and at-least-once
strategies for dead-lettering, an operationally safer re-queue operation behavior,
and can be used for durable MQTT subscriptions in new clusters.
3.10.0 is the first release to introduce [Erlang 25 support](https://www.erlang.org/blog/my-otp-25-highlights/) at the time of writing)
which includes JIT support for 64-bit ARM processors.
Classic queues now ship a new message store and queue index implementation known as CQv2.
The operator must opt in to use them, CQv1 is still used by default.
Definition re-import on node restart now can be skipped if the source (a file, directory or a file retrieved over HTTPS)
has not changed. Queue and exchange re-import is now more efficient, the speed-up is over two orders of magnitude
in some environments.
The OAuth 2 plugin provides a way to map "non-standard" or "alias" scopes
to a set of RabbitMQ permissions.
## Obtaining Packages
RabbitMQ releases are distributed via [GitHub](https://github.com/rabbitmq/rabbitmq-server/releases), [Cloudsmith](https://cloudsmith.io/~rabbitmq/repos/), and [PackageCloud](https://packagecloud.io/rabbitmq).
### Erlang/OTP Compatibility Notes
This release [requires Erlang 23.2](https://www.rabbitmq.com/which-erlang.html) or later. Erlang 24 is recommended as it [offers 20%-50% throughput improvements](https://blog.rabbitmq.com/posts/2021/03/erlang-24-support-roadmap/) for many workloads.
[Provisioning Latest Erlang Releases](https://www.rabbitmq.com/which-erlang.html#erlang-repositories) explains what package repositories and tools can be used to provision latest patch versions of Erlang 23.3.x and 24.x.
## Upgrading to 3.10
See the [Upgrading guide](https://www.rabbitmq.com/upgrade.html) for documentation on upgrades and [RabbitMQ change log](https://www.rabbitmq.com/changelog.html) for release notes of other releases.
RabbitMQ 3.10.0 nodes can run alongside `3.9.x` nodes. `3.10.x`-specific features can only be made available when all nodes in the cluster
upgrade to 3.10.0 or any other patch release in the series.
While operating in mixed version mode, some aspects of the system may not behave as expected. The list of known behavior changes is covered below.
Once all nodes are upgraded to 3.10.0, these irregularities will go away.
Mixed version clusters are a mechanism that allows rolling upgrade and are not meant to be run for extended
periods of time (no more than a few hours).
## Compatibility Notes
### Client Library Compatibility
Client libraries that were compatible with RabbitMQ `3.9.x` will be compatible with `3.10.0`.
### Upgrading to Erlang 24.x
RabbitMQ `3.8.16` and later require Erlang `23.2` and support Erlang `24` (recommended).
Users of RabbitMQ versions that [do not support Erlang 23.2](https://www.rabbitmq.com/which-erlang.html) should first upgrade to the latest `3.8.x` patch release on Erlang 23.2,
then upgrade to `3.10.0`, and ideally Erlang 24.
### Getting Help
Any questions about this release, upgrades or RabbitMQ in general are welcome on the [RabbitMQ mailing list](https://groups.google.com/forum/#!forum/rabbitmq-users).
## Changes Worth Mentioning
Release notes are kept under [rabbitmq-server/release-notes](https://github.com/rabbitmq/rabbitmq-server/tree/v3.10.x/release-notes).
### Core Server
#### Enhancements
* Reduced memory footprint of quorum queues. Quorum queues now move enqueues messages to disk as quickly as
possible, ignoring the `x-max-in-memory-length` and `x-max-in-memory-bytes` policy keys. This reduces per-queue memory footprint
and makes throughput and latency less variable.
GitHub issue: [#3898](https://github.com/rabbitmq/rabbitmq-server/issues/3898)
* New classic queue index and message store implementations. This makes memory footprint of classic queues less variable
and on average, lower than before. Consumer delivery is more efficient, potentially increasing throughput for workloads
where consumers do keep up with producers.
This implementation is not enabled by default. It can be enabled using a policy:
``` shell
rabbitmqctl set_policy cq_version "^cq\." '{"queue-version": 2}' --priority 1 --apply-to queues
```
or set via `rabbitmq.conf`:
``` ini
classic_queue.default_version = 2
```
GitHub issue: [#3029](https://github.com/rabbitmq/rabbitmq-server/pull/3029)
* Quorum queues now support [message TTL](https://rabbitmq.com/ttl.html).
GitHub issue: [#3121](https://github.com/rabbitmq/rabbitmq-server/pull/3121)
* Reduced per-queue garbage collection.
GitHub issue: [#4110](https://github.com/rabbitmq/rabbitmq-server/pull/4110)
* Stream replication connections now adopt [TLS settings configured for inter-node communication links](https://rabbitmq.com/clustering-ssl.html).
GitHub issue: [#3553](https://github.com/rabbitmq/rabbitmq-server/pull/3553)
* Quorum queues now support two [dead lettering](https://rabbitmq.com/dlx.html) strategies, at-most-once (the 3.9 quorum queue and classic queue behavior)
and at-least-once.
To use at-least-once the user must opt-in.
GitHub issue: [#3100](https://github.com/rabbitmq/rabbitmq-server/issues/3100)
* Messages delivered by a quorum queue and negatively acknowledged with a requeue will be added to the back of the queue
until the queue has redelivery limit set. With a redelivery limit, requeueing will use the original position of the message
if possible.
This improves operational safety: consumers that get stuck or requeue deliveries at a high rate will not indefinitely
grow quorum queue Raft log, potentially driving the node out of disk space.
 This is a **potentially breaking change**.
Applications can make sure quorum queues have a redelivery limit
set if the original behavior is important to keep.
GitHub issue: [#3776](https://github.com/rabbitmq/rabbitmq-server/issues/3776)
* [Boot time definition sync](https://rabbitmq.com/definitions.html#import-on-boot) now can be skipped if definition source (e.g. file or directory) contents
have not changed:
``` ini
definitions.skip_if_unchanged = true
definitions.import_backend = local_filesystem
definitions.local.path = /path/to/definitions/defs.json
```
GitHub issue: [#4062](https://github.com/rabbitmq/rabbitmq-server/pull/4062)
* Classic mirrored queues peak eager sync throughput now can be limited.
Contributed by @thuandb (AWS).
GitHub issue: [#3925](https://github.com/rabbitmq/rabbitmq-server/pull/3925)
* [Optional queue arguments](https://rabbitmq.com/queues.html#optional-arguments) are now more strictly validated at queue
declaration time, as are optional consumer arguments when new consumers subscribe.
GitHub issue: [#4572](https://github.com/rabbitmq/rabbitmq-server/pull/4572)
* Headers exchanges (AMQP 0-9-1) now support a new matching strategy, `"any-with-x"`,
which works the same way as `"any"` but also considers headers that begin with
an `"x-"`.
GitHub issue: [#4143](https://github.com/rabbitmq/rabbitmq-server/pull/4143)
* Queues can no longer be created in a vhost while deletion of that vhost is in progress
Contributed by @tomyouyou.
GitHub issue: [#4260](https://github.com/rabbitmq/rabbitmq-server/pull/4260)
* rabbitmqctl encode/decode can now accept more values via standard input
GitHub issue: [#4258](https://github.com/rabbitmq/rabbitmq-server/pull/4258)
* rabbitmq_tracing now uses local time for timestamps
GitHub issue: [#4277](https://github.com/rabbitmq/rabbitmq-server/pull/4277)
#### Internal API and Other Changes
* Two rarely used classic queue metrics have been removed. Their removal reduces pressure
on internal table writes and boosts classic queue v1 throughput by 10 to 20 percent.
Contributed by @felixhuettner.
GitHub issue: [#4431](https://github.com/rabbitmq/rabbitmq-server/pull/4431)
* Tracing and `idle_since` timestamps now reflect local time in RFC 3339 format. Previously
a custom format was used for these timestamps and they always reflected UTC time.
GitHub issue: [#4276](https://github.com/rabbitmq/rabbitmq-server/pull/4276)
* Inter-node message transfer is optimized for the case where a message is only routed to one queue.
Contributed by @tomyouyou.
GitHub issue: [#3865](https://github.com/rabbitmq/rabbitmq-server/pull/3865)
* Definition import now can be extended to support arbitrary sources. This is done
by providing a module that implements three functions: `is_enabled/0`, `load/1`, `load_with_hashing/3`.
The module can then should be specified as the `definitions.import_backend` value:
``` ini
definitions.import_backend = rabbit_definitions_import_our_custom_backend
```
GitHub issue: [#3311](https://github.com/rabbitmq/rabbitmq-server/pull/3311)
* Elixir 1.13 is now supported at build time.
GitHub issue: [#4108](https://github.com/rabbitmq/rabbitmq-server/pull/4108)
#### Bug Fixes
This release includes all applicable [bug fixes that shipped in `3.9.x` releases](https://www.rabbitmq.com/changelog.html).
* Addressed a performance regression for large fanouts when streams were not enabled.
GitHub issue: [#4073](https://github.com/rabbitmq/rabbitmq-server/pull/4073)
* Stream delivery rate could drop if concurrent stream consumers consumed in a way
that made them reach the end of the stream often.
GitHub issue: [#4371](https://github.com/rabbitmq/rabbitmq-server/pull/4371)
* Channels could confirm a subset of messages published as mandatory in some cases.
GitHub issue: [#3870](https://github.com/rabbitmq/rabbitmq-server/pull/3870)
* Direct Erlang client initialisation had a race condition with earlier boot steps,
which could lead plugins that depend on it to fail to open connections.
GitHub issue: [#3685](https://github.com/rabbitmq/rabbitmq-server/pull/3685)
* Exclusive queues are always placed on local node.
[Exclusive queues](https://rabbitmq.com/queues.html#exclusive-queues) are by definition node-local because they are tied to the lifecycle of
their declaring connection, which is node-local.
GitHub issue: [#3341](https://github.com/rabbitmq/rabbitmq-server/pull/3341)
### Prometheus Plugin
#### Bug Fixes
* Prometheus collector could run into an exception early on node's
schema database sync.
GitHub issue: [#4376](https://github.com/rabbitmq/rabbitmq-server/pull/4376)
### Management Plugin
#### Enhancements
* `idle_since` field now uses RFC 3339 format.
 This is a **potentially breaking change**.
Sample value with the previous format: `2022-03-22 11:39:37`. With the new format: `2022-03-22T11:39:37.908+01:00`.
Clients of the REST API should be able to parse values in the new format.
GitHub issue: [#4276](https://github.com/rabbitmq/rabbitmq-server/issues/4276)
#### Bug Fixes
* `rabbitmqadmin` now correctly loads TLS-related keys from its configuration file.
Contributed by @fwolfsjaeger.
GitHub issue: [#4408](https://github.com/rabbitmq/rabbitmq-server/pull/4408)
### MQTT Plugin
#### Enhancements
* Durable (QoS 1) subscriptions now can be backed by [quorum queues](https://www.rabbitmq.com/quorum-queues.html) if configured so.
This setting **can only be applied for new clusters**: existing durable classic
queues will not be converted. Enabling this setting in a cluster with existing
durable subscription data of MQTT clients will make it impossible for them to
subscribe without **explicit queue deletion** by the cluster operator.
To opt in to use quorum queues for durable MQTT subscriptions, use the `mqtt.durable_queue_type`
configuration key in `rabbitmq.conf`:
``` ini
mqtt.durable_queue_type = quorum
```
GitHub issue: [#4401](https://github.com/rabbitmq/rabbitmq-server/pull/4401)
### OAuth 2 AuthN and AuthZ Backend Plugin
#### Enhancements
* The plugin now supports scope aliases. In some environments, it's unrealistic to
adopt JWTs that follow the `scope` convention assumed by the plugin. Instead,
identity services fill `scope` or `claims` field with a "role name" or "role alias"
that implicitly maps to a set of scopes/permissions.
With this feature, RabbitMQ operators can map those values to a set of
scopes that can be translated to RabbitMQ permissions.
GitHub issue: [#4588](https://github.com/rabbitmq/rabbitmq-server/issues/4588)
* Improvements to JKW support and new HTTPS settings.
Contributed by @anhanhnguyen (Erlang Solutions).
GitHub issue: [#3887](https://github.com/rabbitmq/rabbitmq-server/pull/3887)
### Shovel Plugin
#### Enhancements
* Dynamic Shovels can be deleted or restarted from any cluster node
Contributed by @kostakal.
GitHub issue: [#4242](https://github.com/rabbitmq/rabbitmq-server/pull/4242)
#### Bug Fixes
* Shovels with automatic deletion threshold of `0` are now correctly deleted immediately.
Contribited by @luos (Erlang Solutions).
GitHub issue: [#4098](https://github.com/rabbitmq/rabbitmq-server/pull/4098)
### Consul Peer Discovery Plugin
#### Bug Fixes
* Handle a response code change in Consul 1.11.
Contributed by @maestroes.
GitHub issue: [#4149](https://github.com/rabbitmq/rabbitmq-server/issues/4149)
### Dependency Changes
* `ra` upgraded from [`2.0.0` to `2.0.9`](https://github.com/rabbitmq/ra/compare/v2.0.0...v2.0.9)
* `osiris` upgraded from [`1.0.0` to `1.2.6`](https://github.com/rabbitmq/osiris/compare/v1.0.0...v1.2.6)
* `ranch` upgraded from [`2.0.0` to `2.1.0`](https://github.com/ninenines/ranch/compare/2.0.0...2.1.0)
* `prometheus` upgraded from [`4.8.1` to `4.8.2`](https://github.com/deadtrickster/prometheus.erl/compare/06425c21a39c1564164f1cc3fe5bdfa8b23b1f78...v4.8.2)
* `eetcd` upgraded from [`0.3.3` to `0.3.5`](https://github.com/zhongwencool/eetcd/compare/v0.3.3...v0.3.5)
* `observer_cli` upgraded from [`1.6.2` to `1.7.3`](https://github.com/zhongwencool/observer_cli/compare/1.6.2...1.7.3)
* `gen_batch_server` upgraded from [`0.8.6` to `0.8.7`](https://github.com/rabbitmq/gen-batch-server/compare/38191672ee0f22a8d5291c6c09f8c07178d565ca...v0.8.7)
|