Project: RabbitMQ (App Definition and Development / Streaming & Messaging)
File: 3.7.0.md

This release introduces new features, changes to RabbitMQ distribution (e.g. what plugins ship with it), and bug fixes. It also includes all the changes from the unless stated otherwise. Documentation for this release is available at . Minimum required Erlang/OTP version is now 19.3. Recent Erlang versions can be obtained from , , as well as main and backports repositories of recent Ubuntu and Debian releases. GitHub issues: , , . HTTP API has minor breaking changes in several endpoints (see below). .NET client is now . Starting with `3.7.0`, are decoupled from RabbitMQ server releases and exclusively distributed via the . Starting with `3.7.0`, are decoupled from RabbitMQ server releases and exclusively distributed via Maven: , , as well as Maven Central. Users tagged with `administrator` now implicitly have access to most operations in all vhosts, including those they don't have explicit permissions for. GitHub issue: Plugins now must depend on the `rabbit` application . Plugins that do not have the dependency will still function, can be enabled or disabled but won't appear in `rabbitmq-plugins list` output. `rabbitmq_management_visualiser` plugin and is considered to be deprecated. Installations that have this plugin enabled must disable it before upgrading*. This can be done using `rabbitmq-plugins disable` (which supports offline modifications) or by updating the list of plugins in `RABBITMQENABLEDPLUGINS_FILE`. Erlang/OTP 20 has that affected RabbitMQ. 3.7.0 supports OTP 20, including upgrades of existing installations to OTP 20. This required changes to the core and multiple plugins that ship with RabbitMQ. GitHub issues: , , , , , , , New configuration file format RabbitMQ now supports a . The format is and is similar to `.ini` files. Erlang term configuration files are still supported, it is also possible to combine the two formats (use both `rabbitmq.conf` and `advanced.config`). Most documentation examples were updated to use both new and classic config formats. See the docs at , in particular , for more information. GitHub issues: , , Pluggable cluster peer discovery Automatic clustering for blank (without an existing database) nodes now can discover peers using pluggable backends. This is a set of features adopted from the plugin by Gavin Roy. Two implementations are available out of the box: one uses a config file- and another DNS A records. Several more are available via plugins: * * GitHub issues: , , , , , Nodes in a cluster now can be restared in arbitrary order. They will attempt to contact one of the previously seen peers periodically (10 times with 30 second intervals by default). GitHub issue: , Every virtual host now has separate message stores. This improves resiliency and reduces contention in multitenant environments, plus makes development of tools that perform backups and recovery of resting data easier in the

During the upgrade nodes will migrate data to this new layout. This can take some time. To reduce the amount of time, drain as many queues as possible before upgrading, e.g. by stopping publishers without stopping consumers for a period of time. GitHub issues: , , , , , , New . GitHub issue: Support config file path values with and without file extensions RabbitMQ no longer requires `RABBITMQCONFIGFILE` values to not have a `.config` or `.conf` suffix. It will try appending both suffixes as needed when searching for suitable config file(s) to load. GitHub Issue: Operators now can configure how many concurrent connections are allowed in a vhost. GitHub issue: Operators now can configure how many queues can exist in a vhost. GitHub issue: Operator policies: their definitions are merged with the standard (user) policies and allow operators put global limits in place, e.g. max queue length or message TTL. GitHub issue: It is now possible to configure a limited for all newly opened channels by default. This helps prevent consumers that never acknowledge deliveries from exhausting server resources. It is important to make sure that consumers that use can cope with this change before enabling it. GitHub issue: Plugin version constraints RabbitMQ now has a mechanism for plugin authors to indicate what versions a plugin is compatible with. Incompatible plugins are logged and ignored. GitHub issues: , , Lager-based logging: less , pluggable backends, debug log level, more flexibility in configuration. RabbitMQ now uses for its logging subsystem. This brings a group of benefits: (quite verbose) debug log level, pluggable logging backends (will require Lager plugins), and much more flexibility in logging configuration. See , (new style config) and (classic/advanced config format) to learn more. GitHub issues: , Topic authorisation built around topic exchanges. This includes support for certain variables, such as virtual host and username. GitHub issues: , , , When queue length limit is exceeded, publishers of messages that did not fit now can opt-in to receive a nack by opting in (configuring an overflow behavior). When the behavior is configured to reject, messages are also discarded more efficiently. GitHub issue: support. GitHub issue: Deleting a vhost now will force close all connections in it. GitHub issue: Deleting a user account now will force close all of its connections. GitHub issue: OpenSUSE RPM package now supports systemd and requires Leap 42.2. GitHub issue: Standalone MacOS release now bundles Erlang 19.x. GitHub issue: First dead-lettering event now injects a separate set of top-level headers `x-first-death-queue`, `x-first-death-reason`, and `x-first-death-exchange` in addition to the `x-deaths`

