Skip to content

Releases

RabbitMQ 4.3.7

Choose a tag to compare

@michaelklishin michaelklishin released this 20 Oct 00:56
cd87622

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.cancel notification sent on a consumer delivery timeout
    now properly clears consumer state even if the client does not respond with basic.cancel-ok.

    Most clients do not respond, and nodes older than 4.3.0 do not accept a client-sent
    basic.cancel-ok at all. The server now advertises whether one is supported, and a short timeout
    removes the consumer if the client never responds.

    A new rabbitmq.conf setting 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.

    GitHub issues: #17708, #17759

  • 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.

    GitHub issues: #17645, #17664

  • 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_groups can now be used in rabbitmq.conf to 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.

    GitHub issues: #17722, #17729

  • A 404 for a virtual host the user has no permissions on is now identical to the 404 for
    a virtual host that does not exist.

    GitHub issue: #17540

  • The OAuth 2 token proxy responded with a 500 to some malformed JSON documents.

    GitHub issue: #17646

  • The default Content-Security-Policy value now includes base-uri 'none'.

    GitHub issue: #17615

Enhancements

  • AMQP 1.0 consumers now link directly to their connection in the management UI.

    GitHub issues: #17516, #17523

Shovel Plugin

Bug Fixes

  • When the destination rejects a message, for example because the destination queue
    has x-overflow set to reject-publish and 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 in 4.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.

    GitHub issues: #17486, #17488

Federation Plugins

Bug Fixes

  • Federation links now ignore publisher confirms for unknown delivery tags.

    GitHub issues: #17486, #17488

  • An exchange federation link now handles amqp_connection:open_channel/1 returning closing
    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.cancel with basic.cancel-ok only when the server
    advertises support for it.

    GitHub issue: #17734

  • The auth_mechanism query 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 verify query parameter of an AMQP 0-9-1 URI now only accepts
    verify_peer or verify_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.

    GitHub issues: #17539, #17549

Dependency Changes

  • cowboy was upgraded to 2.20.0
  • cowlib was upgraded to 2.21.0
  • gun was upgraded to 2.7.0
  • khepri was upgraded to 0.18.4

RabbitMQ 4.4.0

Choose a tag to compare

@michaelklishin michaelklishin released this 19 Oct 06:38
24d5157

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-footer
    

    RabbitMQ 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
    other x- header rather than restored as AMQP 1.0 sections.

  • Likewise, the x-basic-delivery-mode, x-basic-priority and
    x-basic-expiration message 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 whose issuer claim 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_issuer and/or
    auth_oauth2.discovery.verify_https_endpoints to false before 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-time annotation 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
    long header.

    An AMQP 1.0 consumer can also delay redelivery of a message by setting
    x-opt-delivery-time in the annotations of a modified outcome.

    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-prefix queue 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.x or earlier.

    GitHub issue: #17166

  • Classic queues now perform compaction more efficiently.

    GitHub issue: #16194

  • x-modulus-hash exchange 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_sharding to the core, so it is
    now available even when said plugin is not enabled.

    GitHub issue: #15849

  • A change to the delivery-limit policy key now takes effect for existing quorum queues.

    Previously the delivery limit could not be updated from a policy. Now quorum queues
    reconfigure their delivery-limit value 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
    the configure, write or read permissions on that queue or exchange.

    This applies to queue.declare and exchange.declare with passive set to true in
    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 the definitions.https.url key in rabbitmq.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-age value that is equal to the existing one but written in
    different units, for example 1D as 24h, is no longer rejected as having non-equivalent arguments.

    GitHub issues: #8509, #17259

  • A stream can now start at an offset other than 0, set with the new
    x-stream-initial-offset optional queue argument. While the stream is empty,
    the first and next offset specifications resolve to this offset. The stream
    protocol accepts the same value as the stream-initial-offset argument of the
    Create command.

    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).

    GitHub issues: #17702, #17758

  • PBKDF2-HMAC-SHA256 now can be used for password hashing:

    password_hashing_module = rabbit_password_hashing_pbkdf2_sha256

    GitHub 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:0

    GitHub issue: #16963

  • connection_max and channel_max were renamed to max_connections and max_channels,
    respectively, in rabbitmq.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 expiration value 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

    GitHub issues: #13153, #17289

  • Internal peer discovery improvements.

    GitHub issue: #17450

