RabbitMQ 3.9.21
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 can be found on GitHub at rabbitmq-server/release-notes.
Core Server
Enhancements
- Optimization: internal message GUID is no longer generated for quorum queues and streams, as they
are specific to classic queues.GitHub issue: #5005
- Two more AMQP 1.0 connection lifecycle events are now logged.
GitHub issue: #4984
- TLS configuration for inter-node stream replication connections now can
use function references and definitions.GitHub issue: #4991
- Stream protocol connection logging is now less verbose.
GitHub issue: #5039
- Max stream segment size is now limited to 3 GiB to avoid a potential stream position overflow.
GitHub issue: #5035
- Logging messages that use microseconds now use “us” for the SI symbol to be compatible with more
tools.GitHub issue: #5127
Bug Fixes
- Channels on connections to mixed clusters that had 3.8 nodes in them could run into
an exception.GitHub issue: #5141
- Inter-node cluster link statistics did not have any data when TLS was enabled for them.
GitHub issue: #4981
- Quorum queues now correctly propagate errors when a
basic.get
(polling consumption) operation hits
a timeout.Contributed by Ayanda @Ayanda-D Dube.
GitHub issue: #5109
- Stream consumer that used AMQP 0-9-1 instead of a stream protocol client, and disconnected,
leaked a file handle.GitHub issue: #5088
- Max frame size and client heartbeat parameters for RabbitMQ stream clients were not correctly
set when taken fromrabbitmq.conf
.GitHub issue: #5136
- Removed a duplicate exchange decorator set operation.
Contributed by Péter @gomoripeti Gömöri.
GitHub issue: #4964
Consistent Hashing Exchange Plugin
Bug Fixes
- Node restarts could result in a hashing ring inconsistency.
This required a potentially breaking change: this exchange type
now only allows for one binding between an exchange and a queue (or another exchange).
All subsequent binding operations between them will be ignored, so “first write wins”.This is a natural topology for this plugin, and enforcing it helps avoid a set of
potential issues with concurrent node restarts and client operations that affect
consistent hash ring state.GitHub issue: #3386
Consul Peer Discovery Plugin
Enhancements
- Consul peer discovery now supports client-side TLS options, much like its Kubernetes and etcd peers.
cluster_formation.consul.scheme = https # this assumes that Consul uses port 8501 for HTTPS clients cluster_formation.consul.port = 8501 cluster_formation.consul.ssl_options.cacertfile = /path/to/consul/generated/ca_certificate.pem cluster_formation.consul.ssl_options.certfile = /path/to/client/certificate.pem cluster_formation.consul.ssl_options.keyfile = /path/to/client/client_key.pem
GitHub issue: #5116
Source Code Archives
To obtain source code of the entire distribution, please download the archive named rabbitmq-server-3.9.21.tar.xz
instead of the source tarball produced by GitHub.