Skip to content

Releases: rabbitmq/rabbitmq-server

RabbitMQ 3.8.31

10 May 19:57
593e74b

Choose a tag to compare

RabbitMQ 3.8.31 is a maintenance release.
All users are recommended to upgrade to this release.

Obtaining Packages

RabbitMQ releases are distributed via GitHub, Cloudsmith,
and PackageCloud.

Erlang/OTP Compatibility Notes

This release requires Erlang 23.2 and supports Erlang 24.

Provisioning Latest Erlang Releases explains
what package repositories and tools can be used to provision modern Erlang versions.

Upgrade and Compatibility Notes

See the Upgrading guide for general documentation on upgrades and
RabbitMQ change log for release notes of other releases.

If upgrading from a 3.7.x release, see 3.8.0 release notes
upgrade and compatibility notes first.

If upgrading from a 3.6.x or older release series, first upgrade
to 3.7.27 and then to this version.

Getting Help

Any questions about this release, upgrades or RabbitMQ in general are welcome on the RabbitMQ mailing list
and RabbitMQ community Slack.

Changes Worth Mentioning

Release notes can be found on GitHub at rabbitmq-server/release-notes.

Core Server

Enhancements

  • Cleaned up some compiler options that are no longer relevant.

    Contributed by Péter @gomoripeti Gömöri (CloudAMQP).

    GitHub issue: #4707

JMS Topic Exchange Plugin

Bug Fixes

  • "In flight" messages directed to an exchange that has just been deleted will be
    silently dropped or returned back to the publisher instead of causing an exception.

    GitHub issue: #4696

Dependency Upgrades

Source Code Archives

To obtain source code of the entire distribution, please download the archive named rabbitmq-server-3.8.31.tar.xz
instead of the source tarball produced by GitHub.

RabbitMQ 3.10.0

03 May 13:50
d17924a

Choose a tag to compare

Highlights

This release improves efficiency 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, 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 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, Cloudsmith, and PackageCloud.

Erlang/OTP Compatibility Notes

This release requires Erlang 23.2 or later. Erlang 24 is recommended as it offers 20%-50% throughput improvements for many workloads.

Provisioning Latest Erlang Releases 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 for documentation on upgrades and RabbitMQ change log 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 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.

Changes Worth Mentioning

Release notes are kept under rabbitmq-server/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

  • 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:

    rabbitmqctl set_policy cq_version "^cq\." '{"queue-version": 2}' --priority 1 --apply-to queues

    or set via rabbitmq.conf:

    classic_queue.default_version = 2

    GitHub issue: #3029

  • Quorum queues now support message TTL.

    GitHub issue: #3121

  • Reduced per-queue garbage collection.

    GitHub issue: #4110

  • Stream replication connections now adopt TLS settings configured for inter-node communication links.

    GitHub issue: #3553

  • Quorum queues now support two dead lettering 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

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

    Breaking change 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

  • Boot time definition sync now can be skipped if definition source (e.g. file or directory) contents
    have not changed:

    definitions.skip_if_unchanged = true
    
    definitions.import_backend = local_filesystem
    definitions.local.path = /path/to/definitions/defs.json

    GitHub issue: #4062

  • Classic mirrored queues peak eager sync throughput now can be limited.

    Contributed by @thuandb (AWS).

    GitHub issue: #3925

  • Optional queue arguments are now more strictly validated at queue
    declaration time, as are optional consumer arguments when new consumers subscribe.

    GitHub issue: #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

  • Queues can no longer be created in a vhost while deletion of that vhost is in progress

    Contributed by @tomyouyou.

    GitHub issue: #4260

  • rabbitmqctl encode/decode can now accept more values via standard input

    GitHub issue: #4258

  • rabbitmq_tracing now uses local time for timestamps

    GitHub issue: #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

  • 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

  • Inter-node message transfer is optimized for the case where a message is only routed to one queue.

    Contributed by @tomyouyou.

    GitHub issue: #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:

    definitions.import_backend = rabbit_definitions_import_our_custom_backend

    GitHub issue: #3311

  • Elixir 1.13 is now supported at build time.

    GitHub issue: #4108