Bug Fixes

  • The stream coordinator could leave a stream without a writer and never recover it,
    keep a stale start action after a leader election, or leave a replica
    disconnected after its node came back.

    GitHub issue: [#16515](#165...

Read more

RabbitMQ 4.3.6

Choose a tag to compare

@michaelklishin michaelklishin released this 14 Sep 07:24
7a34a0c

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.

    GitHub issues: #17255, #17257

  • Quorum queue continuous membership reconciliation could add more replicas than
    the configured target.

    GitHub issues: #17310, #17311

  • 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_failed channel 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-age values are now compared as durations, so redeclaring a stream
    with 1D when it was declared with 24h no longer fails with a
    PRECONDITION_FAILED (non-equivalent argument) exception.

    With contributions from @Vishal-770.

    GitHub issues: #8509, #17259

  • AMQP 1.0 SQL filters: the value matched by a LIKE pattern 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.conf setting: 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 a precondition_failed channel 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.conf setting: 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.

    GitHub issues: #13153, #17289

  • 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 example basic.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 of 0:

    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_expiration now handles certificate files
    that cannot be read, and certificates that use the RFC 5280 UTCTime format,
    the same way the HTTP API health check does.

    Contributed by @Vishal-770.

    GitHub issues: #12464, #17345

Enhancements

  • Two new commands, rabbitmqctl list_channel_interceptors and
    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.

    GitHub issues: #17236, #17239

Management Plugin

Bug Fixes

  • The channels list and individual channel pages now display basic information
    when management statistics are disabled, instead of returning a 400 Bad Request.

    GitHub issues: #8240, #17198

  • Several HTTP API endpoints returned a 500 instead of a 400 for 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/alarms and GET /api/health/checks/local-alarms.

    GitHub issues: #17245, #17247

  • 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 5280 UTCTime format.

    Contributed by @Vishal-770.

    GitHub issues: #12464, #17345

  • 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-protocol and dest-protocol values.

    GitHub issues: #17341, #17343

  • A local shovel with src-delete-after set 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)
    and mqtt.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

LDAP AuthN and AuthZ Backend Plugin

Bug Fixes

  • DN escaping introduced in an earlier release was too strict for certain Active Direct...
Read more

RabbitMQ 4.3.5

Choose a tag to compare

@michaelklishin michaelklishin released this 17 Aug 21:41
0dde27b

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.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.

    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 the info level, failed login attempts at the warning level.

    GitHub issue: #16907

CLI Tools

Enhancements

  • rabbitmqctl hash_password now supports more password hashing functions.

    GitHub issues: #14215, #17108

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 low frame_max ceiling 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 new stream.initial_frame_max setting.

    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's maxUncompressedSubEntryBatchSize.
    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.

    GitHub issues: #17106, #17118

  • The management UI no longer displays certain alert messages twice.

    GitHub issue: #17127

