Repository navigation
Releases
RabbitMQ 4.3.7
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.
Dependency Changes
RabbitMQ 4.4.0
RabbitMQ 4.4.0 is a new feature release.
Breaking Changes and Compatibility Notes
-
The following AMQP 0-9-1 headers are no longer parsed:
x-amqp-1.0-properties x-amqp-1.0-app-properties x-amqp-1.0-message-annotations x-amqp-1.0-footerRabbitMQ 3.13 and earlier used them to carry the AMQP 1.0 sections of a
message received over AMQP 1.0. Nothing has written them since 4.0, so only
a message stored by a 3.13 or earlier node and not read since carries them.
Such a message is still delivered, with these headers converted like any
otherx-header rather than restored as AMQP 1.0 sections. -
Likewise, the
x-basic-delivery-mode,x-basic-priorityand
x-basic-expirationmessage annotations are no longer parsed. They were
written before 4.0 when an AMQP 0-9-1 message was encoded as AMQP 1.0 for a
stream, so only a stream entry written by a 3.13 or earlier node carries
them, and reading it no longer restores those three properties. -
OpenID Connect discovery responses are now validated more strictly. A
deployment whose identity provider serves non-HTTPS (http://) endpoints,
or whoseissuerclaim does not match the discovery endpoint used to
retrieve it, will fail discovery validation after the upgrade.This is known to affect Cloud Foundry UAA, whose issuer is its token endpoint URL
rather than a prefix of its discovery endpoint.Set
auth_oauth2.discovery.verify_issuerand/or
auth_oauth2.discovery.verify_https_endpointstofalsebefore upgrading
installations with non-compliant IdPs such as Cloud Foundry UAA.See Discovery Payload Validation
for details on validation rules and configuration options. -
GET /api/auth/hash_password/{password}was replaced with another endpoint,POST /api/auth/hash_password.
The new endpoint consumes a POST body with JSON document with one key{"password": "..."}
Changes Worth Mentioning
Core Server
Enhancements
-
This version fully supports Erlang 28 and 29 series for both new clusters
and rolling upgrade scenarios. -
Quorum queues now support delayed messages.
A message with an
x-opt-delivery-timeannotation or header set to a future time,
in milliseconds since the Unix epoch, is routed and enqueued immediately but only
delivered to consumers once that time is reached.AMQP 1.0 clients set it as a message annotation, AMQP 0-9-1 clients as a
longheader.An AMQP 1.0 consumer can also delay redelivery of a message by setting
x-opt-delivery-timein the annotations of amodifiedoutcome.GitHub issue: #16583
-
AMQP 1.0 clients can now request sole (exclusive) ownership of a container ID.
In case of a conflict, the server either refuses the new connection or closes the existing one,
depending on what the client requested, per the AMQP 1.0 Connection Uniqueness
protocol extension.GitHub issue: #16669
-
A new, optional
x-name-prefixqueue argument sets the prefix used for a server-named
queue's generated name, capped at 64 bytes. The default prefix remains
amq.gen.This feature is specific to AMQP 0-9-1.
GitHub issue: #16233
-
The classic queue shared message store gained a new v2 on-disk file format (
.sqs).
New files are written in v2 automatically. Existing v1 files (.rdq) are left as-is.Note that a node with v2 files present cannot be downgraded to
4.3.xor earlier.GitHub issue: #17166
-
Classic queues now perform compaction more efficiently.
GitHub issue: #16194
-
x-modulus-hashexchange routing is now stable: assuming a topology that does not change,
messages carrying the same routing key are now routed to the same bound destination.Note: the exchange type has been moved from
rabbitmq_shardingto the core, so it is
now available even when said plugin is not enabled.GitHub issue: #15849
-
A change to the
delivery-limitpolicy key now takes effect for existing quorum queues.Previously the delivery limit could not be updated from a policy. Now quorum queues
reconfigure theirdelivery-limitvalue when a policy is added or updated.When the policy is removed the queue goes back to the default limit (
20).A negative policy value means "no limit".
GitHub issue: #16035
-
A passive declaration of a queue or an exchange (a check that it exists) requires any one of
theconfigure,writeorreadpermissions on that queue or exchange.This applies to
queue.declareandexchange.declarewithpassiveset totruein
AMQP 0-9-1, and to queue lookups in AMQP 1.0 management.GitHub issue: #16272
-
Reduce boot time of blank (brand new) nodes.
GitHub issue: #16479
-
Encrypted value support
for thedefinitions.https.urlkey inrabbitmq.conf.GitHub issue: #16632
-
Password salts for internal users are now generated using a cryptographically secure
pseudorandom number generator (CPRNG).GitHub issue: #16775
-
A topic exchange binding key can now contain at most two multi-segment (
#) wildcards.GitHub issue: #17039
-
Redeclaring a stream with an
x-max-agevalue that is equal to the existing one but written in
different units, for example1Das24h, is no longer rejected as having non-equivalent arguments. -
A stream can now start at an offset other than
0, set with the new
x-stream-initial-offsetoptional queue argument. While the stream is empty,
thefirstandnextoffset specifications resolve to this offset. The stream
protocol accepts the same value as thestream-initial-offsetargument of the
Createcommand.The initial offset is fixed when the stream is created, so there is no policy
for it, and redeclaring the stream with a different value is rejected.GitHub issue: #17300
-
Multiple stream coordinator efficiency improvements.
For example, the stream coordinator now retries failed stream member actions sooner, with
keeping a related stream partition process blocked for the retry delay.Failed operations are now retried after a short randomised delay, and actions that
failed because a node was down are retried when that node comes back.GitHub issue: #16515
-
Certain classic queue recovery scenarios now avoid a counterproductive timeout of 60s.
GitHub issue: #17733
-
Reduce CPU use of mostly idle quorum queues that do not have any queue decorators configured
(which is the common, baseline case). -
PBKDF2-HMAC-SHA256 now can be used for password hashing:
password_hashing_module = rabbit_password_hashing_pbkdf2_sha256GitHub issue: #17316
-
AMQP listeners can now bind to a Unix domain socket, using the same
listeners.tcp.*
settings as a TCP listener:listeners.tcp.1 = unix:/var/run/rabbitmq/rabbitmq.sock:0GitHub issue: #16963
-
connection_maxandchannel_maxwere renamed tomax_connectionsandmax_channels,
respectively, inrabbitmq.conf. The original names are still supported.GitHub issue: #16347
-
Messages are now converted from AMQP 0-9-1 to
AMQP 1.0 as a single data section, unless its payload consists of valid AMQP 1.0 body sections.An
expirationvalue that cannot be parsed is now ignored during that conversion.GitHub issue: #17272
-
Client connection listener startup now can be delayed by a configurable number of seconds
(default: no additional delay):listeners.startup_delay = 10 -
Internal peer discovery improvements.
GitHub issue: #17450
Bug Fixes
RabbitMQ 4.3.6
RabbitMQ 4.3.6 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
-
Deleting an exchange did not delete the bindings that pointed to it as a destination.
A few related cases around auto-delete exchanges, transient queue cleanup and
virtual host deletion were fixed along the way. -
Quorum queue continuous membership reconciliation could add more replicas than
the configured target. -
Certain malformed
urn:uuid:correlation or message ID caused exceptions during message format conversion.
Such values are now rejected.GitHub issue: #17328
-
An operation that refers to an unknown queue type now fails with a
precondition_failedchannel exception instead of an exception and abrupt channel termination.GitHub issue: #17327
-
Classic queue recovery counted some message store references more than once.
GitHub issue: #17351
-
x-max-agevalues are now compared as durations, so redeclaring a stream
with1Dwhen it was declared with24hno longer fails with a
PRECONDITION_FAILED(non-equivalent argument) exception.With contributions from @Vishal-770.
-
AMQP 1.0 SQL filters: the value matched by a
LIKEpattern with several
wildcards is now bounded independently of the message size limit.GitHub issue: #17332
-
Direct connections (used by the shovel and federation plugins) now enforce
channel_max_per_node
the same way network connections do.Contributed by @Ayanda-D.
GitHub issue: #16610
Enhancements
-
New
rabbitmq.confsetting:channel_tx_message_max. It bounds the number of publishes a channel
buffers in an open AMQP 0-9-1 transaction, and defaults to 10,000. Going over the limit
results in aprecondition_failedchannel exception.Most applications won't be affected by this change and likely will not have to
increase the default limit.GitHub issue: #17331
-
New
rabbitmq.confsetting:listeners.startup_delay. It delays the start of client connection
listeners by the specified number of seconds, for environments where applications
begin connecting as soon as a port is open, before the node has finished booting.Contributed by @Vishal-770.
-
Several channel interceptors can now be registered for the same AMQP 0-9-1 operation,
as long as they use different priorities. Previously, if two enabled plugins intercepted
the same operation, for examplebasic.publish, channels could not be opened at all.Priorities are set per interceptor module in
rabbitmq.conf. Lower values run first,
and omitted interceptors are assumed to have the priority of0:channel_interceptor.priorities.rabbit_timestamp_interceptor = 1 channel_interceptor.priorities.rabbit_routing_node_stamp_interceptor = 2 channel_interceptor.priorities.rabbit_sharding_interceptor = 3
Contributed by @Ayanda-D.
GitHub issue: #17182
-
Shovels now support a new AMQP URI query parameter,
customize_hostname_check,
that controls how the target hostname is matched against the server certificate,
for example with wildcard certificates.Contributed by @jiangranwang.
GitHub issue: #17221
CLI Tools
Bug Fixes
-
rabbitmq-diagnostics check_certificate_expirationnow handles certificate files
that cannot be read, and certificates that use the RFC 5280UTCTimeformat,
the same way the HTTP API health check does.Contributed by @Vishal-770.
Enhancements
-
Two new commands,
rabbitmqctl list_channel_interceptorsand
rabbitmqctl set_channel_interceptor_priorities, list the active channel interceptors
and adjust their priorities at runtime. Priorities set this way are not persisted
and do not survive a node restart.Contributed by @Ayanda-D.
GitHub issue: #17182
Stream Plugin
Bug Fixes
-
During a rolling upgrade, a stream metadata request could leave out a peer node
that ran a different version.GitHub issue: #17333
Stream Management Plugin
Bug Fixes
-
The publishers and consumers listing now verifies virtual host access like
other comparable HTTP API endpoints.
Management Plugin
Bug Fixes
-
The channels list and individual channel pages now display basic information
when management statistics are disabled, instead of returning a400 Bad Request. -
Several HTTP API endpoints returned a
500instead of a400for invalid
range parameters or an invalid timeout header:GET /api/nodes/{node},
GET /api/healthchecks/node[/{node}],GET /api/federation-links,
GET /api/health/checks/alarmsandGET /api/health/checks/local-alarms. -
The certificate expiration health check no longer responds with a
500
for certificate files that cannot be read, or for certificates that use the
RFC 5280UTCTimeformat.Contributed by @Vishal-770.
-
Optional argument (
x-*) values are no longer coerced to strings in the management UI.GitHub issue: #17177
Enhancements
-
Consumers on protocols without channels (for example, AMQP 1.0 and MQTT)
now link directly to their connection in the management UI.Contributed by @vampirebyte.
GitHub issue: #17206
Shovel Plugin
Bug Fixes
-
Shovel types provided by plugins can now be used as
src-protocolanddest-protocolvalues. -
A local shovel with
src-delete-afterset to a number could in some cases
transfer more messages than that number.GitHub issue: #17209
MQTT Plugin
Enhancements
-
The retained message store now has per-virtual host limits on both the number of messages
and their total size:mqtt.retained_message_store.max_messages(defaults to 100000)
andmqtt.retained_message_store.max_size_bytes(defaults to 1 GiB).GitHub issue: #17189
STOMP Plugin
Bug Fixes
-
STOMP and Web STOMP connections now enforce credential expiry (for example, of OAuth 2 tokens)
the same way other protocols do.GitHub issue: #17244
Web MQTT and Web STOMP Plugins
Bug Fixes
-
web_mqtt.ssl.*andweb_stomp.ssl.*now accept more TLS keys inrabbitmq.conf,
includingverifyandfail_if_no_peer_cert.
LDAP AuthN and AuthZ Backend Plugin
Bug Fixes
- DN escaping introduced in an earlier release was too strict for certain Active Direct...
RabbitMQ 4.3.5
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 successfulopen), 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 theX-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](...
RabbitMQ 4.3.4
RabbitMQ 4.3.4 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
-
Quorum queues in clusters upgraded from
3.13.xto4.2.xand then to4.3.xcould stop
emitting metrics and taking snapshots after a node restart. -
The AMQP 1.0 parser now detects standard message body sections more strictly.
GitHub issue: #17017
-
The AMQP 1.0 parser now decodes certain array values more efficiently.
GitHub issue: #16994
Stream Plugin
Bug Fixes
-
The single active consumer coordinator
did not notify a consumer that was re-selected for activation while it was still deactivating,
leaving the group without an active consumer.Contributed by @pterygota.
Management Plugin
Bug Fixes
-
Very short lived exclusive queues could cause an exception during metric collection, producing
log noise. -
After an IdP-initiated OAuth 2 login, the management UI now returns the user
to the page that was open before the login instead of the default one.Contributed by @thisisnsh.
-
Several security fixes and validation gaps were addressed:
- The HTTP API now returns 404 Not Found instead of 401 Unauthorized when a user lacks permission to a vhost, avoiding disclosure of the vhost's existence.
- Token expiry values that use a floating point number are now accepted, not just integers.
- To access all user-limits it is required administrator priviledge
- To access a user-limits for a specific user now require the requester to be that same user or have administrator/monitoring privileges.
GitHub issue: #16709
Enhancements
-
The management UI Content Security Policy (CSP) no longer includes the
unsafe-evaland
unsafe-inlinedirectives.GitHub issue: #16916
Federation Plugin
Bug Fixes
-
In scenarios that involved a federated queue and a federated exchange with exactly the same name in the same virtual host,
deleting an upstream unintentionally corrupted the federated exchange(s) operating state, breaking federation
for the exchange in question.
Dependency Changes
None in this release.
RabbitMQ 4.2.9
RabbitMQ 4.2.9 is a maintenance release in the 4.2.x release series.
It is strongly recommended that you read 4.2.0 release notes
in detail if upgrading from a version prior to 4.2.0.
Minimum Supported Erlang Version
Important: starting with this release, the minimum supported Erlang version is 27.0. Erlang/OTP 26 has reached
end of life and is no longer supported.
GitHub issue: #16914
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
-
Classic queue index directory paths could accumulate slashes, eventually failing
with anenametoolongfile system error.GitHub issue: #16833
-
AMQP 1.0 management operations that declare an exchange with an alternate exchange now verify
the necessary permissions on the alternate exchange, matching AMQP 0-9-1.GitHub issue: #16785
-
AMQP 1.0 management
GET /bindingsoperations now behave consistently with the rest
of the binding-related handlers.GitHub issue: #16790
-
Worker pool processes no longer terminate when they receive an unexpected message.
Contributed by @Ayanda-D.
GitHub issue: #16666
-
A race condition between concurrent queue (or virtual host) deletion and a Ra cluster shutdown
could log an exception.Contributed by @Ayanda-D.
GitHub issue: #16880
-
A closing channel (connection) that failed to send
channel.close_okon an already terminated
writer or socket no longer produce log noise.Contributed by @Ayanda-D.
GitHub issue: #16651
-
Unexpected failures during channel termination cleanup no longer produce log noise.
Contributed by @Ayanda-D.
GitHub issue: #16740
-
Code paths that use
rabbit_queue_type_util:erpc_call/5now handle more errors.Contributed by @Ayanda-D.
GitHub issue: #16701
-
Nodes could fail to start with a
bad_generatorexception inrabbit_queue_decorator:select/1
when a quorum queue record in the metadata store had its decorators set toundefined. -
Enabling tracing on multiple virtual hosts concurrently could silently drop
some of the virtual hosts from the traced set. All virtual host tracing state modifications
are now linearized.
Enhancements
-
Password salts are now generated using a cryptographically secure pseudo-random number generator (CSPRNG).
GitHub issue: #16775
-
Socket-level metric collection used by several protocol readers and the management agent
now handles concurrently closed connections safely.Inspired by a contribution of @MugemaneBertin2001.
CLI Tools
Bug Fixes
-
rabbitmq-pluginscommands now tolerate plugins that are listed as enabled but are not installed.GitHub issue: #16896
-
rabbitmq-plugins listno longer outputs an empty plugin table when the target node
cannot be reached.GitHub issue: #16791
-
rabbitmq-pluginscommands now correctly handle file paths of remote nodes, validate remote nodes
in offline mode, and no longer report false positives forrabbitmq-plugins is_enabled.GitHub issue: #16842
-
Shell (Bash, zsh) command completion fixes.
Contributed by @Chr1s70ph.
GitHub issue: #16776
Enhancements
-
rabbitmq-queuesandrabbitmq-streamsnow providetransfer_leadershipcommands
for individual queues and streams.GitHub issue: #16757
-
rabbitmq-upgrade drainsafety improvements: the command now handles certain failures
more gracefully.Proposed by @MugemaneBertin2001.
Stream Plugin
Bug Fixes
-
Permissions required for certain stream protocol operations were adjusted to be consistent
with comparable operations over other protocols.GitHub issue: #16754
Enhancements
-
The maximum number of super stream partitions is now limited to 1,000 partitions by default.
This limit can be increased using thestream.max_super_stream_partitionskey inrabbitmq.conf. -
A client RPC timeout is now logged as a concise message instead of an exception
with a stack trace.Contributed by @MugemaneBertin2001.
Management Plugin
Bug Fixes
-
OAuth 2 login could fail in Safari. A new token endpoint proxy is now used
for the affected authorization flow. -
Several management UI templates now use safe string escaping in more places.
-
HTTP API message publishing endpoint now uses a timeout when waiting for publisher confirms.
GitHub issue: #16911
Enhancements
-
Definition export over the HTTP API is now significantly more efficient and
transfers the result using HTTP response streaming.GitHub issue: #16734
-
The
Referrer-PolicyHTTP response header is now set (and configurable).GitHub issue: #16893
-
HTTP API error responses were refactored to be more consistent and expose fewer internal details.
GitHub issue: #16709
OAuth 2 AuthN and AuthZ Backend Plugin
Bug Fixes
-
Fractional
exp(token expiry) timestamp values are now honored.GitHub issue: #16713
Enhancements
-
The token refresh path is now more robust.
GitHub issue: #16858
Shovel Plugin
Bug Fixes
-
Several shovel bug fixes, including one for static shovel URIs whose credentials
could be logged. -
A shovel deleted before it successfully connected (in the
startingstate) no longer
leaks its status entry.GitHub issue: #16767
Federation Plugin
Bug Fixes
-
Federation upstream URIs are now validated more strictly.
GitHub issue: #16942
MQTT Plugin
Enhancements
-
More correct peer host detection in setups that have Proxy Protocol enabled.
GitHub issue: #16933
Web MQTT Plugin
Enhancements
-
More correct peer host detection in setups that have Proxy Protocol enabled.
GitHub issue: #16933
-
The HSTS response header policy can now be configured for Web MQTT listeners.
STOMP Plugin
Enhancements
-
Internal socket handling refactoring shared by STOMP and Web STOMP connections.
GitHub issue: #16935
Web STOMP Plugin
##...
RabbitMQ 4.3.3
RabbitMQ 4.3.3 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
Important: starting with this release, the minimum supported Erlang version is 27.0. Erlang/OTP 26 has reached
end of life and is no longer supported.
GitHub issue: #16914
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
-
Quorum queue, Khepri and other Raft leaders could optimistically commit new log entries in certain scenarios.
GitHub issue: rabbitmq/ra#637
-
Quorum queues that use
at-least-oncedead lettering could get their
dead lettering process permanently stuck after repeated queue membership changes.GitHub issue: #16652
-
Classic queue index directory paths could accumulate slashes, eventually failing
with anenametoolongfile system error.GitHub issue: #16833
-
Enabling the
tie_binding_to_dest_with_keep_while_condfeature flag could fail with an exception
when certain exchange-to-exchange topologies.GitHub issue: #16824
-
An invalid
consumer_timeoutvalue in the configuration now falls back to the default
value (24 hours) instead of being used as is.GitHub issue: #16799
-
AMQP 1.0 management operations that declare an exchange with an alternate exchange now verify
the necessary permissions on the alternate exchange, matching AMQP 0-9-1.GitHub issue: #16785
-
AMQP 1.0 management
GET /bindingsoperations now behave consistently with the rest
of the binding-related handlers.GitHub issue: #16790
-
Worker pool processes no longer terminate when they receive an unexpected message.
Contributed by @Ayanda-D.
GitHub issue: #16666
-
A race condition between concurrent queue (or virtual host) deletion and a Ra cluster shutdown
could log an exception.Contributed by @Ayanda-D.
GitHub issue: #16880
-
A closing channel (connection) that failed to send
channel.close_okon an already terminated
writer or socket no longer produce log noise.Contributed by @Ayanda-D.
GitHub issue: #16651
-
Unexpected failures during channel termination cleanup no longer produce log noise.
Contributed by @Ayanda-D.
GitHub issue: #16740
-
Code paths that use
rabbit_queue_type_util:erpc_call/5now handle more errors.Contributed by @Ayanda-D.
GitHub issue: #16701
-
Nodes could fail to start with a
bad_generatorexception inrabbit_queue_decorator:select/1
when a quorum queue record in the metadata store had its decorators set toundefined. -
Enabling tracing on multiple virtual hosts concurrently could silently drop
some of the virtual hosts from the traced set. All virtual host tracing state modifications
are now linearized.
Enhancements
-
Password salts are now generated using a cryptographically secure pseudo-random number generator (CSPRNG).
GitHub issue: #16775
-
Socket-level metric collection used by several protocol readers and the management agent
now handles concurrently closed connections safely.Inspired by a contribution of @MugemaneBertin2001.
CLI Tools
Bug Fixes
-
rabbitmq-pluginscommands now tolerate plugins that are listed as enabled but are not installed.GitHub issue: #16896
-
rabbitmq-plugins listno longer outputs an empty plugin table when the target node
cannot be reached.GitHub issue: #16791
-
rabbitmq-pluginscommands now correctly handle file paths of remote nodes, validate remote nodes
in offline mode, and no longer report false positives forrabbitmq-plugins is_enabled.GitHub issue: #16842
-
Shell (Bash, zsh) command completion fixes.
Contributed by @Chr1s70ph.
GitHub issue: #16776
Enhancements
-
rabbitmq-queuesandrabbitmq-streamsnow providetransfer_leadershipcommands
for individual queues and streams.GitHub issue: #16757
-
rabbitmq-upgrade drainsafety improvements: the command now handles certain failures
more gracefully.Proposed by @MugemaneBertin2001.
Stream Plugin
Bug Fixes
-
Permissions required for certain stream protocol operations were adjusted to be consistent
with comparable operations over other protocols.GitHub issue: #16754
Enhancements
-
The maximum number of super stream partitions is now limited to 1,000 partitions by default.
This limit can be increased using thestream.max_super_stream_partitionskey inrabbitmq.conf. -
A client RPC timeout is now logged as a concise message instead of an exception
with a stack trace.Contributed by @MugemaneBertin2001.
Management Plugin
Bug Fixes
-
OAuth 2 login could fail in Safari. A new token endpoint proxy is now used
for the affected authorization flow. -
Several management UI templates now use safe string escaping in more places.
-
HTTP API message publishing endpoint now uses a timeout when waiting for publisher confirms.
GitHub issue: #16911
Enhancements
-
Definition export over the HTTP API is now significantly more efficient and
transfers the result using HTTP response streaming.GitHub issue: #16734
-
The
Referrer-PolicyHTTP response header is now set (and configurable).GitHub issue: #16893
-
The
AllowHTTP response header can now be excluded from HTTP API responses.GitHub issue: #16907
-
HTTP API error responses were refactored to be more consistent and expose fewer internal details.
GitHub issue: #16709
-
HTTP access log entries for OAuth 2-authenticated requests now use the username determined
by the authentication backend (e.g.preferred_username) instead of the client ID. -
Definition file uploads via the management UI now require a
.jsonfile extension
(enabled via a feature switch).GitHub issue: #16946
OAuth 2 AuthN and AuthZ Backend Plugin
Bug Fixes
-
Fractional
exp(token expiry) timestamp values are now honored.GitHub issue: #16713
Enhancements
-
The token refresh path is now more robust.
GitHub issue: #16858
...
RabbitMQ 4.2.8
RabbitMQ 4.2.8 is a maintenance release in the 4.2.x release series.
It is strongly recommended that you read 4.2.0 release notes
in detail if upgrading from a version prior to 4.2.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
-
Users created without a password or a password hash (for example, those that rely on
X.509 certificate-based authentication) over the HTTP API are now stored correctly,
exactly like the users whose password was cleared withrabbitmqctl clear_password. -
Consumer activity status of classic queue consumers was not always correctly updated and reported
when single active consumer was enabled. -
Default queue type (DQT) validation now treats empty strings the same way as a missing value: by falling back
to the default (classic queues).
Enhancements
-
The per-node channel limit (
channel_max_per_node) is now also enforced for channels opened
on direct Erlang client connections used by the Shovel and Federation plugins, matching the behavior
enforced for "regular" AMQP 0-9-1 clients. -
Modules are now loaded in parallel early on node boot, reducing node startup time.
GitHub issue: #16479
-
Several new
rabbitmq.confkeys now support encrypted values.GitHub issue: #16632
CLI Tools
Bug Fixes
-
rabbitmqctl add_vhostnow validates the provided default queue type value.GitHub issue: #16481
Stream Plugin
Bug Fixes
-
Fixed a frame assembly performance regression in the stream protocol reader.
GitHub issue: #16588
Enhancements
-
Several stream protocol reader optimizations: stream metadata queries now contact cluster nodes concurrently,
subscription lookups use a more efficient data structure, and frame processing short-circuits
when a connection reaches a terminal state.GitHub issue: #16588
Management Plugin
Bug Fixes
-
CORS hardening:
access-control-request-headersvalues are now validated and
a wildcard (*)originheader value is rejected.GitHub issue: #16544
-
Definitions import now limits the size of multipart upload bodies, and definitions export
download filenames are restricted to a safe character set.GitHub issue: #16544
-
HTTP API 500 responses no longer include internal error details in the response body.
GitHub issue: #16544
-
Several HTTP response headers are now consistently lowercase, and a previously missing
content-typeheader was added to certain responses.GitHub issue: #16544
Enhancements
-
A one-time warning is now logged when the HSTS or CSP headers are disabled.
GitHub issue: #16544
-
The timestamp of the oldest message in a stream is now displayed on the stream page.
GitHub issue: #15412
Prometheus Plugin
Enhancements
-
More plugin configuration keys, such as
prometheus.ssl.password, now support
encrypted values inrabbitmq.conf.
MQTT Plugin
Bug Fixes
-
mqtt.tcp_listen_options.*settings inrabbitmq.confdid not take effect
due to a configuration translation issue.GitHub issue: #16529
Dependency Changes
RabbitMQ 4.3.2
RabbitMQ 4.3.2 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
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
-
Enabling the
tie_binding_to_dest_with_keep_while_condfeature flag could fail in some
rare cases.GitHub issue: #16587
-
Users created without a password or a password hash (for example, those that rely on
X.509 certificate-based authentication) over the HTTP API are now stored correctly,
exactly like the users whose password was cleared withrabbitmqctl clear_password. -
Consumer activity status of classic queue consumers was not always correctly updated and reported
when single active consumer was enabled. -
The values of the
x-consumer-timeoutandx-consumer-disconnected-timeoutoptional arguments
are now validated at queue declaration time.GitHub issue: #16557
-
Default queue type (DQT) validation now treats empty strings the same way as a missing value: by falling back.
to the default (classic queues). -
Feature flag operations now avoid unnecessary work: flags that are already enabled on all cluster nodes
are excluded from synchronization, and enabling an empty set of flags is a no-op.GitHub issue: #16497
-
Configuration changes for deprecated features are now
honored when possible.GitHub issue: #16500
Enhancements
-
The per-node channel limit (
channel_max_per_node) is now also enforced for channels opened
on direct Erlang client connections used by the Shovel and Federation plugins, matching the behavior
enforced for "regular" AMQP 0-9-1 clients. -
Modules are now loaded in parallel early on node boot, reducing node startup time.
GitHub issue: #16479
-
Several new
rabbitmq.confkeys now supports encrypted values.GitHub issue: #16632
CLI Tools
Bug Fixes
-
rabbitmqctl set_topic_permissionsnow validates target user and exchange for existence.GitHub issue: #16590
-
rabbitmqctl add_vhostnow validates the provided default queue type value.GitHub issue: #16481
Stream Plugin
Bug Fixes
-
Fixed a frame assembly performance regression in the stream protocol reader.
GitHub issue: #16588
Enhancements
-
Several stream protocol reader optimizations: stream metadata queries now contact cluster nodes concurrently,
subscription lookups use a more efficient data structure, and frame processing short-circuits
when a connection reaches a terminal state.GitHub issue: #16588
Management Plugin
Bug Fixes
-
CORS hardening:
access-control-request-headersvalues are now validated and
a wildcard (*)originheader value is rejected.GitHub issue: #16544
-
Definitions import now limits the size of multipart upload bodies, and definitions export
download filenames are restricted to a safe character set.GitHub issue: #16544
-
HTTP API 500 responses no longer include internal error details in the response body.
GitHub issue: #16544
-
Several HTTP response headers are now consistently lowercase, and a previously missing
content-typeheader was added to certain responses.GitHub issue: #16544
Enhancements
-
A one-time warning is now logged when the HSTS or CSP headers are disabled.
GitHub issue: #16544
-
The timestamp of the oldest message in a stream is now displayed on the stream page.
GitHub issue: #15412
-
The queue list page can now display a "Delayed" message count column, for example, for
quorum queues that have a retry policy configured.GitHub issue: #16639
Prometheus Plugin
Enhancements
-
More plugin configuration keys, such as
prometheus.ssl.password, now support
encrypted values inrabbitmq.conf.
MQTT Plugin
Bug Fixes
-
mqtt.tcp_listen_options.*settings inrabbitmq.confdid not take effect
due to a configuration translation issue.GitHub issue: #16529
Dependency Changes
RabbitMQ 4.3.1
RabbitMQ 4.3.1 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
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
-
If a queue was bound to a topic exchange using an empty binding key (
""),
messages published to any topic exchange with an empty
routing key would be incorrectly routed to that queue.To apply the fix, enable the new
topic_binding_projection_v5feature flag after upgrading all cluster nodes.GitHub issue: #16271
-
A virtual host could be falsely considered to be deleted in certain metadata store error and timeout scenarios.
GitHub issue: #16422
-
Passive queue and exchange declarations are now allowed for users that have any permission
on the virtual host (configure,write, orread), not onlyconfigure. -
Classic queue shared message store GC could fall behind other queue activity under heavy load
-
Classic queue message store: garbage collection is now stopped cleanly during node shutdown.
GitHub issue: #15498
-
Quorum queues now gracefully handle negative priority values.
GitHub issue: #16280
-
Quorum queues: delayed retry-related policy keys are now accepted in policy definitions.
-
Fixed a bug where quorum queue's at-least-once dead lettering could direct commands to
the wrong member (replica).GitHub issue: #16203
-
Quorum queues: reintroduced Raft WAL max entries default of 500K.
GitHub issue: #16382
-
A quorum queue could crash during recovery after an unclean shutdown
PR: rabbitmq/ra#629
-
Stream queue argument validation was improved.
GitHub issue: #16285
Enhancements
-
channel_maxwas renamed tomax_channelsinrabbitmq.conf. The original name is
still supported as an alias.GitHub issue: #16347
-
connection_maxwas renamed tomax_connectionsinrabbitmq.conf. The original name is
still supported as an alias.GitHub issue: #16347
-
The per-node
max_connectionslimit is now enforced for AMQP 1.0 connections as well as AMQP 0-9-1 ones.GitHub issue: #16300
-
When a plain-text client connects to a TLS listener (or vice versa) for
AMQP 0-9-1, MQTT, STOMP, and the Stream protocol, target node will log a more useful message. -
The permission cache is now traversed less often during AMQP 1.0 management and AMQP 0-9-1 channel checks.
GitHub issue: #16274
Stream Plugin
Bug Fixes
-
Stream protocol: an
openframe with empty properties is now handled correctly.GitHub issue: #16341
Enhancements
-
It is now possible to cap the maximum number of concurrent Stream Protocol client
connections using thestream.max_connectionsconfiguration key inrabbitmq.conf.GitHub issue: #16341
Management Plugin
Bug Fixes
-
HTTP API
GET /api/connectionscould return a 500 response when STOMP connections were present.GitHub issue: #16435
Enhancements
-
It is now possible to cap the maximum number of concurrent HTTP API connections using the
management.tcp.max_connections,
management.ssl.max_connectionsconfiguration keys inrabbitmq.conf.GitHub issue: #16407
-
The peer (client) certificate serial number is now exposed in the management UI and select CLI commands.
GitHub issue: #16463
Prometheus Plugin
Enhancements
-
It is now possible to cap the maximum number of concurrent HTTP API connections using the
prometheus.tcp.max_connections,
prometheus.ssl.max_connectionsconfiguration keys inrabbitmq.conf.GitHub issue: #16407
MQTT Plugin
Bug Fixes
-
The MQTT connection process no longer fails and logs an exception when keepalive checks encounter socket errors on
an already-closed connection.GitHub issue: #16391
Enhancements
-
It is now possible to cap the maximum number of concurrent MQTT client connections using the
mqtt.max_connections
configuration key inrabbitmq.conf.GitHub issue: #16367
Federation Plugin
Bug Fixes
LDAP Plugin
Enhancements
-
New
rabbitmq.confconfiguration settings for TLS cipher suites:auth_ldap.ssl_options.ciphers.*.GitHub issue: #16226
HTTP Auth Backend Plugin
Enhancements
-
New
rabbitmq.confconfiguration settings for TLS cipher suites:auth_http.ssl_options.ciphers.*.GitHub issue: #16226
Auth Backend Cache Plugin
Bug Fixes
Trust Store Plugin
Bug Fixes
-
A user-provided
fail_if_no_peer_certvalue in the plugin's TLS options is now respected. Previously,
an internal default could override the configured value.GitHub issue: #16201
Enhancements
-
New
rabbitmq.confconfiguration settings for TLS cipher suites:trust_store.ssl_options.ciphers.*.GitHub issue: #16226