GitHub issue: LF and CR are now stripped off of names of queues and exchanges Although line feeds in names are permitted under the AMQP 0-9-1 spec, in practice they can make it very difficult to work with queues and exchanges. Stripping them out makes life much easier for developers. GitHub issue: Deletion of auto-delete and exclusive queues now leaves (debug) log entries GitHub issue: `rabbitmqctl setvmhigh_watermark` now produces more useful error messages when relative values provided are outside of the `0..1.0` range. GitHub issue: Mirrored queue could terminate if a policy is re-applied concurrently after promotion GitHub issue: Old incarnations of queue mirrors are stopped before new ones start GitHub issue: Channel interceptors are enabled/disabled together with plugins GitHub issue: CLI tools were , now can be extended from plugins and support command aliases ( la Git). There's also a new tool, `rabbitmq-diagnostics`, and several new commands available. GitHub issues: , , , , , . New CLI command for closing connections in bulk (e.g. a specific vhost). GitHub issue: New CLI command for detecting potentially stuck processes (previously invoked as `rabbitdiagnostics:maybestuck/0` via `rabbitmqctl eval`). GitHub issue: New CLI command that lists non-AMQP connections (e.g. MQTT). GitHub issue: New CLI command that outputs effective Erlang cookie hash. GitHub issue: `rabbitmq-plugins list` will now only recognise Erlang applications that depend on `rabbit` as plugins. Plugins that lacks the dependency will still function and can be enabled or disabled but won't be listed. GitHub issue: Statistics database is now distributed across the cluster: each nodes stores its own stats. GitHub issue: Migration to Cowboy REST RabbitMQ management plugin as well as its extensions (e.g. those of Federation and Shovel, `rabbitmq-top`) now uses instead of Webmachine. Cowboy is a state-of-the-art open source Erlang HTTP 1.1 server and REST micro framework that is also used in the plugins that provide WebSocket support. The change is largely invisible to management UI and HTTP API clients but there are minor changes that can affect test suites: for example, `POST` and `PUT` responses now use `201 Created` instead of `204 No Content`. Plugins that extend management UI need to be ported to Cowboy REST and Cowboy 2. GitHub issue: Users tagged with `administrator` now implicitly have access to most operations in all vhosts, including those they don't have explicit permissions for. GitHub issue: User that creates a vhost is automatically granted full permissions in it. This is a usability improvement to the management UI. Note that this assumes that a user that has the permissions to create vhosts also has the permission to grant themselves permissions to any vhost, so this changes nothing in terms of security. GitHub issue: New HTTP API endpoint allows for bulk deletion of users. GitHub issue: Node endpoint now returns more information about . This is breaking change. GitHub issue: Report more TLS-related values via HTTP API The HTTP API now reports all SSL/TLS options available for the RabbitMQ server as well as for the management

GitHub issue: Topic authorisation permission management. GitHub issue: Dual IP Stack Support Management plugin now can be configured to use IPv6 or both IPv6 and IPv4. GitHub issue: "Get messages" in the UI now offers more requeueing options. This is a breaking change* for HTTP API clients as the list of accepted `ackmode` field values has . GitHub issue: These release notes are for the 4.0 release. Please see for information about later releases. Bump default TLS version to v1.2 with a fallback for older JDKs The Java client now attempts to use TLS v1.2 by default (which many RabbitMQ servers prefer due to vulnerabilities in TLS v1) but falls back to TLS v1 for older JDKs such as JDK 6. GitHub issue: Begin recovery after all shutdown listeners have been given a chance to run GitHub issue: `com.rabbitmq.client.Connection` and `com.rabbitmq.client.Channel` now implement `java.io.Closeable` GitHub issue: These release notes are for the 4.0 release. Please see for information about later releases. .NET Core support (as of .NET client `4.0.0`). GitHub issues: , , AppVeyor CI and NuGet feed of Nightly Builds GitHub issue: Topic authorisation. GitHub issues: , , . Client ID is propagated to . GitHub issue: QoS 2 subscriptions are downgraded to QoS 1 GitHub issue: Support for AMQP 1.0 and a foundation for more protocols supported in the future. This means cross-protocol shoveling (AMQP 0-9-1 to AMQP 1.0 or the other way around) is now supported. is now also available as a standalone project. GitHub issue: Message timestamping. Shovel now adds an extra header that contains the timestamp indicating when message was shovelled. GitHub issue: New CLI command that restarts a link. GitHub issue: Internal exchanges and queues are now cleaned up if the policy goes out of effect or the plugin is disabled. GitHub issue: Acting user information is now included into the emitted events where possible. GitHub issue: This release introduces a new sub-project, an , and AMQP 1.0 support in the Shovel plugin. Transfer frames are no longer sent before credit has been granted. GitHub issue: Ensure messages with `uint` TTL can round trip. GitHub issue: Topic authorisation support with variable expansion. GitHub issue: It is now possible to see how many messages are delayed in management UI GitHub issue: Connection operations now use a reasonable timeout. GitHub issue: Topic authorisation support with variable expansion. GitHub issue: To upgrade a non-clustered RabbitMQ simply install the new version. All configuration and persistent message data are retained. When upgrading using definitions export/import from versions earlier than 3.6.0, see http://rabbitmq.com/passwords.html. To upgrade a RabbitMQ cluster, follow the instructions . Warning: The source code archive provided by GitHub only contains the source of the broker, not the plugins, CLI tools or other sub-projects. Please download the archive named `rabbitmq-server-<version>.tar.xz` from this release page.