Enhancements

  • When management.credential_encryption_secret is configured, the management UI login endpoint
    (POST /api/login) returns client credentials encrypted using AES-256-GCM with a key
    derived from the configured secret, and returns the ciphertext as an opaque token prefixed
    with rmqe.. The browser stores this token and presents it on all subsequent requests
    using the Authorization: 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/definitions now supports conditional requests (ETag).

    The ETag value is derived from the metadata store Raft index, so the tag will
    naturally change as the metadata store serves writes.

    GitHub issues: #16724, #17121

  • The Referrer-Policy HTTP response header can now be configured with
    the management.headers.referrer_policy setting.

    GitHub issue: #16893

  • When management.http.hide_allow_header is set to true, the Allow HTTP response header
    is omitted from all responses except 405 Method Not Allowed ones, 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_extension is set to true, both the management UI
    and the HTTP API will reject definition upload where the file does not have a .json extension.
    The setting defaults to false. 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-Host and X-Forwarded-Port headers
    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 declarations failed to start.

    GitHub issues: #17063, #17067

  • 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.

    GitHub issues: #17055, #17064

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](...

Read more

RabbitMQ 4.3.4

Choose a tag to compare

@michaelklishin michaelklishin released this 23 Jul 14:46

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.x to 4.2.x and then to 4.3.x could stop
    emitting metrics and taking snapshots after a node restart.

    GitHub issues: #16974, #16990

  • 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.

    GitHub issues: #16975, #16976

Management Plugin

Bug Fixes

  • Very short lived exclusive queues could cause an exception during metric collection, producing
    log noise.

    GitHub issues: #16989, #16999, #17002

  • 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.

    GitHub issues: #16957, #16961

  • 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-eval and
    unsafe-inline directives.

    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.

    GitHub issues: #16991, #16997

Dependency Changes

None in this release.

RabbitMQ 4.2.9

Choose a tag to compare

@michaelklishin michaelklishin released this 20 Jul 14:43
47d6d64

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 an enametoolong file 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 /bindings operations 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_ok on 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/5 now handle more errors.

    Contributed by @Ayanda-D.

    GitHub issue: #16701

  • Nodes could fail to start with a bad_generator exception in rabbit_queue_decorator:select/1
    when a quorum queue record in the metadata store had its decorators set to undefined.

    GitHub issues: #16843, #16844

  • 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.

    GitHub issues: #16755, #16763

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.

    GitHub issues: #16856, #16832

CLI Tools

Bug Fixes

  • rabbitmq-plugins commands now tolerate plugins that are listed as enabled but are not installed.

    GitHub issue: #16896

  • rabbitmq-plugins list no longer outputs an empty plugin table when the target node
    cannot be reached.

    GitHub issue: #16791

  • rabbitmq-plugins commands now correctly handle file paths of remote nodes, validate remote nodes
    in offline mode, and no longer report false positives for rabbitmq-plugins is_enabled.

    GitHub issue: #16842

  • Shell (Bash, zsh) command completion fixes.

    Contributed by @Chr1s70ph.

    GitHub issue: #16776

Enhancements

  • rabbitmq-queues and rabbitmq-streams now provide transfer_leadership commands
    for individual queues and streams.

    GitHub issue: #16757

  • rabbitmq-upgrade drain safety improvements: the command now handles certain failures
    more gracefully.

    Proposed by @MugemaneBertin2001.

    GitHub issues: #16865, #3369

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 the stream.max_super_stream_partitions key in rabbitmq.conf.

    GitHub issues: #16689, #16706

  • A client RPC timeout is now logged as a concise message instead of an exception
    with a stack trace.

    Contributed by @MugemaneBertin2001.

    GitHub issues: #16829, #15744

Management Plugin

Bug Fixes

  • OAuth 2 login could fail in Safari. A new token endpoint proxy is now used
    for the affected authorization flow.

    GitHub issues: #16664, #16892

  • Several management UI templates now use safe string escaping in more places.

    GitHub issue: #16738, #16677

  • 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-Policy HTTP 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.

    GitHub issues: #16855, #16835

  • A shovel deleted before it successfully connected (in the starting state) 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.

    GitHub issues: #14161, #16772

STOMP Plugin

Enhancements

  • Internal socket handling refactoring shared by STOMP and Web STOMP connections.

    GitHub issue: #16935

Web STOMP Plugin

##...

Read more

RabbitMQ 4.3.3

Choose a tag to compare

@michaelklishin michaelklishin released this 20 Jul 14:55
1d284b2

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-once dead 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 an enametoolong file system error.

    GitHub issue: #16833

  • Enabling the tie_binding_to_dest_with_keep_while_cond feature flag could fail with an exception
    when certain exchange-to-exchange topologies.

    GitHub issue: #16824

  • An invalid consumer_timeout value 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 /bindings operations 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_ok on 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/5 now handle more errors.

    Contributed by @Ayanda-D.

    GitHub issue: #16701

  • Nodes could fail to start with a bad_generator exception in rabbit_queue_decorator:select/1
    when a quorum queue record in the metadata store had its decorators set to undefined.

    GitHub issues: #16843, #16844

  • 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.

    GitHub issues: #16755, #16763

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.

    GitHub issues: #16856, #16832

CLI Tools

Bug Fixes

  • rabbitmq-plugins commands now tolerate plugins that are listed as enabled but are not installed.

    GitHub issue: #16896

  • rabbitmq-plugins list no longer outputs an empty plugin table when the target node
    cannot be reached.

    GitHub issue: #16791

  • rabbitmq-plugins commands now correctly handle file paths of remote nodes, validate remote nodes
    in offline mode, and no longer report false positives for rabbitmq-plugins is_enabled.

    GitHub issue: #16842

  • Shell (Bash, zsh) command completion fixes.

    Contributed by @Chr1s70ph.

    GitHub issue: #16776

Enhancements

  • rabbitmq-queues and rabbitmq-streams now provide transfer_leadership commands
    for individual queues and streams.

    GitHub issue: #16757

  • rabbitmq-upgrade drain safety improvements: the command now handles certain failures
    more gracefully.

    Proposed by @MugemaneBertin2001.

    GitHub issues: #16865, #3369

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 the stream.max_super_stream_partitions key in rabbitmq.conf.

    GitHub issues: #16689, #16706

  • A client RPC timeout is now logged as a concise message instead of an exception
    with a stack trace.

    Contributed by @MugemaneBertin2001.

    GitHub issues: #16829, #15744

Management Plugin

Bug Fixes

  • OAuth 2 login could fail in Safari. A new token endpoint proxy is now used
    for the affected authorization flow.

    GitHub issues: #16664, #16892

  • Several management UI templates now use safe string escaping in more places.

    GitHub issue: #16738, #16677

  • 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-Policy HTTP response header is now set (and configurable).

    GitHub issue: #16893

  • The Allow HTTP 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.

    GitHub issues: #16879, #16559

  • Definition file uploads via the management UI now require a .json file 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

...

Read more

RabbitMQ 4.2.8

Choose a tag to compare

@michaelklishin michaelklishin released this 15 Jun 15:08
8b611c9

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 with rabbitmqctl clear_password.

    GitHub issues: #16629, #16633

  • Consumer activity status of classic queue consumers was not always correctly updated and reported
    when single active consumer was enabled.

    GitHub issues: #16532, #16450

  • Default queue type (DQT) validation now treats empty strings the same way as a missing value: by falling back
    to the default (classic queues).

    GitHub issues: #16481, #16488

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.

    GitHub issues: #16616, #16618

  • Modules are now loaded in parallel early on node boot, reducing node startup time.

    GitHub issue: #16479

  • Several new rabbitmq.conf keys now support encrypted values.

    GitHub issue: #16632

CLI Tools

Bug Fixes

  • rabbitmqctl add_vhost now 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-headers values are now validated and
    a wildcard (*) origin header 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-type header 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 in rabbitmq.conf.

    GitHub issues: #16516, #16521

MQTT Plugin

Bug Fixes

  • mqtt.tcp_listen_options.* settings in rabbitmq.conf did not take effect
    due to a configuration translation issue.

    GitHub issue: #16529

Dependency Changes

  • cuttlefish was upgraded to 3.9.1
  • cowboy was upgraded to 2.16.0
  • cowlib was upgraded to 2.17.0
  • gun was upgraded to 2.4.0

RabbitMQ 4.3.2

Choose a tag to compare

@michaelklishin michaelklishin released this 15 Jun 15:34
a509158

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_cond feature 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 with rabbitmqctl clear_password.

    GitHub issues: #16629, #16633

  • Consumer activity status of classic queue consumers was not always correctly updated and reported
    when single active consumer was enabled.

    GitHub issues: #16532, #16450

  • The values of the x-consumer-timeout and x-consumer-disconnected-timeout optional 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).

    GitHub issues: #16481, #16488

  • 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.

    GitHub issues: #16616, #16618

  • Modules are now loaded in parallel early on node boot, reducing node startup time.

    GitHub issue: #16479

  • Several new rabbitmq.conf keys now supports encrypted values.

    GitHub issue: #16632

