File: 3.7.0.md

package info (click to toggle)
rabbitmq-server 4.0.5-6
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 37,948 kB
  • sloc: erlang: 257,835; javascript: 22,466; sh: 2,796; makefile: 2,517; python: 1,966; xml: 646; cs: 335; java: 244; ruby: 212; php: 100; perl: 63; awk: 13
file content (475 lines) | stat: -rw-r--r-- 25,109 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
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.