Skip to content
Choose a tag to compare

RabbitMQ 3.8.4

@pivotal-rabbitmq-ci pivotal-rabbitmq-ci released this
· 33224 commits to master since this release
Choose a tag to compare

RabbitMQ 3.8.4

RabbitMQ 3.8.4 is a maintenance release. It focuses on bug fixes and usability
improvements. etcd peer discovery plugin includes potentially breaking changes which are covered in detail below.

This is the first release to be fully compatible with Erlang 23.

Erlang/OTP Compatibility Notes

This release requires Erlang/OTP 21.3 or later.
22.3 or 23.0 releases are recommended.

This is the first release to officially support Erlang 23. Compared to 3.8.3, which
generally works as expected on Erlang 23, Prometheus monitoring plugin had to
be adapted to support a memory allocator metric format that has changed compared to
earlier Erlang releases.

There is one remaining known Erlang 23 incompatibility: rabbitmq-diagnostics observer will fail on Erlang 23.
This will be addressed in a future release.
The root cause is the same memory allocator metric change.

Provisioning Latest Erlang Releases explains
what package repositories and tools can be used to provision latest patch versions of Erlang 22.3.x.

Upgrade and Compatibility Notes

Raft Segment File Format Change

In earlier 3.8.x versions, Raft log segment files were unintentionally limited to 4 GiB,
which can be problematic for environments that use quorum queues and medimum to large message

This releases removes the limitation by changing the segment file on-disk format.
While no action is required for upgrading to 3.8.4, operators should keep in mind
that segment files produced by 3.8.4 nodes won't be readable by earlier versions.
In other words, this release does not support downgrading to earlier 3.8.x versions.

Custom Prefixless Node Name

Environments that override node name using NODENAME in rabbitmq-env.conf may have to
also define RABBITMQ_NODENAME in the same file for CLI tools to pick the value up:

# how node name is typically overridden in rabbitmq-env.conf[.bat] files
# for CLI tools in 3.8.4, otherwise not necessary

This behaviour change compared to earlier 3.8.x version was not intentional and was
corrected for 3.8.5.

Alternatively, it is possible to provide target node name using a command line flag:

rabbitmq-diagnostics -n rabbit@custom.hostname status

Upgrade Doc Guides and Change Log

See 3.8.0 release notes upgrade and compatibility notes first if upgrading from an earlier release.

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

Upgrading to Erlang 21.x or Later Versions

When upgrading to this release from 3.7.6 or an older version, extra care has to be taken.

Since CLI tools from RabbitMQ releases older than 3.7.7 will fail on Erlang 21 or later, RabbitMQ must be upgraded at the same time as Erlang.
Alternatively the node can be upgraded to 3.7.18 first, then Erlang 22.x or 23.x, then RabbitMQ to most recent
3.8.x release.

Getting Help

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

Changes Worth Mentioning

Core Server

Bug Fixes

  • A node recovering a large disk backlog did not throttle its recovery activity, potentially
    using large amounts of memory at peak during recovery.

    GitHub issue: rabbitmq/rabbitmq-server#2254

  • Raft log segment files were unintentionally limited to 4 GiB in size, which could result
    in failing log flush operations in environments where medium and large messages were published to
    quorum queues.

    This problem is addressed by a change to the on disk format of Raft log segment files.
    The change is irreversible, meaning that there is no downgrade path from 3.8.4 to earlier releases.

    GitHub issue: rabbitmq/ra#176

  • A reached delivery limit on a quorum queue could result in an exception for polling (basic.get) consumers.

    GitHub issue: rabbitmq/rabbitmq-server#2330

  • A publish to a quorum queue that happened to not have an elected leader failed with an exception.
    Such operations are generally expected to be retried by channels.

    GitHub issue: rabbitmq/rabbitmq-server#2295

  • Separate authN and authZ backends did not behave as expected when rabbitmq_auth_backend_cache was enabled.

    GitHub issue: rabbitmq/rabbitmq-server#2322

  • Handle a condition where epmd connection was closed during node registration.

    GitHub issue: rabbitmq/rabbitmq-server#2332

  • Registering a quorum queue consumer did not result in a consumer.created event like it would
    for classic queues.

    GitHub issue: rabbitmq/rabbitmq-server#2341


CLI Tools


  • New rabbitmq-upgrade commands: await_online_quorum_plus_one and await_online_synchronized_mirror.
    The commands will wait for a safe quorum of nodes (quorum queues) or a synchronised master replica (classic mirrored queues)
    to be or come online within a period of time.

    # Exits with a non-zero exit code if there is not a quorum + 1 of nodes online for all
    # quorum queues within 120 seconds (default timeout)
    rabbitmq-upgrade await_online_quorum_plus_one
    # Will wait for a quorum + 1 of nodes to be online for all quorum queues for 0 seconds...
    # The timeout can be adjusted via the -t flag:
    rabbitmq-upgrade await_online_quorum_plus_one -t 60
    # Will wait for a quorum + 1 of nodes to be online for all quorum queues for 60 seconds...
    # There is an equivalent command for classic mirrored queues
    rabbitmq-upgrade await_online_synchronized_mirror

    GitHub issue: rabbitmq/rabbitmq-cli#409

  • New rabbitmq-diagnostics command: os_env

    GitHub issue: rabbitmq/rabbitmq-cli#412