CLI Tools

Bug Fixes

  • rabbitmqctl set_topic_permissions now validates target user and exchange for existence.

    GitHub issue: #16590

  • rabbitmqctl add_vhost now 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-headers values are now validated and
    a wildcard (*) origin header 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-type header 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 in rabbitmq.conf.

    GitHub issues: #16516, #16521

MQTT Plugin

Bug Fixes

  • mqtt.tcp_listen_options.* settings in rabbitmq.conf did not take effect
    due to a configuration translation issue.

    GitHub issue: #16529

Dependency Changes

  • cuttlefish was upgraded to 3.9.1
  • cowboy was upgraded to 2.16.0
  • cowlib was upgraded to 2.17.0
  • gun was upgraded to 2.4.0

RabbitMQ 4.3.1

Choose a tag to compare

@michaelklishin michaelklishin released this 20 May 01:21
49decca

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_v5 feature 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, or read), not only configure.

    GitHub issues: #16272, #16085

  • Classic queue shared message store GC could fall behind other queue activity under heavy load

    GitHub issues: #16142, #16141

  • 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.

    GitHub issues: #16395, #16398

  • 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_max was renamed to max_channels in rabbitmq.conf. The original name is
    still supported as an alias.

    GitHub issue: #16347

  • connection_max was renamed to max_connections in rabbitmq.conf. The original name is
    still supported as an alias.

    GitHub issue: #16347

  • The per-node max_connections limit 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.

    GitHub issues: #16342, #16344

  • 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 open frame 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 the stream.max_connections configuration key in rabbitmq.conf.

    GitHub issue: #16341

