release-notes/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 3.6.x release series unless stated otherwise.
Documentation for this release is available at the RabbitMQ website.
Minimum required Erlang/OTP version is now 19.3. Recent Erlang versions can be obtained from Erlang Solutions, RabbitMQ zero dependency Erlang RPM, as well as main and backports repositories of recent Ubuntu and Debian releases.
GitHub issues: rabbitmq-server#1305, rabbitmq-server#1307, rabbitmq-common#234.
HTTP API has minor breaking changes in several endpoints (see below).
.NET client is now .NET Core-compatible.
Starting with 3.7.0, .NET client releases are decoupled from RabbitMQ server releases and exclusively distributed via the RabbitMQ.Client NuGet package.
Starting with 3.7.0, Java client releases are decoupled from RabbitMQ server releases and exclusively distributed via Maven: RabbitMQ Milestones Maven repository, RabbitMQ Maven repository, 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: rabbitmq-management#461
Plugins now must depend on the rabbit application in order to be recognised as such by rabbitmq-plugins list.
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 no longer ships with RabbitMQ 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 RABBITMQ_ENABLED_PLUGINS_FILE.
Erlang/OTP 20 has breaking changes 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: rabbitmq-server#1243, rabbitmq-server#1250, rabbitmq-server#1268, rabbitmq-server#1272, rabbitmq-federation#58, rabbitmq-management-agent#47, rabbitmq-management#415, rabbitmq-stomp#115
New configuration file format
RabbitMQ now supports a new configuration file format.
The format is based on sysctl
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 next.rabbitmq.com, in particular the configuration guide, for more information.
GitHub issues: rabbitmq-server#550, rabbitmq-server#1103, rabbitmq-auth-backend-ldap#59
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 rabbitmq-autocluster 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: rabbitmq-server#486, rabbitmq-server#988, rabbitmq-server#1143 rabbitmq-server#1202, rabbitmq-server#1171, rabbitmq-server#1257, rabbitmq-server#1247
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: rabbitmq-server#1022, rabbitmq-server#487
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 future.
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: rabbitmq-server#567, rabbitmq-server#1146, rabbitmq-server#1280, rabbitmq-management#446, rabbitmq-server#1303, rabbitmq-management#460, rabbitmq-server#1321
New LevelDB-based message store index plugin.
GitHub issue: rabbitmq-server#838
Support config file path values with and without file extensions
RabbitMQ no longer requires RABBITMQ_CONFIG_FILE 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: rabbitmq-server#691
Operators now can configure how many concurrent connections are allowed in a vhost.
GitHub issue: rabbitmq-server#500
Operators now can configure how many queues can exist in a vhost.
GitHub issue: rabbitmq-server#501
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: rabbitmq-server#930
It is now possible to configure a limited prefetch value 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 manual acknowledgements can cope with this change before enabling it.
GitHub issue: rabbitmq-server#1367
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: rabbitmq-server#591, rabbitmq-server#735, rabbitmq-server#1090
Lager-based logging: less not prone to overload, pluggable backends, debug log level, more flexibility in configuration.
RabbitMQ now uses Lager 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 RabbitMQ 3.7.0 logging guide, rabbitmq.conf.example (new style config) and rabbitmq.config.example (classic/advanced config format) to learn more.
GitHub issues: rabbitmq-server#94, rabbitmq-website#418
Topic authorisation built around topic exchanges. This includes support for certain variables, such as virtual host and username.
GitHub issues: rabbitmq-server#505, rabbitmq-server#1085, rabbitmq-server#1099, rabbitmq-server#1229
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: rabbitmq-server#995
Proxy Protocol support.
GitHub issue: rabbitmq-server#589
Deleting a vhost now will force close all connections in it.
GitHub issue: rabbitmq-server#627
Deleting a user account now will force close all of its connections.
GitHub issue: rabbitmq-server#628
OpenSUSE RPM package now supports systemd and requires Leap 42.2.
GitHub issue: rabbitmq-server-release#31
Standalone MacOS release now bundles Erlang 19.x.
GitHub issue: rabbitmq-server-release#10
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 entries.
GitHub issue: rabbitmq-server#1332
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: rabbitmq-server#710
Deletion of auto-delete and exclusive queues now leaves (debug) log entries
GitHub issue: rabbitmq-server#590
rabbitmqctl set_vm_high_watermark now produces more useful error messages when
relative values provided are outside of the 0..1.0 range.
GitHub issue: rabbitmq-cli#157
Mirrored queue could terminate if a policy is re-applied concurrently after promotion
GitHub issue: rabbitmq-server#803
Old incarnations of queue mirrors are stopped before new ones start
GitHub issue: rabbitmq-server#863
Channel interceptors are enabled/disabled together with plugins
GitHub issue: rabbitmq-server#559
CLI tools were significatnly redesigned,
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: rabbitmq-server#577, rabbitmq-cli#38, rabbitmq-server#1085, rabbitmq-cli#10, rabbitmq-cli#178, rabbitmq-cli#180.
New CLI command for closing connections in bulk (e.g. a specific vhost).
GitHub issue: rabbitmq-server#849
New CLI command for detecting potentially stuck
processes (previously invoked as rabbit_diagnostics:maybe_stuck/0 via rabbitmqctl eval).
GitHub issue: rabbitmq-cli#144
New CLI command that lists non-AMQP connections (e.g. MQTT).
GitHub issue: rabbitmq-cli#121
New CLI command that outputs effective Erlang cookie hash.
GitHub issue: rabbitmq-cli#151
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: rabbitmq-server#1124
Statistics database is now distributed across the cluster: each nodes stores its own stats.
GitHub issue: rabbitmq-management#236
Migration to Cowboy REST
RabbitMQ management plugin as well as its extensions (e.g. those of
Federation and Shovel, rabbitmq-top) now uses Cowboy REST
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: rabbitmq-management#63
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: rabbitmq-management#461
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: rabbitmq-management#445
New HTTP API endpoint allows for bulk deletion of users.
GitHub issue: rabbitmq-management#448
Node endpoint now returns more information about memory use breakdown. This is breaking change.
GitHub issue: rabbitmq-management#499
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 plugin.
GitHub issue: rabbitmq-management#163
Topic authorisation permission management.
GitHub issue: rabbitmq-management#405
Dual IP Stack Support
Management plugin now can be configured to use IPv6 or both IPv6 and IPv4.
GitHub issue: rabbitmq-management#64
"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 changed.
GitHub issue: rabbitmq-management#68
These release notes are for the 4.0 release. Please see Java client release notes 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: rabbitmq-java-client#139
Begin recovery after all shutdown listeners have been given a chance to run
GitHub issue: rabbitmq-java-client#135
com.rabbitmq.client.Connection and com.rabbitmq.client.Channel now implement java.io.Closeable
GitHub issue: rabbitmq-java-client#131
These release notes are for the 4.0 release. Please see .NET client release notes for information about later releases.
.NET Core support (as of .NET client 4.0.0).
GitHub issues: rabbitmq-dotnet-client#148, rabbitmq-dotnet-client#213, rabbitmq-dotnet-client#206
AppVeyor CI and NuGet feed of Nightly Builds
GitHub issue: rabbitmq-dotnet-client#206
Topic authorisation.
GitHub issues: rabbitmq-mqtt#95, rabbitmq-server#505, rabbitmq-mqtt#114.
Client ID is propagated to authentication backends.
GitHub issue: rabbitmq-mqtt#139
QoS 2 subscriptions are downgraded to QoS 1
GitHub issue: rabbitmq-mqtt#21
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. Erlang client for AMQP 1.0 is now also available as a standalone project.
GitHub issue: rabbitmq-shovel#26
Message timestamping.
Shovel now adds an extra header that contains the timestamp indicating when message was shovelled.
GitHub issue: rabbitmq-shovel#2
New CLI command that restarts a link.
GitHub issue: rabbitmq-federation#45
Internal exchanges and queues are now cleaned up if the policy goes out of effect or the plugin is disabled.
GitHub issue: rabbitmq-federation#63
Acting user information is now included into the emitted events where possible.
GitHub issue: rabbitmq-event-exchange#10
This release introduces a new sub-project, an Erlang client for AMQP 1.0, and AMQP 1.0 support in the Shovel plugin.
Transfer frames are no longer sent before credit has been granted.
GitHub issue: rabbitmq-amqp1.0#43
Ensure messages with uint TTL can round trip.
GitHub issue: rabbitmq-amqp1.0#13
Topic authorisation support with variable expansion.
GitHub issue: rabbitmq-auth-backend-ldap#71
It is now possible to see how many messages are delayed in management UI
GitHub issue: rabbitmq-delayed-message-exchange#3
Connection operations now use a reasonable timeout.
GitHub issue: rabbitmq-erlang-client#85
Topic authorisation support with variable expansion.
GitHub issue: rabbitmq-auth-backend-amqp#16
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 in RabbitMQ documentation.
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.