Prometheus Plugin


Federation Plugin

Bug Fixes

  • Credential obfuscation now uses the same shared secret
    on all nodes to make sure that a link running on node A can be restarted by a command against node B.
    Previously each node used its own generated secret for obfuscation, which means certain operations
    on links originated on other nodes were not possible.

    GitHub issue: rabbitmq/rabbitmq-server#2351


  • Internal resources cleanup is now more selective on abnormal link termination. A new upstream parameter, resource-cleanup-mode,
    can be set to "never" used to prevent internal queues from being deleted by exchange federation links on termination.
    Use this when data safety is more important than protection from resource leaks. It then will be up to the operator to make
    sure such resources are periodically deleted or use a suitable TTL.

    GitHub issue: rabbitmq/rabbitmq-federation#105

  • SNI is now enabled by default for TLS-enabled connections.

    Contributed by Carl Hörberg (CloudAMQP).

    GitHub issue: rabbitmq/rabbitmq-erlang-client#132

Shovel Plugin

Bug Fixes

  • Credential obfuscation now uses the same shared secret
    on all nodes to make sure that a shovel running on node A can be restarted by a command against node B.
    Previously each node used its own generated secret for obfuscation, which means certain operations
    on shovels originated on other nodes were not possible.

    GitHub issue: rabbitmq/rabbitmq-server#2351

  • Shovels are now correctly removed even when deletion commands are executed against a different node
    (not the one on which the target Shovel has been created).

    GitHub issue: rabbitmq/rabbitmq-shovel#68

  • More negative AMQP 1.0 endpoint connection responses are handled.

    Contributed by Renaud @bougueil Mariana.

    GitHub issue: rabbitmq/rabbitmq-amqp1.0-client#48

  • Messages forwarded from an AMQP 0-9-1 source to an AMQP 1.0 destination now propagates more
    message properties.

    GitHub issue: rabbitmq/rabbitmq-shovel#70

  • Pre-3.7 delete-after Shovel property is now considered as well as the new src-delete-after property.

    GitHub issue: rabbitmq/rabbitmq-shovel#72


Management Plugin


  • More frequent garbage collection by stats DB cache processes in environments where HTTP API queries produced
    large data sets.

    GitHub issue: rabbitmq/rabbitmq-management#788

  • rabbitmqadmin CLI switches now take precedence over config file values. This is more typical
    for command line tools.

    GitHub issue: rabbitmq/rabbitmq-management#804

  • rabbitmqadmin binding deletion now defaults to the same property key value as binding creation.

    Contributed by Ivan Kaloyanov.

    GitHub issue: rabbitmq/rabbitmq-management#779

Bug Fixes

etcd Peer Discovery Plugin

This release effectively replaces the etcd-based peer discovery plugin with a new one which
uses etcd v3 API and a different API client.
etcd v2 API has been effectively deprecated and requires extra effort to enable with the latest etcd release,
so this was treated as a medium severity bug and ships in a patch release.

There are several new features that come with this new client. Existing already formed clusters won't have to
change anything in the short term as peer discovery only runs during cluster formation.
All configuration keys of the original plugin are still accepted by the plugin, and most will have
the expected or semantically similar effect.

When provisioning new clusters, etcd 3.4+ will now be required.


  • The plugin now uses an etcd v3 API client and v3 gRPC-based API. This includes using a forward-compatible API version,
    natively-provided endpoint for locking instead of reinventing one, and other improvements listed below.
    It also means that etcd 3.4+ is now required by the plugin.

    Unless specified otherwise, all other configuration settings of the original plugin are still supported.

    rabbitmq-autocluster-era environment variable-based configuration of the plugin has been removed. Use the config
    file-based one instead.

    cluster_formation.etcd.scheme configuration key won't fail validation but will no longer have any effect.
    cluster_formation.etcd.key_prefix will be used but only after the hardcoded /rabbitmq/discovery
    and /rabbitmq/locks prefixes. Having a predictable key prefix is more important in this version of the etcd API.

    GitHub issue: rabbitmq/rabbitmq-peer-discovery-etcd#22

  • Multiple etcd endpoings now can be specified as connection candidates. Previously used endpoint configuration keys, and cluster_formation.etcd.port, are still supported and added to the final list of

    GitHub issue: rabbitmq/rabbitmq-peer-discovery-etcd#7

  • Support for TLS-enabled connections to etcd.

    GitHub issue: rabbitmq/rabbitmq-peer-discovery-etcd#24

  • Support for etcd authentication.

    GitHub issue: rabbitmq/rabbitmq-peer-discovery-etcd#6

Consul Peer Discovery Plugin

Bug Fixes

  • In case CONSUL_PORT is set to a blank string, the plugin will fall back to the default port value
    instead of failing with an exception. Note that the use of environment variables over config file
    keys is highly discouraged and will be removed in a future version.

    GitHub issue: rabbitmq/rabbitmq-peer-discovery-consul#41

LDAP Plugin


OAuth 2.0 Plugin


Trust Store Plugin

Bug Fixes

Dependency Upgrades

Source code archives

Warning: The source code archive provided by GitHub only contains the source of the broker, not the plugins or the client libraries.
Please download the archive named rabbitmq-server-3.8.4.tar.xz.