RabbitMQ 3.7.0
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.
Breaking Changes
-
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 with3.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 byrabbitmq-plugins list
.
Plugins that do not have the dependency will still function, can be enabled or disabled but won't appear
inrabbitmq-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 usingrabbitmq-plugins disable
(which supports offline modifications)
or by updating the list of plugins inRABBITMQ_ENABLED_PLUGINS_FILE
.
Erlang/OTP 20 Support
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
Core Server
Enhancements
-
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 bothrabbitmq.conf
andadvanced.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 authorization 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
,
andx-first-death-exchange
— in addition to thex-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 the0..1.0
range.GitHub issue: rabbitmq-cli#157
Bug Fixes
-
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
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.
Enhancements
-
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 asrabbit_diagnostics:maybe_stuck/0
viarabbitmqctl 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
Management plugin
Enhancements
-
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
andPUT
responses now use201 Created
instead of204 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 authorization 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 acceptedackmode
field values has changed.GitHub issue: rabbitmq-management#68
Java client
These release notes are for the 4.0 release. Please see Java client release notes
for information about later releases.
Enhancements
-
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
andcom.rabbitmq.client.Channel
now implementjava.io.Closeable
GitHub issue: rabbitmq-java-client#131
.NET Client
These release notes are for the 4.0 release. Please see .NET client release notes
for information about later releases.
Enhancements
-
.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
MQTT plugin
Enhancements
-
Topic authorization.
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
Shovel Plugin
Enhancements
-
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
Federation Plugin
Enhancements
-
New CLI command that restarts a link.
GitHub issue: rabbitmq-federation#45
Bug Fixes
-
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
Event Exchange Plugin
Enhancements
-
Acting user information is now included into the emitted events where possible.
GitHub issue: rabbitmq-event-exchange#10
AMQP 1.0 Plugin
This release introduces a new sub-project, an Erlang client for AMQP 1.0, and AMQP 1.0 support
in the Shovel plugin.
Bug Fixes
-
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
LDAP Authn/Authz Backend
Enhancements
-
Topic authorization support with variable expansion.
GitHub issue: rabbitmq-auth-backend-ldap#71
Delayed Message Exchange Plugin
Enhancements
-
It is now possible to see how many messages are delayed in management UI
GitHub issue: rabbitmq-delayed-message-exchange#3
Erlang Client
Bug Fixes
-
Connection operations now use a reasonable timeout.
GitHub issue: rabbitmq-erlang-client#85
AMQP 0-9-1 Authn/Authz Backend
-
Topic authorization support with variable expansion.
GitHub issue: rabbitmq-auth-backend-amqp#16
Upgrading
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.
Source code archives
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.