RabbitMQ 4.3.7 is a maintenance release in the 4.3.x release series.
It is strongly recommended that you read 4.3.0 release notes
in detail if upgrading from a version prior to 4.3.0.
Minimum Supported Erlang Version
The minimum supported Erlang version for this release series is 27.0.
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
-
The
basic.cancelnotification sent on a consumer delivery timeout
now properly clears consumer state even if the client does not respond withbasic.cancel-ok.Most clients do not respond, and nodes older than
4.3.0do not accept a client-sent
basic.cancel-okat all. The server now advertises whether one is supported, and a short timeout
removes the consumer if the client never responds.A new
rabbitmq.confsetting controls what happens on such a timeout:# notify_consumer (the default) sends basic.cancel to clients that support # the consumer_cancel_notify capability and closes the channel for others # close_channel always closes the channel, which is the pre-4.3.0 behavior consumer_timeout_response = notify_consumer
GitHub issue: #17734
-
Classic queue expiration (
x-expires) timestamps were lost on node restart, so the queue
TTL timer did not fire when it was supposed to if the TTL outlived the restart. -
Routing to queues now handles concurrent queue deletion gracefully in more places, avoiding
confusing (and also non-actionable) exceptions.This also avoids unnecessary publisher confirm noise, most visible with transient exclusive
queues bound to a topic exchange. -
A quorum queue declaration that timed out waiting for a remote Khepri projection left
the queue metadata behind and prevented a retry with the same name.Contributed by @chenshi5012.
GitHub issue: #17550
-
Message conversion between AMQP 1.0 and AMQP 0-9-1 no longer fails on AMQP 1.0 values
that AMQP 0-9-1 cannot represent.GitHub issue: #17536
-
Definition import now rejects a binding with an unrecognised
destination_type.GitHub issue: #17587
-
AMQP 0-9-1 content headers are validated more strictly.
GitHub issue: #17697
Enhancements
-
ssl_options.supported_groupscan now be used inrabbitmq.confto restrict
the named groups offered for TLS 1.3 key exchange.GitHub issue: #17555
CLI Tools
Enhancements
-
CLI commands that accept sensitive values as interactive input now suppress terminal echoing
where possible. This behavior is specific to Erlang 28 and 29.GitHub issue: #17585
Management Plugin
Bug Fixes
-
Pagination bug fixes for stream connections.
-
A
404for a virtual host the user has no permissions on is now identical to the404for
a virtual host that does not exist.GitHub issue: #17540
-
The OAuth 2 token proxy responded with a
500to some malformed JSON documents.GitHub issue: #17646
-
The default
Content-Security-Policyvalue now includesbase-uri 'none'.GitHub issue: #17615
Enhancements
-
AMQP 1.0 consumers now link directly to their connection in the management UI.
Shovel Plugin
Bug Fixes
-
When the destination rejects a message, for example because the destination queue
hasx-overflowset toreject-publishand has reached its maximum length, the shovel
now returns the message to the source queue as a failed delivery. A quorum source queue
therefore dead-letters the message once it exceeds the delivery limit,
instead of redelivering it to the shovel over and over (a regression in4.3.0).With an AMQP 1.0 source, such a message used to be dead-lettered on the first rejection.
Now this happens once it exceeds the delivery limit. A classic source queue has no
delivery limit, so the message is returned to it until the destination accepts it.GitHub issue: #17794
-
A shovel with an AMQP 1.0 destination did not settle a message at the source when
the destination rejected or released it, and eventually stopped forwarding messages.GitHub issue: #17794
-
A shovel with an AMQP 1.0 source could restart and forward some messages twice when
the destination confirmed messages out of order.GitHub issue: #17794
-
A shovel with an AMQP 1.0 source could settle messages incorrectly after more than
4 billion deliveries. With a local destination, it could acknowledge a message at the
source before the destination confirmed it.GitHub issue: #17794
-
The AMQP 0-9-1 shovel now ignores publisher confirms for unknown delivery tags.
Federation Plugins
Bug Fixes
-
Federation links now ignore publisher confirms for unknown delivery tags.
-
An exchange federation link now handles
amqp_connection:open_channel/1returningclosing
instead of{error, Reason}.GitHub issue: #17655
MQTT Plugin
Bug Fixes
-
QoS 0 consumer queue deletion now retries in more scenarios.
GitHub issue: #17515
JMS Topic Exchange Plugin
Bug Fixes
-
Message selectors with arithmetic expressions now validate numerical arguments more thoroughly.
GitHub issue: #17613
Erlang AMQP 0-9-1 Client
Enhancements
-
The client now responds to a server-sent
basic.cancelwithbasic.cancel-okonly when the server
advertises support for it.GitHub issue: #17734
-
The
auth_mechanismquery parameter of an AMQP 0-9-1 URI is now restricted to
the mechanisms the client actually supports (plain,amqplain,external,
crdemo), and an unsupported value is now rejected when the URI is parsed
rather than when the connection is established. This also applies to the
Shovel and federation plugins, which parse URIs the same way.GitHub issue: #17466
-
Likewise, the
verifyquery parameter of an AMQP 0-9-1 URI now only accepts
verify_peerorverify_none, and an unsupported value is rejected when the
URI is parsed rather than when the TLS connection is established.GitHub issue: #17466
Erlang AMQP 1.0 Client
Enhancements
-
Connection configuration now accepts a
connect_timeout, applied to the socket
connect and, for TLS-enabled connections, to the TLS handshake as well.Contributed by @arrangabriel.