RabbitMQ 4.1.4
is a maintenance release in the 4.1.x
release series.
It is strongly recommended that you read 4.1.0 release notes
in detail if upgrading from a version prior to 4.1.0
.
Minimum Supported Erlang Version
RabbitMQ and Erlang/OTP Compatibility Matrix has more details on Erlang version requirements for RabbitMQ.
Nodes will fail to start on older Erlang releases.
Changes Worth Mentioning
Release notes can be found on GitHub at rabbitmq-server/release-notes.
Core Server
Bug Fixes
-
default_password
,ssl_options.password
now can tell between a generated random password
value and an encrypted value better.Encrypted values must be prefixed with
encrypted:
. All other values, including
generated passwords that contain a colon (:
), will be considered non-encrypted ones.GitHub issue: #14365
-
Import of definition files that contained topic exchange permissions failed.
GitHub issue: #14409
Enhancements
-
When a configured authentication or authorization backend comes from a known
plugin but the plugin is not enabled, the node will now refuse to start.Previously the node would boot but client connections would fail because
of the missing backend modules. -
Similarly to the number of queues and virtual hosts, it is now possible
to configure a limit on the cluster-wide number of exchanges that applications
can create:# Applications won't be able to decalre more than 200 exchanges # (including the protocol-standard pre-declared ones) in the cluster cluster_exchange_limit = 200
The setting must be set to the same value on all cluster nodes.
As with other limits, the goal is to introduce a guard against applications
that leak resources.GitHub issue: #14339
-
In some environments, the use of load balancers is mandated and therefore
Local Random exchanges cannot be used.A new setting,
exchange_types.local_random.enabled
, can be used to explicitly disable the local random exchange type,
returning an error to the clients that try to declare such an exchange:# use in environments where the locality requirements of the local random exchange type cannot # be satisfied exchange_types.local_random.enabled = false
GitHub issue: #14363
-
RABBITMQ_MAX_OPEN_FILES
is a new environment variable supported by therabbitmq-server
startup script on Linux, macOS and BSD family operating systems.It does not replace the standard mechanisms of increasing the maximum allowed
file handle limit for the node. However, it can be useful in environments where the
soft (current) limit is meaningfully lower than the hard (maximum allowed per system configuration) limit, and the user can only control the soft limit.For example, this is the case in most hosted Kubernetes environments.
Stream Plugin
Bug Fixes
-
Stream client connections that authenticate using a JWT token (OAuth 2) have
to periodically renew their JWT tokens. Should such an update fail,
the RabbitMQ Stream Protocol connection will be immediately closed.In addition, stream connections now verify that the newly obtained JWT
token still grants access to the virtual host the client is connected to. -
If a Single Active Consumer could not leave its SAC group because the stream
coordinator was not available, the operation will now be retried a few times
before reporting a failure back to the client.GitHub issue: #14341
-
Advertised TLS hostname setting value was not passed on to the stream protocol
metadata frame.GitHub issue: #14345
CLI TOols
Bug Fixes
-
rabbitmqctl cluster_status --formatter=json
double converted therunning_nodes
field.GitHub issue: #14382
Shovel Plugin
Bug Fixes
-
rabbitmqctl shovel_status
command now handles the presence of metrics.GitHub issue: #14298
-
AMQP 1.0 shovels now perform stricter validation on the
src-delete-after
values.
They support a narrower set of values compared to their AMQP 0-9-1 counterparts
but shovel definition validation did not account for that difference.GitHub issue: #14420
Dependency Changes
Source Code Archives
To obtain source code of the entire distribution, please download the archive named rabbitmq-server-4.1.4.tar.xz
instead of the source tarball produced by GitHub.