RabbitMQ 4.3.5
- Authentication events are now logged under a new logging category, user, with successful logins at the info level and failed login attempts at the warning level
- rabbitmqctl hash_password now supports more password hashing functions
- Before a stream client connection completes authentication and authorization, the server now enforces a low frame_max ceiling with a default of 8192 bytes, configurable via the stream.initial_frame_max setting
- New setting stream.max_uncompressed_sub_entry_batch_size bounds the declared uncompressed size of a published sub-entry batch with a default of 67108864 bytes
- With direct reply-to, a message routed to multiple targets that resolved to the same process could be delivered to it more than once
- Quorum queue recovery from a recovery checkpoint could leave a part of the queue's internal state only partially initialized
- In clusters that run a mix of 4.2.x and 4.3.x nodes during a rolling upgrade, local quorum queue queries now fall back to the previous state machine version instead of failing
- A malformed AMQP 1.0 frame now results in a framing error returned to the client instead of an exception
- The AMQP 1.0 message parser now validates message sections more strictly and decodes certain types of arrays more efficiently
- Topic exchanges now limit the number of multi-segment wildcards a binding key can use to two
- When connection credentials are refreshed, the user's tags are now updated instead of being carried over from the original state
- Definition import from an HTTPS endpoint no longer fails when a password-protected TLS client certificate is used
- The AMQP 1.0 Erlang client no longer logs an exception when a link is already detached
- A stream protocol connection that attempts to exceed 256 publishers or 256 subscriptions is now rejected early with a clear error
- HTTP API endpoints that accept a node name now validate that the target node is a cluster member
- The management UI no longer displays certain alert messages twice
From RabbitMQ
RabbitMQ 4.3.5 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
-
With direct reply-to, a message routed to multiple targets that resolved to the same process could be delivered to it more than once.
GitHub issue: #17071
-
Quorum queue recovery from a recovery checkpoint could leave a part of the queue's internal state only partially initialized.
GitHub issue: #17012
-
In clusters that run a mix of
4.2.xand4.3.xnodes during a rolling upgrade, local quorum queue queries now fall back to the previous state machine version instead of failing.GitHub issue: #17128
-
A malformed AMQP 1.0 frame now results in a framing error returned to the client instead of an exception.
GitHub issue: #17101
-
The AMQP 1.0 message parser now validates message sections more strictly and decodes certain types of arrays more efficiently.
GitHub issue: #17049
-
Topic exchanges now limit the number of multi-segment (
#) wildcards a binding key can use to two. The#wildcard is meant to be used as the final segment, that is, just once.GitHub issue: #17039
-
When connection credentials are refreshed (for example, when an OAuth 2 token is renewed), the user's tags are now updated instead of being carried over from the original state.
GitHub issue: #17029
-
Definition import from an HTTPS endpoint no longer fails when a password-protected TLS (HTTPS) client certificate is used.
Contributed by @Pyolar.
GitHub issue: #16973
-
The AMQP 1.0 Erlang client no longer logs an exception when a link is already detached. Workloads that use short lived links could produce a substantial amount of log noise.
GitHub issue: #17124
Enhancements
-
Authentication events are now logged under a new logging category,
user. Successful logins are logged at theinfolevel, failed login attempts at thewarninglevel.GitHub issue: #16907
CLI Tools
Enhancements
-
rabbitmqctl hash_passwordnow supports more password hashing functions.
Stream Plugin
Bug Fixes
-
A stream protocol connection can have at most 256 publishers and 256 subscriptions, a limit that comes from the protocol's wire format. Attempts to go over these limits are now rejected early with a clear error instead of failing later with an unrelated one.
GitHub issue: #17123
Enhancements
-
Before a stream client connection completes authentication and authorization (that is, before a successful
open), the server now enforces a lowframe_maxceiling instead of the full configured value. The default, 8192 bytes, is high enough to accommodate realistic JWT tokens used with SASL PLAIN authentication, and mirrors a mechanism already in place for AMQP 0-9-1 connections. It can be adjusted with the newstream.initial_frame_maxsetting.GitHub issue: #17053
-
New setting:
stream.max_uncompressed_sub_entry_batch_size. It bounds the declared uncompressed size of a published sub-entry batch, and defaults to 67108864 (64 MiB), the same default already used by the Java client'smaxUncompressedSubEntryBatchSize. The broker and any client publishing to it should be configured with the same value.GitHub issue: #17103
Management Plugin
Bug Fixes
-
HTTP API endpoints that accept a node name, including the federation and tracing related ones, now validate that the target node is a cluster member.
-
The management UI no longer displays certain alert messages twice.
GitHub issue: #17127
Enhancements
-
When
management.credential_encryption_secretis configured, the management UI login endpoint (POST /api/login) returns client credentials encrypted usingAES-256-GCMwith a key derived from the configured secret, and returns the ciphertext as an opaque token prefixed withrmqe.. The browser stores this token and presents it on all subsequent requests using theAuthorization: Bearer rmqe.<token>header.The secret MUST be identical on every node in the cluster.
Important: during a rolling cluster upgrade, enable this feature only after all nodes have been upgraded. This is particularly important for clusters behind a load balancer: nodes that run older versions will not recognize the encrypted tokens and will reject the requests, unexpectedly logging users out.
GitHub issue: #16705
-
GET /api/definitionsnow supports conditional requests (ETag).The
ETagvalue is derived from the metadata store Raft index, so the tag will naturally change as the metadata store serves writes. -
The
Referrer-PolicyHTTP response header can now be configured with themanagement.headers.referrer_policysetting.GitHub issue: #16893
-
When
management.http.hide_allow_headeris set totrue, theAllowHTTP response header is omitted from all responses except405 Method Not Allowedones, where it is required by the HTTP specification. This avoids disclosing the supported HTTP methods to clients.GitHub issue: #16893
-
When
management.definitions.require_json_extensionis set totrue, both the management UI and the HTTP API will reject definition upload where the file does not have a.jsonextension. The setting defaults tofalse. Regardless of this setting, the server always validates that the uploaded content is valid JSON before importing it.GitHub issue: #16946
OAuth 2 AuthN and AuthZ Backend Plugin
Bug Fixes
-
When RabbitMQ is behind a proxy that terminates TLS, the OAuth 2 login flow now honors the
X-Forwarded-Proto,X-Forwarded-HostandX-Forwarded-Portheaders when rewriting the token endpoint URL in the OpenID discovery payload.GitHub issue: #17153
Shovel Plugin
Bug Fixes
-
Reduced log noise.
GitHub issue: #17028
-
Static shovels that do not define any
declarationsfailed to start. -
When a topology setup failure stops a shovel worker, the specific reason is now reported instead of a generic one.
GitHub issue: #17135
-
The Shovel HTTP API now processes shovel URIs the same way the federation plugin processes its upstream URIs.
GitHub issue: #17134
Enhancements
-
Shovel TTL: dynamic shovels support a new setting,
src-delete-after-duration, that instructs the shovel to self-delete after at least the specified duration.Contributed by @michalovits.
Federation Plugin
Bug Fixes
-
A malformed upstream URI could prevent a federation link from starting even when other, well-formed URIs were available. All candidate URIs are now tried.
Contributed by @sauravonwww.
GitHub issue: #17046
MQTT Plugin
Bug Fixes
-
Packets split across many network fragments are now parsed more efficiently.
GitHub issue: #17093
-
MQTT 5.0 properties are now parsed strictly: a property that is not valid for a given packet type is rejected.
GitHub issue: #17039
-
A
Receive Maximumvalue of 0, prohibited by the MQTT 5.0 specification, is now rejected.GitHub issue: #17035
STOMP Plugin
Bug Fixes
-
Frame size limits are now enforced earlier in the connection lifecycle.
GitHub issue: #17116
Web STOMP Plugin
Bug Fixes
-
The accumulated frame size is now checked against
max_frame_sizeafter a connection has authenticated, matching the behavior of "regular" STOMP connections.GitHub issue: #17065
Consistent Hash Exchange Plugin
Bug Fixes
-
An edge case in bucket selection is now handled gracefully.
GitHub issue: #17081