RabbitMQ 3.6.0

@michaelklishin michaelklishin released this Dec 22, 2015 · 1420 commits to master since this release

Release Highlights

These are the release notes for RabbitMQ 3.6.0. This is a feature release.
It has breaking changes in a few areas:

  • Minimum required Erlang version is R16B03 for plain ("just TCP") connections for all protocols and 17.5 for TLS ones (18.x is recommended for both).
  • Password hashing function is now SHA-256 by default: please read the docs before importing definitions from 3.5.x!
  • When RABBITMQ_NODENAME is not explicitly configured, hostname on Windows will be lowercased by default.
  • .NET client now requires .NET 4.5.
  • "Immediate" flag is removed from the .NET client (it hasn't been supported by the server since RabbitMQ 3.0).
  • Default subscription TTL in MQTT is now 24 hours.
  • Server artifacts are now distributed as xz archives and not gz.
  • Build system has been completely reworked and now uses erlang.mk. 3rd party plugins must be adapted to the new build system.

Key improvements in this release are:

  • Lazy queues
  • Much better queue synchronisation throughput
  • Lower RAM use, tunable flow control
  • Stronger password encryption with pluggable algorithms
  • Development moved to GitHub; build system now uses erlang.mk
  • Significant improvements to Web STOMP
  • Experimental WinRT-compatible .NET client, SQL CLR compatibility in the "regular" one
  • Pagination in management UI
  • More popular plugins now ship with the broker: rabbitmq_sharding and rabbitmq_event_exchange, for example.

Server

Bug Fixes

  • Cluster-wide alarm state is not updated when alarmed node goes down.

    Contributed by Alexey Lebedeff (@binarin).

    GitHub issue: rabbitmq-server#362

  • Blocked connections could be unblocked too early.

    When multiple resource alarms were in effect, clearing just one of them would
    unblock all publishers prematurely.

    Contributed by Alexey Lebedeff (@binarin).

    GitHub issue: rabbitmq-server#379

  • Blocked connections that are closed by clients are now expired
    and cleaned up by the heartbeat mechanism.

    Contributed by Alexey Lebedeff (@binarin).

    GitHub issue: rabbitmq-server#384

  • If RABBITMQ_MNESIA_DIR was set to a value with a trailing slash, it could prevent
    automatic clustering (and other operations that assume pristine node state) from starting.

    GitHub issue: rabbitmq-server#118

  • Standard output and error redirection in package scripts not respects RABBITMQ_LOG_BASE.

    GitHub issue: rabbitmq-server#88

  • Properly seed pseudo-random number generator when picking client port

    Contributed by Alexey Lebedeff (@binarin).

    GitHub issue: rabbitmq-common#3

  • RABBITMQ_ALLOW_INPUT was ignored on Windows

    GitHub issue: rabbitmq-server#490

Enhancements

  • Lazy queues.

    Lazy queues is a new feature that can significantly reduce the RAM cost of queues
    that can grow very long (e.g. don't have consumers online for hours or day).
    Such queues page messages to disk as they enter the queue.

    This feature is opt-in and has virtually no overhead for consumers in most cases,
    making throughput for publishers much more even, and also reduce RAM usage.

    GitHub issue: rabbitmq-server#351

  • Queue synchronisation to mirrors now happens in batches of configurable size,
    4096 messages by default. This can improve sync throughput by an order of magnitude.

    GitHub issue: rabbitmq-server#336

  • Queue master-to-node distribution is now more flexible: there are several
    strategies to choose from.

    GitHub issue: rabbitmq-server#121

  • Stronger password encryption algorithm.

    SHA-256 is the hashing function used by default now, with SHA-512 being an option provided
    out of the box. Support for more options (Scrypt, bcrypt, etc) can be added with plugins.

    Existing user records will continue using MD5. To force re-hashing/encryption, change
    user password using rabbitmqctl or management UI/HTTP API.

    This should improve FIPS-180 compatibility.

    GitHub issue: rabbitmq-server#270

  • Lower RAM use thanks to disabled in-process caching.

    RabbitMQ's in-process read buffers are now disabled by default. This often significantly
    reduces RAM usage at effectively no throughput or latency cost because the OS and file
    system do the same job fairly well.

    GitHub issue: rabbitmq-server#228

  • Configurable flow control settings

    Note that larger values will not necessarily lead to higher throughput or lower latency.
    They can also result in larger RAM use and therefore can be dangerous.

    GitHub issue: rabbitmq-server#143

  • Build system switched to erlang.mk.

    erlang.mk is a modern build system for Erlang
    projects. RabbitMQ and all of its sub-projects have been switched to it.

    This yields several benefits for RabbitMQ maintainers and plugin developers,
    for example, dependency management for plugins is much more straightforward, build
    times are significantly improved, there is no need to depend on rabbitmq-server for most
    plugins.

    Various 3rd party plugins need to migrate to erlang.mk in order to be built against
    RabbitMQ 3.6.0 (rabbit_common). See the new plugin development guide here.

    GitHub issue: rabbitmq-server#388

  • Streaming rabbitmqctl: rabbitmqctl list operations now stream results
    instead of waiting for the entire result set to arrive. This both improves
    responsiveness and makes it possible to list individual items, including those
    which did not respond in time.

    GitHub issue: rabbitmq-server#62

  • (More) standard exit codes for command line tools

    rabbitmqctl and rabbitmq-plugins now use more standard, or at least distinctive,
    error codes for various failures.

    Contributed by Alexey Lebedeff (@binarin).

    GitHub issue: rabbitmq-server#396

  • Improved log message for channel exceptions.

    GitHub issues: rabbitmq-server#416

  • Improved log message when a client's TCP connection is closed unexpectedly.

    GitHub issue: rabbitmq-server#60

  • Improved log message when a client connects to a non-existent vhost

    GitHub issue: rabbitmq-server#320

  • Improved log message for access_refused connection errors.

    GitHub issue: rabbitmq-server#418

  • Improved log message for command_invalid connection errors.

    GitHub issue: rabbitmq-server#419

  • More sensible error code when a client connects to a non-existent vhost (or vhost it has
    no permissions for). The code returned is now 530.

    GitHub issue: rabbitmq-server#237

  • Memory monitoring interval is now configurable.

    GitHub issue: rabbitmq-server#112

  • Prevent background GC interval from becoming too large due to backoff.

    Contributed by Dallas Marlow (@dallasmarlow).

    GitHub issue: rabbitmq-server#100

  • Windows installer now supports "unattended" NSIS installs.

    Contributed by Ryan Zink (@ryanzink).

    GitHub issue: rabbitmq-server#264

  • Windows package name now includes RabbitMQ version it provides.

    GitHub issue: rabbitmq-server#80

  • kernel.net_ticktime is now included into rabbitmqctl status output.

    GitHub issue: rabbitmq-server#63

  • rabbitmqctl now has a command for setting up free disk space limit at runtime.

    GitHub issue: rabbitmq-server#461

  • Backup directory location is now mentioned in failed upgrade messages.

    GitHub issue: rabbitmq-server#169

Other

  • Erlang R16B03 is now required.

    17.5 or 18.x are recommended.

    GitHub issue: rabbitmq-server#250

  • Use/support new Erlang/OTP 18 date and time API.

    Only when it is available, of course.

    GitHub issue: rabbitmq-server#233

  • RabbitMQ server now supports tracing of credit flow events (e.g. when a process is blocked
    by credit flow). This is currently a compile-time flag aimed to be used in development
    environments.

    GitHub issue: rabbitmq-server#137

Java Client

Enhancements

  • Shutdown threads can use an executor.

    In environments with very constrainted per-process thread reasources, e.g. basic PaaS plans,
    temporary threads created during connection shutdown may make the app run over the limit.

    It is now possible to use a user-provided executor for shutdown operations instead.

    GitHub issue: rabbitmq-java-client#87

  • ChannelManager now can use an executor.

    Similar to the above but for ChannelManager operations.

    GitHub issue: rabbitmq-java-client#94

  • Channel#consumerCount(string) is a new convenience method for retrieving number of consumers on a queue.

    GitHub issue: rabbitmq-java-client#49

  • Channel#messageCount(string) is a new convenience method for retrieving number of messages in a queue.

    GitHub issue: rabbitmq-java-client#41

  • LongString#toString is part of the API

    GitHub issue: rabbitmq-java-client#84

.NET Client

Enhancements

  • Host/address list support is back. Host selection strategy (when recovering a connection) is now pluggable.

    GitHub issue: rabbitmq-dotnet-client#81

  • Experimental .NET client with Windows RT support is now available.

    GitHub issue: rabbitmq-dotnet-client#16

  • SQL CLR compatibility.

    GitHub issue: rabbitmq-dotnet-client#57

  • IModel#ConsumerCount(string) is a new convenience method for retrieving number of consumers on a queue.

    GitHub issue: rabbitmq-dotnet-client#73

  • IModel#MessageCount(string) is a new convenience method for retrieving number of messages in a queue.

    GitHub issue: rabbitmq-dotnet-client#74

  • Continuation timeout is now configurable.

    GitHub issue: rabbitmq-dotnet-client#80

  • RabbitMQ.Client.Headers is a new class that contains constants for commonly used headers.

    Contributed by Yury Pliner (@Pliner).

    GitHub issue:

Other

Management plugin

Enhancements

  • Pagination for connections, channels, exchanges, and queues.

    Management UI now supports pagination, making the UI much more responsive
    in environments with many connections, queues, etc.

    GitHub issue: rabbitmq-management#50

  • Queue information objects in responses now have a boolean property for queue
    exclusivity instead of a confusing owner_pid.

    GitHub issue: rabbitmq-management#40

Bug Fixes

  • Connection and channel filtering should respect active vhost.

    GitHub issue: rabbitmq-management#34

  • GET requests to /api/queues/{vhost}/{name}/get now accept/provide application/json

    GitHub issue: rabbitmq-management#46

MQTT plugin

Enhancements

  • Default subscription TTL is now 24 hours instead
    of 30 minutes. If you don't override this value, this is a breaking change that may require deletion
    of the queues that back existing durable (QoS 1) subscriptions. New subscribers won't be affected.

    GitHub issue: rabbitmq-mqtt#49

  • Pluggable retained message stores. Since MQTT 3.1.1 spec doesn't dictate any consistency
    or availability from the store in clustered environments, we only provide an in-memory implementation
    suitable for development environments with a single node. For production environments, plugins that
    provide stores with specific consistency guarantees are expected to be developed.

    GitHub issue: rabbitmq-mqtt#16

  • Socket-based authentication plugins now can work with plugins such as MQTT and STOMP
    (those using direct Erlang client).

    Contributed by Petr Gotthard (@gotthardp).

    GitHub issue: rabbitmq-server#111

STOMP plugin

Enhancement

  • Control over queue properties.

    It is now possible to control queue properties (durable, auto-delete, exclusive plus several
    supported x-arguments) for all STOMP destinations.

    When using durable topics, it is now necessary to configure queue auto-deletion to false
    explicitly via a header.

    GitHub issue: rabbitmq-stomp#24

  • Socket-based authentication plugins now can work with plugins such as MQTT and STOMP
    (those using direct Erlang client).

    Contributed by Petr Gotthard (@gotthardp).

    GitHub issue: rabbitmq-server#111

Web STOMP plugin

Enhancements

  • Raw WebSocket endpoint.

    The plugin now supports a new endpoint, /ws, which supports WebSocket connections directly
    without the need to use SockJS.

    GitHub issue: rabbitmq-web-stomp#17.

  • Support for binary data streams.

    Thanks to the new direct WebSocket support, binary data now can be transferred over
    Web STOMP connections.

    GitHub issue: rabbitmq-web-stomp#19

  • STOMP heartbeat support.

    GitHub issue: rabbitmq-web-stomp#15

  • Heartbeats are disabled for SockJS.

    GitHub issue: rabbitmq-web-stomp#28

  • CORS headers support

    GitHub issue: rabbitmq-web-stomp#12

  • Cowboy configuration.

    Key settings of Cowboy, the HTTP/WebSocket server powering the plugin, now can be fine tuned
    via this plugin.

    GitHub issue: rabbitmq-web-stomp#22

  • Cowboy is upgraded to 1.0.3

    GitHub issue: rabbitmq-web-stomp#13

  • SockJS is upgraded to 1.0.3.

    GitHub issue: rabbitmq-web-stomp#4

  • Queue parameters now can be configured via headers (just like in the regular STOMP plugin).

    GitHub issue: rabbitmq-web-stomp#7

  • Address Web STOMP listener binds to now can be configured.
    Previously only port was configurable.

    GitHub issue: rabbitmq-web-stomp#2

LDAP plugin

Enhancements

Sharding plugin

Enhancements

Delayed Message Exchange

Enhancement

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 or the client libraries. Please download the archive named rabbitmq-3.6.0.tar.gz.

Downloads