Bug Fixes

This release includes all applicable bug fixes that shipped in 3.9.x releases.

  • Addressed a performance regression for large fanouts when streams were not enabled.

    GitHub issue: #4073

  • Stream delivery rate could drop if concurrent stream consume...

Read more

RabbitMQ 3.10.0-rc.6

30 Apr 13:54
c6d1736

Choose a tag to compare

RabbitMQ 3.10.0-rc.6 Pre-release
Pre-release

Highlights

This release improves efficiency 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, 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 (at RC stage 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, Cloudsmith, and PackageCloud.

Erlang/OTP Compatibility Notes

This release requires Erlang 23.2 or later. Erlang 24 is recommended as it offers 20%-50% throughput improvements for many workloads.

Provisioning Latest Erlang Releases 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 for documentation on upgrades and RabbitMQ change log 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 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.

Changes Worth Mentioning

Release notes are kept under rabbitmq-server/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

  • 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:

    rabbitmqctl set_policy cq_version "^cq\." '{"queue-version": 2}' --priority 1 --apply-to queues

    or set via rabbitmq.conf:

    classic_queue.default_version = 2

    GitHub issue: #3029

  • Quorum queues now support message TTL.

    GitHub issue: #3121

  • Reduced per-queue garbage collection.

    GitHub issue: #4110

  • Stream replication connections now adopt TLS settings configured for inter-node communication links.

    GitHub issue: #3553

  • Quorum queues now support two dead lettering 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

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

    Breaking change 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

  • Boot time definition sync now can be skipped if definition source (e.g. file or directory) contents
    have not changed:

    definitions.skip_if_unchanged = true
    
    definitions.import_backend = local_filesystem
    definitions.local.path = /path/to/definitions/defs.json

    GitHub issue: #4062

  • Classic mirrored queues peak eager sync throughput now can be limited.

    Contributed by @thuandb (AWS).

    GitHub issue: #3925

  • Optional queue arguments are now more strictly validated at queue
    declaration time, as are optional consumer arguments when new consumers subscribe.

    GitHub issue: #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

  • Queues can no longer be created in a vhost while deletion of that vhost is in progress

    Contributed by @tomyouyou.

    GitHub issue: #4260

  • rabbitmqctl encode/decode can now accept more values via standard input

    GitHub issue: #4258

  • rabbitmq_tracing now uses local time for timestamps

    GitHub issue: #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

  • 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

  • Inter-node message transfer is optimized for the case where a message is only routed to one queue.

    Contributed by @tomyouyou.

    GitHub issue: #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:

    definitions.import_backend = rabbit_definitions_import_our_custom_backend

    GitHub issue: #3311

  • Elixir 1.13 is now supported at build time.

    GitHub issue: #4108

Bug Fixes

This release includes all applicable bug fixes that shipped in 3.9.x releases.

  • Addressed a performance regression for large fanouts when streams were not enabled.

    GitHub issue: #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 i...

Read more

RabbitMQ 3.10.0-rc.5

28 Apr 05:37
edc5d6e

Choose a tag to compare

RabbitMQ 3.10.0-rc.5 Pre-release
Pre-release

Highlights

This release improves efficiency 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, 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 (at RC stage 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, Cloudsmith, and PackageCloud.

Erlang/OTP Compatibility Notes

This release requires Erlang 23.2 or later. Erlang 24 is recommended as it offers 20%-50% throughput improvements for many workloads.

Provisioning Latest Erlang Releases 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 for documentation on upgrades and RabbitMQ change log 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 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.

Changes Worth Mentioning

Release notes are kept under rabbitmq-server/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

  • 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:

    rabbitmqctl set_policy cq_version "^cq\." '{"queue-version": 2}' --priority 1 --apply-to queues

    or set via rabbitmq.conf:

    classic_queue.default_version = 2

    GitHub issue: #3029

  • Quorum queues now support message TTL.

    GitHub issue: #3121

  • Reduced per-queue garbage collection.

    GitHub issue: #4110

  • Stream replication connections now adopt TLS settings configured for inter-node communication links.

    GitHub issue: #3553

  • Quorum queues now support two dead lettering 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

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

    Breaking change 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

  • Boot time definition sync now can be skipped if definition source (e.g. file or directory) contents
    have not changed:

    definitions.skip_if_unchanged = true
    
    definitions.import_backend = local_filesystem
    definitions.local.path = /path/to/definitions/defs.json

    GitHub issue: #4062

  • Classic mirrored queues peak eager sync throughput now can be limited.

    Contributed by @thuandb (AWS).

    GitHub issue: #3925

  • Optional queue arguments are now more strictly validated at queue
    declaration time, as are optional consumer arguments when new consumers subscribe.

    GitHub issue: #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

  • Queues can no longer be created in a vhost while deletion of that vhost is in progress

    Contributed by @tomyouyou.

    GitHub issue: #4260

  • rabbitmqctl encode/decode can now accept more values via standard input

    GitHub issue: #4258

  • rabbitmq_tracing now uses local time for timestamps

    GitHub issue: #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

  • 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

  • Inter-node message transfer is optimized for the case where a message is only routed to one queue.

    Contributed by @tomyouyou.

    GitHub issue: #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:

    definitions.import_backend = rabbit_definitions_import_our_custom_backend

    GitHub issue: #3311

  • Elixir 1.13 is now supported at build time.

    GitHub issue: #4108

Bug Fixes

This release includes all applicable bug fixes that shipped in 3.9.x releases.

  • Addressed a performance regression for large fanouts when streams were not enabled.

    GitHub issue: #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 i...

Read more

RabbitMQ 3.9.16

27 Apr 09:35
f58514e

Choose a tag to compare

RabbitMQ 3.9.16 is a maintenance release in the 3.9.x release series.

Please refer to the Upgrading to 3.9 section from v3.9.0 release notes if upgrading from a version prior to 3.9.0.

This release requires at least Erlang 23.2, and supports Erlang 24. RabbitMQ and Erlang/OTP Compatibility Matrix has more details on Erlang version requirements for RabbitMQ.

Changes Worth Mentioning

Release notes are kept under rabbitmq-server/release-notes.
Contributors are encouraged to update them together with their changes. This helps with release automation and a more consistent release schedule.

Core Server

Enhancements

  • Quorum queues: better forward compatibility with (currently in preview) RabbitMQ 3.10.

    GitHub issue: #4560

  • Significantly faster queue re-import from definitions
    on subsequent node restarts. Initial definition import still takes
    the same amount of time as before.

    GitHub issue: #4538

  • Significantly faster exchange re-import from definitions
    on subsequent node restarts. Initial definition import still takes
    the same amount of time as before.

    GitHub issue: #4585

  • RabbitMQ nodes will now filter out certain log messages related to
    connections, channels, and queue leader replicas receiving internal protocol messages
    sent to this node before a restart. These messages usually raise more questions
    and cause confusion than help.

    It is still possible to detect relevant underlying events (node or connection failures)
    from other log messages.

    GitHub issue: #4557

Bug Fixes

  • rabbitmq-upgrade await_online_synchronized_mirror is now a no-op in single node
    clusters

    GitHub issue: #4570

Prometheus Plugin

Bug Fixes

  • One metric that was exposed via CLI tools and management plugin's HTTP API
    was not exposed via Prometheus scraping API.

    Contributed by @gomoripeti.

    GitHub issue: #4645

Dependency Upgrades

Source Code Archives

To obtain source code of the entire distribution, please download the archive named rabbitmq-server-3.9.16.tar.xz
instead of the source tarball produced by GitHub.

RabbitMQ 3.8.30

27 Apr 07:52
42f574a

Choose a tag to compare

RabbitMQ 3.8.30 is a maintenance release.
All users are recommended to upgrade to this release.

Obtaining Packages

RabbitMQ releases are distributed via GitHub, Cloudsmith,
and PackageCloud.

Erlang/OTP Compatibility Notes

This release requires Erlang 23.2 and supports Erlang 24.

Provisioning Latest Erlang Releases explains
what package repositories and tools can be used to provision modern Erlang versions.

Upgrade and Compatibility Notes

See the Upgrading guide for general documentation on upgrades and
RabbitMQ change log for release notes of other releases.

If upgrading from a 3.7.x release, see 3.8.0 release notes
upgrade and compatibility notes first.

If upgrading from a 3.6.x or older release series, first upgrade
to 3.7.27 and then to this version.

Getting Help

Any questions about this release, upgrades or RabbitMQ in general are welcome on the RabbitMQ mailing list
and RabbitMQ community Slack.

Changes Worth Mentioning

Release notes are kept under rabbitmq-server/release-notes.
Contributors are encouraged to update them together with their changes. This helps with release automation and more
consistent release schedule.

Core Server

Enhancements

  • Significantly faster queue re-import from definitions
    on subsequent node restarts. Initial definition import still takes
    the same amount of time as before.

    GitHub issue: #4538

  • Significantly faster exchange re-import from definitions
    on subsequent node restarts. Initial definition import still takes
    the same amount of time as before.

    GitHub issue: #4585

Bug Fixes

  • rabbitmq-upgrade await_online_synchronized_mirror is now a no-op in single node
    clusters

    GitHub issue: #4570

Dependency Upgrades

Source Code Archives

To obtain source code of the entire distribution, please download the archive named rabbitmq-server-3.8.30.tar.xz
instead of the source tarball produced by GitHub.

RabbitMQ 3.10.0-rc.4

24 Apr 20:46
12fe50f

Choose a tag to compare

RabbitMQ 3.10.0-rc.4 Pre-release
Pre-release

Highlights

This release improves efficiency 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, 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 (at RC stage at the time of writing).

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, Cloudsmith, and PackageCloud.

Erlang/OTP Compatibility Notes

This release requires Erlang 23.2 or later. Erlang 24 is recommended as it offers 20%-50% throughput improvements for many workloads.

Provisioning Latest Erlang Releases 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 for documentation on upgrades and RabbitMQ change log 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 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.

Changes Worth Mentioning

Release notes are kept under rabbitmq-server/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

  • 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:

    rabbitmqctl set_policy cq_version "^cq\." '{"queue-version": 2}' --priority 1 --apply-to queues

    or set via rabbitmq.conf:

    classic_queue.default_version = 2

    GitHub issue: #3029

  • Quorum queues now support message TTL.

    GitHub issue: #3121

  • Reduced per-queue garbage collection.

    GitHub issue: #4110

  • Stream replication connections now adopt TLS settings configured for inter-node communication links.

    GitHub issue: #3553

  • Quorum queues now support two dead lettering 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

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

    Breaking change 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

  • Boot time definition sync now can be skipped if definition source (e.g. file or directory) contents
    have not changed:

    definitions.skip_if_unchanged = true
    
    definitions.import_backend = local_filesystem
    definitions.local.path = /path/to/definitions/defs.json

    GitHub issue: #4062

  • Classic mirrored queues peak eager sync throughput now can be limited.

    Contributed by @thuandb (AWS).

    GitHub issue: #3925

  • Optional queue arguments are now more strictly validated at queue
    declaration time, as are optional consumer arguments when new consumers subscribe.

    GitHub issue: #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

  • Queues can no longer be created in a vhost while deletion of that vhost is in progress

    Contributed by @tomyouyou.

    GitHub issue: #4260

  • rabbitmqctl encode/decode can now accept more values via standard input

    GitHub issue: #4258

  • rabbitmq_tracing now uses local time for timestamps

    GitHub issue: #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

  • 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

  • Inter-node message transfer is optimized for the case where a message is only routed to one queue.

    Contributed by @tomyouyou.

    GitHub issue: #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:

    definitions.import_backend = rabbit_definitions_import_our_custom_backend

    GitHub issue: #3311

  • Elixir 1.13 is now supported at build time.

    GitHub issue: #4108

Bug Fixes

This release includes all applicable bug fixes that shipped in 3.9.x releases.

  • Addressed a performance regression for large fanouts when streams were not enabled.

    GitHub issue: #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-ser...

Read more

RabbitMQ 3.9.15

13 Apr 12:50
a0adda2

Choose a tag to compare

RabbitMQ 3.9.15 is a maintenance release in the 3.9.x release series.

Please refer to the Upgrading to 3.9 section from v3.9.0 release notes if upgrading from a version prior to 3.9.0.

This release requires at least Erlang 23.2, and supports Erlang 24. RabbitMQ and Erlang/OTP Compatibility Matrix has more details on Erlang version requirements for RabbitMQ.

Changes Worth Mentioning

Release notes are kept under rabbitmq-server/release-notes.
Contributors are encouraged to update them together with their changes. This helps with release automation and a more consistent release schedule.

Core Server

Bug Fixes

  • 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

  • If a cluster that had streams enabled was upgraded with a jump of multiple
    patch releases, stream state could fail an upgrade.

    GitHub issue: #4510

  • Significantly faster queue re-import from definitions
    on subsequent node restarts. Initial definition import still takes
    the same amount of time as before.

    GitHub issue: #4538

  • When a policy contained keys unsupported by a particular queue
    type, and later updated or superseded by a higher priority policy,
    effective optional argument list could become inconsistent (policy
    would not have the expected effect).

    Kudos to @jaroslaw-bochniak for providing very detailed reproduction steps.

    GitHub issue: #4463

  • Priority queues could run into an exception in some cases.

    Contributed by @luos and @olikasg.

    GitHub issue: #4405

  • Maintenance mode could run into a timeout during queue leadership transfer.

    Contributed by @felixhuettner.

    GitHub issue: #4468

Prometheus Plugin

Bug Fixes

  • Prometheus collector could run into an exception early on node's
    schema database sync.

    GitHub issue: #4376

Management Plugin

Bug Fixes

  • Connection data transfer rate units were incorrectly displayed when
    rate was less than 1 kiB per second.

    Contributed by @zgabi.

    GitHub issue: #4523

  • rabbitmqadmin now correctly loads TLS-related keys from its configuration file.

    Contributed by @fwolfsjaeger.

    GitHub issue: #4408

  • Corrected a help message for node memory usage tool tip.

    Contributed by @etc-crontab.

    GitHub issue: #4493

LDAP Plugin

Enhancements

  • More Erlang 24.3's eldap library compatibility improvements.

    GitHub issue: #4448

Dependency Upgrades

Source Code Archives

To obtain source code of the entire distribution, please download the archive named rabbitmq-server-3.9.15.tar.xz
instead of the source tarball produced by GitHub.

RabbitMQ 3.8.29

13 Apr 09:30
5a98b64

Choose a tag to compare

RabbitMQ 3.8.29

RabbitMQ 3.8.29 is a maintenance release.
All users are recommended to upgrade to this release.

Obtaining Packages

RabbitMQ releases are distributed via GitHub, Cloudsmith,
and PackageCloud.

Erlang/OTP Compatibility Notes

This release requires Erlang 23.2 and supports Erlang 24.

Provisioning Latest Erlang Releases explains
what package repositories and tools can be used to provision modern Erlang versions.

Upgrade and Compatibility Notes

See the Upgrading guide for general documentation on upgrades and
RabbitMQ change log for release notes of other releases.

If upgrading from a 3.7.x release, see 3.8.0 release notes
upgrade and compatibility notes first.

If upgrading from a 3.6.x or older release series, first upgrade
to 3.7.27 and then to this version.

Getting Help

Any questions about this release, upgrades or RabbitMQ in general are welcome on the RabbitMQ mailing list
and RabbitMQ community Slack.

Changes Worth Mentioning

Release notes are kept under rabbitmq-server/release-notes.
Contributors are encouraged to update them together with their changes. This helps with release automation and more
consistent release schedule.

Core Server

Enhancements

  • Significantly faster queue re-import from definitions
    on subsequent node restarts. Initial definition import still takes
    the same amount of time as before.

    GitHub issue: #4538

Bug Fixes

  • Maintenance mode could run into a timeout during queue leadership transfer.

    Contributed by @felixhuettner.

    GitHub issue: #4468

Management Plugin

Bug Fixes

  • Connection data transfer rate units were incorrectly displayed when
    rate was less than 1 kiB per second.

    Contributed by @zgabi.

    GitHub issue: #4523

  • Corrected a help message for node memory usage tool tip.

    Contributed by @etc-crontab.

    GitHub issue: #4493

LDAP Plugin

Enhancements

  • More Erlang 24.3's eldap library compatibility improvements.

    GitHub issue: #4448

Dependency Upgrades

None in this release.

Source Code Archives

To obtain source code of the entire distribution, please download the archive named rabbitmq-server-3.8.29.tar.xz
instead of the source tarball produced by GitHub.

RabbitMQ 3.10.0-rc.3

06 Apr 23:53
3f7d7c3

Choose a tag to compare

RabbitMQ 3.10.0-rc.3 Pre-release
Pre-release

Highlights

This release improves efficiency of quorum and classic queues. Per-queue memory footprint was reduced for some
workloads.

It also introduces message TTL support for quorum queues.

Obtaining Packages

RabbitMQ releases are distributed via GitHub, Cloudsmith, and PackageCloud.

Erlang/OTP Compatibility Notes

This release requires Erlang 23.2 or later. Erlang 24 is recommended as it offers 20%-50% throughput improvements for many workloads.

Provisioning Latest Erlang Releases 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 for documentation on upgrades and RabbitMQ change log 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 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.

Changes Worth Mentioning

Release notes are kept under rabbitmq-server/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

  • 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:

    rabbitmqctl set_policy cq_version "^cq\." '{"queue-version": 2}' --priority 1 --apply-to queues

    or set via rabbitmq.conf:

    classic_queue.default_version = 2

    GitHub issue: #3029

  • Quorum queues now support message TTL.

    GitHub issue: #3121

  • Reduced per-queue garbage collection.

    GitHub issue: #4110

  • Stream replication connections now adopt TLS settings configured for inter-node communication links.

    GitHub issue: #3553

  • Quorum queues now support two dead lettering 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

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

    Breaking change 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

  • Boot time definition sync now can be skipped if definition source (e.g. file or directory) contents
    have not changed:

    definitions.skip_if_unchanged = true
    
    definitions.import_backend = local_filesystem
    definitions.local.path = /path/to/definitions/defs.json

    GitHub issue: #4062

  • Classic mirrored queues peak eager sync throughput now can be limited.

    Contributed by @thuandb (AWS).

    GitHub issue: #3925

  • 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

  • Queues can no longer be created in a vhost while deletion of that vhost is in progress

    Contributed by @tomyouyou.

    GitHub issue: #4260

  • rabbitmqctl encode/decode can now accept more values via standard input

    GitHub issue: #4258

  • rabbitmq_tracing now uses local time for timestamps

    GitHub issue: #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

  • 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

  • Inter-node message transfer is optimized for the case where a message is only routed to one queue.

    Contributed by @tomyouyou.

    GitHub issue: #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:

    definitions.import_backend = rabbit_definitions_import_our_custom_backend

    GitHub issue: #3311

  • Elixir 1.13 is now supported at build time.

    GitHub issue: #4108

Bug Fixes

This release includes all applicable bug fixes that shipped in 3.9.x releases.

  • Addressed a performance regression for large fanouts when streams were not enabled.

    GitHub issue: #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

  • Channels could confirm a subset of messages published as mandatory in some cases.

    GitHub issue: #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

  • Exclusive queues are always placed on local node.

    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

Prometheus Plugin

Bug Fixes

  • Prometheus collector could run into an exception early on node's
    schema database sync.

    GitHub issue: #4376

Management Plugin

Enhancements

  • idle_since field now uses RFC 3339 format.

    Breaking change This is a *potentially breaking change...

Read more