476 lines
24 KiB
Markdown
476 lines
24 KiB
Markdown
|
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](https://www.rabbitmq.com/changelog.html) unless stated otherwise.
|
||
|
|
||
|
Documentation for this release is available at [the RabbitMQ website](https://www.rabbitmq.com).
|
||
|
|
||
|
|
||
|
## Breaking Changes
|
||
|
|
||
|
* Minimum required Erlang/OTP version is now 19.3. Recent Erlang versions can be obtained from [Erlang Solutions](https://www.erlang-solutions.com/resources/download.html), [RabbitMQ zero dependency Erlang RPM](https://github.com/rabbitmq/erlang-rpm), as well as main and backports repositories of recent Ubuntu and Debian releases.
|
||
|
|
||
|
GitHub issues: [rabbitmq-server#1305](https://github.com/rabbitmq/rabbitmq-server/issues/1305), [rabbitmq-server#1307](https://github.com/rabbitmq/rabbitmq-server/issues/1307), [rabbitmq-common#234](https://github.com/rabbitmq/rabbitmq-common/pull/234).
|
||
|
|
||
|
* HTTP API has minor breaking changes in several endpoints (see below).
|
||
|
|
||
|
* .NET client is now [.NET Core-compatible](https://github.com/rabbitmq/rabbitmq-dotnet-client/issues/148).
|
||
|
Starting with `3.7.0`, [.NET client releases](https://github.com/rabbitmq/rabbitmq-dotnet-client/releases) are decoupled from RabbitMQ server releases and exclusively distributed via the [RabbitMQ.Client NuGet package](https://www.nuget.org/packages/RabbitMQ.Client/).
|
||
|
|
||
|
* Starting with `3.7.0`, [Java client releases](https://github.com/rabbitmq/rabbitmq-java-client/releases) are decoupled from RabbitMQ server releases and exclusively distributed via Maven: [RabbitMQ Milestones Maven repository](https://bintray.com/rabbitmq/maven-milestones), [RabbitMQ Maven repository](https://bintray.com/rabbitmq/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: [rabbitmq-management#461](https://github.com/rabbitmq/rabbitmq-management/issues/461)
|
||
|
|
||
|
* Plugins now must depend on the `rabbit` application [in order to be recognised as such by `rabbitmq-plugins list`](https://github.com/rabbitmq/rabbitmq-server/issues/1124).
|
||
|
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](https://groups.google.com/forum/#!searchin/rabbitmq-users/ANN$20rabbitmq_management_visualiser%7Csort:relevance/rabbitmq-users/WiHmPcmzNtI/YJ356EW4BAAJ) 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 Support
|
||
|
|
||
|
Erlang/OTP 20 has [breaking changes](https://groups.google.com/d/msg/rabbitmq-users/_imbAavBYjY/xHzMiGgMAgAJ) 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](https://github.com/rabbitmq/rabbitmq-server/issues/1243), [rabbitmq-server#1250](https://github.com/rabbitmq/rabbitmq-server/pull/1250), [rabbitmq-server#1268](https://github.com/rabbitmq/rabbitmq-server/pull/1268),
|
||
|
[rabbitmq-server#1272](https://github.com/rabbitmq/rabbitmq-server/issues/1272), [rabbitmq-federation#58](https://github.com/rabbitmq/rabbitmq-federation/pull/58), [rabbitmq-management-agent#47](https://github.com/rabbitmq/rabbitmq-management-agent/pull/47),
|
||
|
[rabbitmq-management#415](https://github.com/rabbitmq/rabbitmq-management/pull/415), [rabbitmq-stomp#115](https://github.com/rabbitmq/rabbitmq-stomp/issues/115)
|
||
|
|
||
|
|
||
|
### Core Server
|
||
|
|
||
|
#### Enhancements
|
||
|
|
||
|
* New configuration file format
|
||
|
|
||
|
RabbitMQ now supports a [new configuration file format](http://next.rabbitmq.com/configure.html#config-file).
|
||
|
The format is [based on sysctl](https://github.com/basho/cuttlefish/wiki/Cuttlefish-for-Application-Users)
|
||
|
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](http://next.rabbitmq.com), in particular [the configuration guide](http://next.rabbitmq.com/configure.html),
|
||
|
for more information.
|
||
|
|
||
|
GitHub issues: [rabbitmq-server#550](https://github.com/rabbitmq/rabbitmq-server/issues/550),
|
||
|
[rabbitmq-server#1103](https://github.com/rabbitmq/rabbitmq-server/pull/1103),
|
||
|
[rabbitmq-auth-backend-ldap#59](https://github.com/rabbitmq/rabbitmq-auth-backend-ldap/issues/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](https://github.com/rabbitmq/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:
|
||
|
|
||
|
* [AWS](https://github.com/rabbitmq/rabbitmq-peer-discovery-aws)
|
||
|
* [Consul](https://github.com/rabbitmq/rabbitmq-peer-discovery-consul)
|
||
|
* [etcd](https://github.com/rabbitmq/rabbitmq-peer-discovery-etcd)
|
||
|
* [Kubernetes](https://github.com/rabbitmq/rabbitmq-peer-discovery-k8s)
|
||
|
|
||
|
GitHub issues: [rabbitmq-server#486](https://github.com/rabbitmq/rabbitmq-server/issues/486), [rabbitmq-server#988](https://github.com/rabbitmq/rabbitmq-server/issues/988), [rabbitmq-server#1143](https://github.com/rabbitmq/rabbitmq-server/issues/1143)
|
||
|
[rabbitmq-server#1202](https://github.com/rabbitmq/rabbitmq-server/issues/1202), [rabbitmq-server#1171](https://github.com/rabbitmq/rabbitmq-server/issues/1171), [rabbitmq-server#1257](https://github.com/rabbitmq/rabbitmq-server/issues/1257), [rabbitmq-server#1247](https://github.com/rabbitmq/rabbitmq-server/issues/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](https://github.com/rabbitmq/rabbitmq-server/issues/1022),
|
||
|
[rabbitmq-server#487](https://github.com/rabbitmq/rabbitmq-server/issues/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](https://github.com/rabbitmq/rabbitmq-server/issues/567), [rabbitmq-server#1146](https://github.com/rabbitmq/rabbitmq-server/issues/1146), [rabbitmq-server#1280](https://github.com/rabbitmq/rabbitmq-server/issues/1280),
|
||
|
[rabbitmq-management#446](https://github.com/rabbitmq/rabbitmq-management/issues/446), [rabbitmq-server#1303](https://github.com/rabbitmq/rabbitmq-server/issues/1303), [rabbitmq-management#460](https://github.com/rabbitmq/rabbitmq-management/issues/460), [rabbitmq-server#1321](https://github.com/rabbitmq/rabbitmq-server/issues/1321)
|
||
|
|
||
|
* New [LevelDB-based message store index plugin](https://github.com/rabbitmq/rabbitmq-msg-store-index-eleveldb).
|
||
|
|
||
|
GitHub issue: [rabbitmq-server#838](https://github.com/rabbitmq/rabbitmq-server/issues/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](https://github.com/rabbitmq/rabbitmq-server/issues/691)
|
||
|
|
||
|
* Operators now can configure how many concurrent connections are allowed in a vhost.
|
||
|
|
||
|
GitHub issue: [rabbitmq-server#500](https://github.com/rabbitmq/rabbitmq-server/issues/500)
|
||
|
|
||
|
* Operators now can configure how many queues can exist in a vhost.
|
||
|
|
||
|
GitHub issue: [rabbitmq-server#501](https://github.com/rabbitmq/rabbitmq-server/issues/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](https://github.com/rabbitmq/rabbitmq-server/issues/930)
|
||
|
|
||
|
* It is now possible to configure a limited [prefetch value](https://www.rabbitmq.com/confirms.html) 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](https://www.rabbitmq.com/confirms.html) can cope with this
|
||
|
change before enabling it.
|
||
|
|
||
|
GitHub issue: [rabbitmq-server#1367](https://github.com/rabbitmq/rabbitmq-server/issues/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](https://github.com/rabbitmq/rabbitmq-server/issues/591), [rabbitmq-server#735](https://github.com/rabbitmq/rabbitmq-server/issues/735), [rabbitmq-server#1090](https://github.com/rabbitmq/rabbitmq-server/issues/1090)
|
||
|
|
||
|
* Lager-based logging: less [not prone to overload](https://s3.us-east-2.amazonaws.com/ferd.erlang-in-anger/text.v1.1.0.pdf), pluggable backends, debug log level, more flexibility in configuration.
|
||
|
|
||
|
RabbitMQ now uses [Lager](https://github.com/basho/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](http://next.rabbitmq.com/logging.html), [rabbitmq.conf.example](https://github.com/rabbitmq/rabbitmq-server/blob/master/docs/rabbitmq.conf.example) (new style config)
|
||
|
and [rabbitmq.config.example](https://github.com/rabbitmq/rabbitmq-server/blob/v3.7.x/docs/rabbitmq.config.example) (classic/advanced config format) to learn more.
|
||
|
|
||
|
GitHub issues: [rabbitmq-server#94](https://github.com/rabbitmq/rabbitmq-server/issues/94), [rabbitmq-website#418](https://github.com/rabbitmq/rabbitmq-website/issues/418)
|
||
|
|
||
|
* Topic authorisation built around topic exchanges. This includes support for certain variables,
|
||
|
such as virtual host and username.
|
||
|
|
||
|
GitHub issues: [rabbitmq-server#505](https://github.com/rabbitmq/rabbitmq-server/issues/505), [rabbitmq-server#1085](https://github.com/rabbitmq/rabbitmq-server/issues/1085), [rabbitmq-server#1099](https://github.com/rabbitmq/rabbitmq-server/issues/1099), [rabbitmq-server#1229](https://github.com/rabbitmq/rabbitmq-server/issues/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](https://github.com/rabbitmq/rabbitmq-server/issues/995)
|
||
|
|
||
|
* [Proxy Protocol](http://www.haproxy.org/download/1.8/doc/proxy-protocol.txt) support.
|
||
|
|
||
|
GitHub issue: [rabbitmq-server#589](https://github.com/rabbitmq/rabbitmq-server/issues/589)
|
||
|
|
||
|
* Deleting a vhost now will force close all connections in it.
|
||
|
|
||
|
GitHub issue: [rabbitmq-server#627](https://github.com/rabbitmq/rabbitmq-server/issues/627)
|
||
|
|
||
|
* Deleting a user account now will force close all of its connections.
|
||
|
|
||
|
GitHub issue: [rabbitmq-server#628](https://github.com/rabbitmq/rabbitmq-server/issues/628)
|
||
|
|
||
|
* OpenSUSE RPM package now supports systemd and requires Leap 42.2.
|
||
|
|
||
|
GitHub issue: [rabbitmq-server-release#31](https://github.com/rabbitmq/rabbitmq-server-release/pull/31)
|
||
|
|
||
|
* Standalone MacOS release now bundles Erlang 19.x.
|
||
|
|
||
|
GitHub issue: [rabbitmq-server-release#10](https://github.com/rabbitmq/rabbitmq-server-release/issues/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](https://github.com/rabbitmq/rabbitmq-server/issues/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](https://github.com/rabbitmq/rabbitmq-server/issues/710)
|
||
|
|
||
|
* Deletion of auto-delete and exclusive queues now leaves (debug) log entries
|
||
|
|
||
|
GitHub issue: [rabbitmq-server#590](https://github.com/rabbitmq/rabbitmq-server/issues/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](https://github.com/rabbitmq/rabbitmq-cli/issues/157)
|
||
|
|
||
|
#### Bug Fixes
|
||
|
|
||
|
* Mirrored queue could terminate if a policy is re-applied concurrently after promotion
|
||
|
|
||
|
GitHub issue: [rabbitmq-server#803](https://github.com/rabbitmq/rabbitmq-server/issues/803)
|
||
|
|
||
|
* Old incarnations of queue mirrors are stopped before new ones start
|
||
|
|
||
|
GitHub issue: [rabbitmq-server#863](https://github.com/rabbitmq/rabbitmq-server/issues/863)
|
||
|
|
||
|
* Channel interceptors are enabled/disabled together with plugins
|
||
|
|
||
|
GitHub issue: [rabbitmq-server#559](https://github.com/rabbitmq/rabbitmq-server/issues/559)
|
||
|
|
||
|
|
||
|
### CLI Tools
|
||
|
|
||
|
CLI tools were [significatnly redesigned](https://groups.google.com/forum/#!searchin/rabbitmq-users/ANN$20New$20CLI$20tools%7Csort:relevance/rabbitmq-users/x0XugmBt-IE/t2wdjIdSBgAJ),
|
||
|
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](https://github.com/rabbitmq/rabbitmq-server/issues/577), [rabbitmq-cli#38](https://github.com/rabbitmq/rabbitmq-cli/issues/38), [rabbitmq-server#1085](https://github.com/rabbitmq/rabbitmq-server/issues/1085),
|
||
|
[rabbitmq-cli#10](https://github.com/rabbitmq/rabbitmq-cli/issues/10), [rabbitmq-cli#178](https://github.com/rabbitmq/rabbitmq-cli/issues/178), [rabbitmq-cli#180](https://github.com/rabbitmq/rabbitmq-cli/issues/180).
|
||
|
|
||
|
#### Enhancements
|
||
|
|
||
|
* New CLI command for closing connections in bulk (e.g. a specific vhost).
|
||
|
|
||
|
GitHub issue: [rabbitmq-server#849](https://github.com/rabbitmq/rabbitmq-server/issues/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](https://github.com/rabbitmq/rabbitmq-cli/issues/144)
|
||
|
|
||
|
* New CLI command that lists non-AMQP connections (e.g. MQTT).
|
||
|
|
||
|
GitHub issue: [rabbitmq-cli#121](https://github.com/rabbitmq/rabbitmq-cli/issues/121)
|
||
|
|
||
|
* New CLI command that outputs effective Erlang cookie hash.
|
||
|
|
||
|
GitHub issue: [rabbitmq-cli#151](https://github.com/rabbitmq/rabbitmq-cli/issues/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](https://github.com/rabbitmq/rabbitmq-server/issues/1124)
|
||
|
|
||
|
|
||
|
|
||
|
### Management plugin
|
||
|
|
||
|
#### Enhancements
|
||
|
|
||
|
* Statistics database is now distributed across the cluster: each nodes stores its own stats.
|
||
|
|
||
|
GitHub issue: [rabbitmq-management#236](https://github.com/rabbitmq/rabbitmq-management/issues/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](http://ninenines.eu/docs/en/cowboy/HEAD/guide/rest_handlers/)
|
||
|
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](https://github.com/rabbitmq/rabbitmq-management/issues/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](https://github.com/rabbitmq/rabbitmq-management/issues/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](https://github.com/rabbitmq/rabbitmq-management/issues/445)
|
||
|
|
||
|
* New HTTP API endpoint allows for bulk deletion of users.
|
||
|
|
||
|
GitHub issue: [rabbitmq-management#448](https://github.com/rabbitmq/rabbitmq-management/issues/448)
|
||
|
|
||
|
* Node endpoint now returns more information about [memory use breakdown](http://next.rabbitmq.com/memory-use.html).
|
||
|
This is **breaking change**.
|
||
|
|
||
|
GitHub issue: [rabbitmq-management#499](https://github.com/rabbitmq/rabbitmq-management/issues/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](https://github.com/rabbitmq/rabbitmq-management/issues/163)
|
||
|
|
||
|
* Topic authorisation permission management.
|
||
|
|
||
|
GitHub issue: [rabbitmq-management#405](https://github.com/rabbitmq/rabbitmq-management/issues/405)
|
||
|
|
||
|
* Dual IP Stack Support
|
||
|
|
||
|
Management plugin now can be configured to use IPv6 or both IPv6 and IPv4.
|
||
|
|
||
|
GitHub issue: [rabbitmq-management#64](https://github.com/rabbitmq/rabbitmq-management/issues/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](https://rawcdn.githack.com/rabbitmq/rabbitmq-management/v3.7.0/priv/www/api/index.html).
|
||
|
|
||
|
GitHub issue: [rabbitmq-management#68](https://github.com/rabbitmq/rabbitmq-management/issues/68)
|
||
|
|
||
|
|
||
|
### Java client
|
||
|
|
||
|
These release notes are for the 4.0 release. Please see [Java client release notes](https://github.com/rabbitmq/rabbitmq-java-client/releases)
|
||
|
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](https://github.com/rabbitmq/rabbitmq-java-client/issues/139)
|
||
|
|
||
|
* Begin recovery after all shutdown listeners have been given a chance to run
|
||
|
|
||
|
GitHub issue: [rabbitmq-java-client#135](https://github.com/rabbitmq/rabbitmq-java-client/issues/135)
|
||
|
|
||
|
* `com.rabbitmq.client.Connection` and `com.rabbitmq.client.Channel` now implement `java.io.Closeable`
|
||
|
|
||
|
GitHub issue: [rabbitmq-java-client#131](https://github.com/rabbitmq/rabbitmq-java-client/issues/131)
|
||
|
|
||
|
|
||
|
### .NET Client
|
||
|
|
||
|
These release notes are for the 4.0 release. Please see [.NET client release notes](https://github.com/rabbitmq/rabbitmq-dotnet-client/releases)
|
||
|
for information about later releases.
|
||
|
|
||
|
#### Enhancements
|
||
|
|
||
|
* .NET Core support (as of .NET client `4.0.0`).
|
||
|
|
||
|
GitHub issues: [rabbitmq-dotnet-client#148](https://github.com/rabbitmq/rabbitmq-dotnet-client/issues/148), [rabbitmq-dotnet-client#213](https://github.com/rabbitmq/rabbitmq-dotnet-client/issues/213), [rabbitmq-dotnet-client#206](https://github.com/rabbitmq/rabbitmq-dotnet-client/issues/206)
|
||
|
|
||
|
* AppVeyor CI and NuGet feed of Nightly Builds
|
||
|
|
||
|
GitHub issue: [rabbitmq-dotnet-client#206](https://github.com/rabbitmq/rabbitmq-dotnet-client/issues/206)
|
||
|
|
||
|
|
||
|
### MQTT plugin
|
||
|
|
||
|
#### Enhancements
|
||
|
|
||
|
* Topic authorisation.
|
||
|
|
||
|
GitHub issues: [rabbitmq-mqtt#95](https://github.com/rabbitmq/rabbitmq-mqtt/issues/95), [rabbitmq-server#505](https://github.com/rabbitmq/rabbitmq-server/issues/505), [rabbitmq-mqtt#114](https://github.com/rabbitmq/rabbitmq-mqtt/issues/114).
|
||
|
|
||
|
* Client ID is propagated to [authentication backends](http://rabbitmq.com/access-control.html).
|
||
|
|
||
|
GitHub issue: [rabbitmq-mqtt#139](https://github.com/rabbitmq/rabbitmq-mqtt/issues/139)
|
||
|
|
||
|
* QoS 2 subscriptions are downgraded to QoS 1
|
||
|
|
||
|
GitHub issue: [rabbitmq-mqtt#21](https://github.com/rabbitmq/rabbitmq-mqtt/issues/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](https://github.com/rabbitmq/rabbitmq-amqp1.0-client) is now also available
|
||
|
as a standalone project.
|
||
|
|
||
|
GitHub issue: [rabbitmq-shovel#26](https://github.com/rabbitmq/rabbitmq-shovel/issues/26)
|
||
|
|
||
|
* Message timestamping.
|
||
|
|
||
|
Shovel now adds an extra header that contains the timestamp
|
||
|
indicating when message was shovelled.
|
||
|
|
||
|
GitHub issue: [rabbitmq-shovel#2](https://github.com/rabbitmq/rabbitmq-shovel/issues/2)
|
||
|
|
||
|
|
||
|
### Federation Plugin
|
||
|
|
||
|
#### Enhancements
|
||
|
|
||
|
* New CLI command that restarts a link.
|
||
|
|
||
|
GitHub issue: [rabbitmq-federation#45](https://github.com/rabbitmq/rabbitmq-federation/issues/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](https://github.com/rabbitmq/rabbitmq-federation/issues/63)
|
||
|
|
||
|
### Event Exchange Plugin
|
||
|
|
||
|
#### Enhancements
|
||
|
|
||
|
* Acting user information is now included into the emitted events where possible.
|
||
|
|
||
|
GitHub issue: [rabbitmq-event-exchange#10](https://github.com/rabbitmq/rabbitmq-event-exchange/issues/10)
|
||
|
|
||
|
|
||
|
### AMQP 1.0 Plugin
|
||
|
|
||
|
This release introduces a new sub-project, an [Erlang client for AMQP 1.0](https://github.com/rabbitmq/rabbitmq-amqp1.0-client), 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](https://github.com/rabbitmq/rabbitmq-amqp1.0/issues/43)
|
||
|
|
||
|
* Ensure messages with `uint` TTL can round trip.
|
||
|
|
||
|
GitHub issue: [rabbitmq-amqp1.0#13](https://github.com/rabbitmq/rabbitmq-amqp1.0/issues/13)
|
||
|
|
||
|
|
||
|
### LDAP Authn/Authz Backend
|
||
|
|
||
|
#### Enhancements
|
||
|
|
||
|
* Topic authorisation support with variable expansion.
|
||
|
|
||
|
GitHub issue: [rabbitmq-auth-backend-ldap#71](https://github.com/rabbitmq/rabbitmq-auth-backend-ldap/issues/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](https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/issues/3)
|
||
|
|
||
|
|
||
|
### Erlang Client
|
||
|
|
||
|
#### Bug Fixes
|
||
|
|
||
|
* Connection operations now use a reasonable timeout.
|
||
|
|
||
|
GitHub issue: [rabbitmq-erlang-client#85](https://github.com/rabbitmq/rabbitmq-erlang-client/issues/85)
|
||
|
|
||
|
|
||
|
### AMQP 0-9-1 Authn/Authz Backend
|
||
|
|
||
|
* Topic authorisation support with variable expansion.
|
||
|
|
||
|
GitHub issue: [rabbitmq-auth-backend-amqp#16](https://github.com/rabbitmq/rabbitmq-auth-backend-amqp/issues/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](https://www.rabbitmq.com/clustering.html#upgrading).
|
||
|
|
||
|
## 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.
|