Management Plugin

Bug Fixes

  • HTTP API GET /api/connections could 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_connections configuration keys in rabbitmq.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_connections configuration keys in rabbitmq.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 in rabbitmq.conf.

    GitHub issue: #16367

Federation Plugin

Bug Fixes

  • Federation links could fail to start during rolling cluster restarts.

    GitHub issues: #16234, #16224

LDAP Plugin

Enhancements

  • New rabbitmq.conf configuration settings for TLS cipher suites: auth_ldap.ssl_options.ciphers.*.

    GitHub issue: #16226

HTTP Auth Backend Plugin

Enhancements

  • New rabbitmq.conf configuration settings for TLS cipher suites: auth_http.ssl_options.ciphers.*.

    GitHub issue: #16226

Auth Backend Cache Plugin

Bug Fixes

  • The cache was not effective for reconnecting clients.

    GitHub issues: #16255, #16258

Trust Store Plugin

Bug Fixes

  • A user-provided fail_if_no_peer_cert value in the plugin's TLS options is now respected. Previously,
    an internal default could override the configured value.

    GitHub issue: #16201

Enhancements

  • New rabbitmq.conf configuration settings for TLS cipher suites: trust_store.ssl_options.ciphers.*.

    GitHub issue: #16226

Dependency Changes

  • ra was upgraded to 3.1.7
  • cuttlefish was upgraded to 3.7.0
  • cowboy was upgraded to 2.15.0
  • cowlib was upgraded to 2.16.1
  • gun was upgraded to 2.3.0