Skip to content

Releases: rabbitmq/rabbitmq-server

RabbitMQ 3.6.2

09 Mar 15:48
Compare
Choose a tag to compare

RabbitMQ 3.6.2

RabbitMQ 3.6.2 is a maintenance release that includes a new statistics
collector in the management plugin
.

Management Plugin Incompatibility with Earlier 3.6.x Releases

Because this version includes significant changes to the management plugin,
it should not be deployed into clusters with mixed 3.6.x node versions
unless all nodes that have the management plugin enabled run 3.6.2.
Otherwise HTTP API requests will fail with exceptions in some scenarios and parts of
management UI may not be updated.

There are no other known incompatibilities with earlier 3.6.x releases.

OpenSSL Requirement for Standalone Mac Release

Standalone Mac OS X package now requires OpenSSL 1.0.x to be provided by the system, for example,
from Homebrew.

Optional socat Package Dependency for Distributions that Use systemd

Starting with 3.6.2, RabbitMQ Debian and RPM packages have an optional
dependency on socat. When
installing using dpkg, this dependency won't be automatically installed. To install it manually, use

sudo apt-get install socat

Server

Bug Fixes

  • Channel operations that time out no longer produce noisy crash reports in
    RabbitMQ log files

    GitHub issue: rabbitmq-common#63

  • Channel operation timeout default is bumped to 15 seconds

    GitHub issue: rabbitmq-server/issues/667

  • Windows service will pick up RabbitMQ config file regardless of whether
    it was present during service installation

    GitHub issue: rabbitmq-server#659

  • Erlang distribution failures for rabbitmqctl and cross-node links will
    provide more detail when running on Erlang 19 (scheduled for release in Q3 2016).

    GitHub issue: rabbitmq-server#401

  • rabbitmqctl list_consumers now lists all consumers on a given queue

    Previously it would only list one.

    Contributed by Alexey Lebedeff (Mirantis).

    GitHub issue: rabbitmq-server#701

  • rabbitmqctl list_queues now correctly outputs rows for unavailable queues

    Contributed by Alexey Lebedeff (Mirantis).

    GitHub issue: rabbitmq-server#696

  • rabbitmqctl set_disk_free_limit mem_relative erroneously rejected values greater than 1.0

    GitHub issue: rabbitmq-server#717

  • Messages with an invalid client-provided x-death header value caused queue process termination

    GitHub issue: rabbitmq-server#767

  • Messages with priorities higher than queue max are now assigned max configured priority
    and no longer cause an unhandled exception that results in queue process restart

    GitHub issue: rabbitmq-server#795

  • Policy-related rabbitmqctl commands could return unformatted messages

    GitHub issue: rabbitmq-server#742

  • RABBITMQ_IO_THREAD_POOL_SIZE is no longer ignored by rabbitmq-server.bat

    GitHub issue: rabbitmq-server#705

  • Deleting a vhost in parallel with updating a policy in it resulted
    in unhandled exceptions

    GitHub issues: rabbitmq-server#755,
    rabbitmq-server#759,
    rabbitmq-server#744

Enhancements

  • Connections now emit stats unconditionally when they are blocked and unblocked
    by resource alarms. This makes management UI and HTTP API-reported data to be more up-to-date

    GitHub issue: rabbitmq-server#679

  • New (node-local) health check command

    rabbitmqctl node_health_check is a new command that performs basic health check of a node

    GitHub issue: rabbitmq-server#398

  • Automatic restart policy enabled for Windows service

    GitHub issue: rabbitmq-server#645

  • Default number of async I/O VM threads is now calculated based on the
    number of available CPU cores

    GitHub issue: rabbitmq-server#151

  • rabbitmqctl list_queues now supports new flags, --offline and --online, that limit
    result to only unavailable or available queues (queue masters, to be more precise)

    Contributed by Alexey Lebedeff (Mirantis).

    GitHub issue: rabbitmq-server#688

  • RabbitMQ will no longer log a warning about disabled kernel polling on Windows

    The runtime does not support kernel polling (I/O completion ports) on Windows,
    so there is nothing the user can do about it.

    GitHub issue: rabbitmq-server#695

  • Queue index is now updated in batches when messages are requeued

    GitHub issue: rabbitmq-server#343

Management plugin

Bug Fixes

Enhancements

MQTT plugin

Bug Fixes

  • Resource alarms are handled correctly by MQTT connections

    GitHub issues: rabbitmq-mqtt#62

  • Session [pre-existing] presence is now correctly communicated to clients

    GitHub issue: rabbitmq-mqtt#61

Enhancements

  • Connections now emit stats unconditionally when they are blocked and unblocked
    by resource alarms. This makes management UI and HTTP API-reported data to be more up-to-date.

    GitHub issue: rabbitmq-mqtt#71

  • More connection details for MQTT connections reported to management UI

    GitHub issue: rabbitmq-mqtt#66

STOMP plugin

Bug Fixes

Enhancements

  • Connections now emit stats unconditionally when they are blocked and unblocked
    by resource alarms. This makes management UI and HTTP API-reported data to be more up-to-date.

    GitHub issue: rabbitmq-stomp#70

  • More connection details for STOMP connections reported to management UI

    GitHub issue: rabbitmq-stomp#55

Web STOMP plugin

####...

Read more

RabbitMQ 3.6.1

01 Mar 14:06
Compare
Choose a tag to compare

RabbitMQ 3.6.1

RabbitMQ 3.6.1 is a maintenance release that includes a fix for CVE-2015-8786,
a vulnerability in RabbitMQ management plugin.

Server

Bug Fixes

  • Purging a lazy queue could result in an exception

    GitHub issue: rabbitmq-server#514

  • Ensure epmd is running before starting RabbitMQ node on Windows

    GitHub issue: rabbitmq-server#625

  • Channel error could make broker unreachable

    Those errors were misleadingly logged as channel_termination_timeout, which
    the issue really was with unhandled messages from concurrently closed TCP socket process.

    GitHub issue: rabbitmq-server#530

  • (Automatic) deletion of an auto-delete queue could lead
    to blocked channels

    GitHub issue: rabbitmq-server#581

  • During (from scratch) queue sync, queue master node didn't respect mirror alarm state.
    With large data sets this could drive mirror node out of memory.

    GitHub issue: rabbitmq-server#616

  • Changing password for users with non-standard (think broker configuration) password
    hashing function, for example, those migrated from 3.5.x releases, didn't update
    effective hashing function.

    GitHub issue: rabbitmq-server#623

  • Heavy and/or prolonged rabbitmqctl use could exhaust Erlang VM atom table

    GitHub issue: rabbitmq-server#549

  • "Min masters" queue master location strategy could result
    in an error.

    GitHub issue: rabbitmq-server#521

  • Fixed a race condition in pause_minority handling mode.

    GitHub issue: rabbitmq-server#307

  • Significantly reduce possibility of a race condition when
    an exchange is deleted and immediately re-declared, e.g. by a federation
    link.

    This could result in a link operation being blocked, preventing
    nodes from stopping.

    GitHub issue: rabbitmq-federation#7

  • amq.rabbitmq.log messages now have information about originating
    node in message headers

    GitHub issue: rabbitmq-server#595

  • scripts/rabbitmq-env now works with GNU sed 4.2.2

    GitHub issue: rabbitmq-server#592

  • Exceptions in VM memory use calculator no longer affect broker startup

    GitHub issue: rabbitmq-server#328

  • Direct Reply-to capability is now advertised to clients

    GitHub issue: rabbitmq-server#520

Enhancements

  • Paths with non-ASCII characters on Windows are now handled

    RabbitMQ now can be installed into a location with non-ASCII characters,
    e.g. when username contains them.

    GitHub issues: rabbitmq-server#493

  • Configurable number of TCP connection acceptors

    Plus a x10 increase of the default. This helps with workloads where connection
    churn is very high (e.g. all clients are PHP Web apps that cannot maintain
    long-lived connections).

    GitHub issues: rabbitmq-server#528

  • rabbitmqctl cluster_status now includes cluster-wide resource alarm status

    GitHub issue: rabbitmq-server#392

  • Windows installer no longer jumps over installation log

    GitHub issue: rabbitmq-server#634

  • Improved rabbitmqctl reset error messages

    GitHub issue: rabbitmq-server#167

  • More unsigned field data types are supported.

    GitHub issue: rabbitmq-server#20

Java client

Enhancements

Bug Fixes

.NET client

Bug Fixes

Federation Plugin

Bug Fixes

  • Significantly reduce possibility of a race condition when
    an exchange is deleted and immediately re-declared, e.g. by a federation
    link

    This rendered federation links dysfunctional.

    GitHub issue: rabbitmq-federation#7

Management plugin

Vulnerability Fixes

  • CVE-2015-8786: user-provided query parameters lengths_age and lengths_incr had no validation
    and could be used to exhaust server resources.

    The attacker needs to have access to HTTP API (authenticate successfully and have sufficient
    tags to pass authorisation) in order to carry out the attack.

    There is no workaround for earlier releases.

    Kudos to Vladimir Ivanov (Positive Technologies) for the responsible disclosure.

    GitHub issue: rabbitmq-management#97

Enhancements

  • Password hashing function is now included in exported definitions

    Those upgrading from versions earlier than 3.6.0 via definitions export
    won't have to temporarily set hashing function to MD5 to ensure export succeeds.

    GitHub issue: rabbitmq-management#117

Bug Fixes

Federation Management plugin

Enhancements

Erlang client

Bug Fixes

STOMP plugin

Bug Fixes

  • durable and persistent headers weren't always used interchangeably,
    leading to non-durable subscriptions

    GitHub issue: rabbitmq-stomp#58

  • Client heartbeat timeouts resulted in confusing error messages
    in broker log.

    GitHub issues: rabbitmq-stomp#63

Web STOMP plugin

Bug Fixes

Web STOMP Examples plugin

Bug Fixes

Event Exchange plugin

Bug Fixes

  • Event timestamps are now in seconds, not milliseconds

    Per AMQP 0-9-1 spec. This is not a particularly great choice for events,
    so we will add an optional header with millisecond precision in a future release.

    GitHub issue: rabbitmq-event-exchange#8

JSON RPC plugin

Note: this plugin is deprecated and its use is highly discouraged.

Enhancements

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.1.tar.gz.

RabbitMQ 3.6.0

20 Oct 11:48
Compare
Choose a tag to compare

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
    environment...

Read more

RabbitMQ 3.5.7

24 Nov 23:31
Compare
Choose a tag to compare

RabbitMQ 3.5.7

3.5.7 is a bug fix and usability release. All 3.5.x series users are highly encouraged
to upgrade to 3.5.8
which includes a security vulnerability fix in the MQTT plugin.

Server

Bug Fixes

  • Fix a race condition that could prevent nodes from stopping.

    GitHub issue: rabbitmq-server#465

  • file_handle_cache:clear_read_cache/0 no longer silently fails.

    The function is mean to be used with rabbitmqctl eval in environments where
    in-process buffering of file data is enabled.

    GitHub issue: rabbitmq-server#436

  • Default RABBITMQ_PLUGINS_DIR value on Windows should be calculated as relative to RabbitMQ
    server installation directory, not RABBITMQ_BASE.

    If you override RABBITMQ_BASE, you may need to copy plugins from %RABBITMQ_BASE%\plugins
    to the plugins directory under RabbitMQ installation.

    GitHub issue: rabbitmq-server#433

  • When rabbitmq-server failed to start due to an unreadable config file, exit code was 0

    GitHub issue: rabbitmq-server#464

  • Overriding RABBITMQ_LOGS and RABBITMQ_SASL_LOGS on Windows prevented node from starting.

    GitHub issue: rabbitmq-server#375

  • Some startup code bits assumed IPv4 is enabled in the environment

    GitHub issue: rabbitmq-server#117

  • More robust disk monitor, fewer errors logged.

    GitHub issue: rabbitmq-server#91

  • rabbitmqctl forget_cluster_node no longer attempts to impersonate live
    (reachable) nodes.

    GitHub issue: rabbitmq-server#470

  • rabbitmq-plugins was using an incorrect env variable.

    GitHub issue: rabbitmq-server#451

Enhancements

  • RAM watermark can be configured as an absolute value in bytes (just like with disk space monitoring):

    [{rabbit, [{vm_memory_high_watermark, {absolute, 1073741824}}]}].
    

    GitHub issue: rabbitmq-server#207

  • rabbitmqctl authenticate_user is a new command that can be used to test user authentication.

    GitHub issue: rabbitmq-server#119

  • rabbitmqctl now supports exclusive as a queue info item.

    Contributed by Alexey Lebedeff (@binarin).

    GitHub issue: rabbitmq-server#371

Java client

Enhancements

Bug Fixes

.NET client

Enhancements

Bug Fixes

MQTT plugin

Bug Fixes

  • Auto-deletion of queues that back QoS 1 subscriptions is again controlled
    by the clean session flag.

    GitHub issues: rabbitmq-mqtt#30 (original report which introduced the issue), rabbitmq-mqtt#37 (clarification and fix)

STOMP plugin

Enhancements

  • Queue names now can be set explicitly using the x-queue-name header, for all
    destination types.

    GitHub issue: rabbitmq-stomp#43

Management plugin

Bug Fixes

  • Management plugin could prevent a node from starting when it recovers after a network split.

    GitHub issue: rabbitmq-management#81

  • Sorting arrow direction in the UI is now more conventional.

    Contributed by Philippe Serhal.

    GitHub issue: rabbitmq-management#88.

  • 401 responses correctly set content type to application/json

    GitHub issue: rabbitmq-management#67

  • Consumer utilisation is correctly reported as a number instead of "" when it equals 0.

    GitHub issue: rabbitmq-management#26

  • rabbitmqadmin misinterpreted boolean settings in config as strings

    GitHub issue: rabbitmq-management#20

Erlang client

Enhancements

Upgrading

To upgrade a non-clustered RabbitMQ simply install the new version. All configuration and persistent message data are retained.

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.5.7.tar.gz.

RabbitMQ 3.5.6

07 Oct 16:01
Compare
Choose a tag to compare

Release Highlights

This is the release notes for RabbitMQ 3.5.6. This is a bug fix release that is compatible with Erlang/OTP 18.1.

Server

Bug Fixes

  • Erlang 18.1 compatibility (#324).
  • Prevent EACCESS errors on Windows when queue journal is cleared (#341).
  • When multiple authorization backends are used, user tags from all of them should be preserved (#338).
  • Force a (per-queue, not global) GC when a queue pages messages to disk (#290). This both makes throughput more stable and eliminates
    a potential memory leak of binary memory (message identifiers).

Java Client

Enhancements

MQTT Plugin

Bug Fixes

STOMP Plugin

Enhancements

  • Trailing new line character now can be optional (rabbitmq/rabbitmq-stomp#39). This makes certain (buggy) clients that may be difficult or impossible to upgrade work with the plugin.

Upgrading

To upgrade a non-clustered RabbitMQ simply install the new version. All configuration and persistent message data are retained.

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.5.6.tar.gz.

RabbitMQ 3.5.5

24 Sep 12:31
Compare
Choose a tag to compare

Release Highlights

This is the release notes for RabbitMQ 3.5.5. Beyond the usual bug fixes, it brings nice speed improvements when a queue pages messages to disk.

UPDATE 2: New RPM and Debian packages were attached to the release notes. They fix the following regressions:

UPDATE 1: RPM and Debian packages were removed because one shell script contains a Bash-only line. We are preparing revised packages.

Server

Enhancements
  • Improve performance when a queue's journal is written to disk (#227, #289). With previous versions of RabbitMQ, this could block the queue even when it wasn't I/O bound.

    The default queue index journal size was also reduced from 65536 to 32768 entries (#279). This also helps normalize throughput.

  • Improve performance when a queue is purged (#295).

  • Introduce new options to tune the queue paging performance (#284). These are low-level settings and should be handled carefully. Here are the default values:

    %% In /etc/rabbitmq/rabbitmq.config
    [   
    {rabbit, [
      {msg_store_credit_disc_bound, {2000, 500}},
      {msg_store_io_batch_size, 2048}, 
      {credit_flow_default_credit, {200, 50}}
    ]}  
    ].
  • Improve performance when expired messages need to be removed and no dead-letter exchange has been set up, by grouping handling of delivers and ack (#308).

  • Add an option to disable file_handle_cache's read cache (#226). This read cache was reported to be a performance penalty, especially when a starting RabbitMQ slave needs to synchronize and fetch messages from a master node. We now offer an option to disable this cache and we plan to disable it by default in RabbitMQ 3.6.0. Here is how to use this new option:

    %% In /etc/rabbitmq/rabbitmq.config
    [   
    {rabbit, [
      {fhc_read_buffering, false}
    ]}  
    ].
  • The queue_index_embed_msgs_below parameter is now read once from the application environment when the queue is created, instead of every time it is needed (#291). This removes a bottleneck by avoiding synchronous calls to the Erlang application server.

  • Reduce default heartbeat interval from 580 to 60 seconds (#297). This is a more sensible default value, after considering what users usually do.

  • Force essential TCP options (#282), especially {reuseaddr, true}. User won't have to copy them when tuning TCP options anymore and this decreases the risk of errors.

  • Catch SIGTERM and other signals in the rabbitmq-server script to stop RabbitMQ gracefully (#234). This mostly targets Docker users. Thanks to Duncan Gordon (@dunk) for reporting the issue!

  • Honor !RABBITMQ_BASE! value for the default location of rabbitmq-env-conf.bat (#239). Thanks to Jared Kauppila (@jakauppila) for the patch!

  • Warn user if a 32-bit Erlang runtime is used (#251), due to the limited address space and the possible memory shortage.

Bug fixes
  • Fix a queue hang when a slave node is lost (#224). Thanks to John Eckersberg (@jeckersb) for reporting the issue!
  • Fix a crash during startup when RabbitMQ tries to clean non-existing bindings (#235). Thanks to Magnus Henoch (@legoscia) for the patch!
  • Support backticks in the password field when adding a user with rabbitmqctl on Unix (#313). Thanks to Ben Page (@ben-page) for the patch!
  • Fix how NODE_IP_ADDRESS and NODE_PORT are handled in rabbitmq-env.bat on Windows (#243, #288). This bug made it impossible to override TCP listen port, for example. Since RabbitMQ 3.5.4. Thanks to @sukinsky for reporting the problem and Jared Kauppila (@jakauppila) for the patch!
  • Fix a problem in gen_server2 causing calls to timeout under certain conditions (#268). Thanks to Feng Lee (@Erylee) for the patch!
  • Support old version of GNU sed (#273). Since RabbitMQ 3.5.2. Thanks to Nishan Naseer (@nishan) for the patch!

Plugin: Federation

Bug fixes

Plugin: Management UI

Enhancements
Bug fixes
  • Fix a bug with rounding moving averages (rabbitmq/rabbitmq-management#35). This caused absurd values to be displayed. Thanks to Rob Reid (@bassrob) for reporting the issue!

Plugin: MQTT

Enhancements
  • Coerce default_user, default_pass, exchange and vhost to Erlang binaries (rabbitmq/rabbitmq-mqtt#32). This avoids an unfriendly error when a user set parameters to Erlang string instead of binaries. Thanks to Eugene Tolmachev (@et1975) for reporting the issue!

Plugin: STOMP

Enhancements
  • Set the redelivered header to a boolean value (rabbitmq/rabbitmq-stomp#21). Thanks to Eric White for reporting the issue!
  • Properly propagate extensions headers (x-headers) in the SUBSCRIBE and SEND frames (rabbitmq/rabbitmq-stomp#16). This allows a STOMP client to set parameters such as TTL, queue maximum length, and so on. Thanks to Michael Justin (@michaelJustin) for reporting the issue!
Bug fixes
  • Duplicate subscription IDs no longer result in unhandled exceptions. Instead, a sensible
    error message is logged.

Client library: Java

Enhancements
Bug fixes

Client library: .NET

Bug fixes

Upgrading

To upgrade a non-clustered RabbitMQ simply install the new version. All configuration and persistent message data are retained.

To upgrade a RabbitMQ cluster, follow the instructions at:
http://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 or the client libraries. Please download the archive named rabbitmq-3.5.5.tar.gz.

RabbitMQ 3.5.5 RC2

11 Sep 10:56
Compare
Choose a tag to compare
RabbitMQ 3.5.5 RC2 Pre-release
Pre-release

Release Highlights

This is the second release candidate of RabbitMQ 3.5.5. We release it earlier than expected because of a problem with the RC1 files on GitHub (see the RC1 release notes). It contains only some code cleanup compared to RC1; see 3.5.5 RC1 release notes for other changes since RabbitMQ 3.5.4.

Server

Enhancements
  • Cleanup code in rabbit_variable_queue (#301, #304), following all the optimization brought to this module.

Upgrading

To upgrade a non-clustered RabbitMQ simply install the new version. All configuration and persistent message data are retained.

To upgrade a RabbitMQ cluster, follow the instructions at:
http://www.rabbitmq.com/clustering.html#upgrading.

Source code archive

Warning: The source code archive provided by GitHub only contains the source of the broker only, not the plugins. Please download the archive named rabbitmq-server-3.5.4.902.tar.gz.

RabbitMQ 3.5.5 RC1

09 Sep 17:01
Compare
Choose a tag to compare
RabbitMQ 3.5.5 RC1 Pre-release
Pre-release

Release Highlights

This is the first release candidate of RabbitMQ 3.5.5. Beyond the usual bug fixes, it brings nice speed improvements when a queue pages messages to disk.

Release artifacts use "3.5.4.901" as the release number and not eg. "3.5.5-rc1" because of a limitation in our .NET client packaging; it expects digits only. So ".901" stands for RC 1, ".902" for RC 2, and so on.

IMPORTANT: Release files were removed because they are invalid! We tried to upload the correct files, but the old versions are still served. To workaround this problem, the second release candidate will be released shortly. Please do not use the RC 1 files you downloaded: they correspond to the development branch (ie. the nightly release), not the 3.5.x stable branch!

Server

Enhancements
  • Improve performance when a queue's journal is written to the disk (#227, #289). With previous versions of RabbitMQ, this could block the queue even when it wasn't I/O bound.

    The default queue index journal size was also reduced from 65536 to 32768 entries (#279). This also helps normalize throughput.

  • Improve performance when a queue is purged (#295).

  • Introduce new options to tune the queue paging performance (#284). These are low-level settings and should be handled carefully. Here are the default values:

    %% In /etc/rabbitmq/rabbitmq.config
    [   
    {rabbit, [
      {credit_disc_bound, {2000, 500}},
      {io_batch_size, 2048}
    ]}  
    ].
  • Add an option to disable file_handle_cache's read cache (#226). This read cache was reported to be a performance penalty, especially when a starting RabbitMQ slave needs to synchronize and fetch messages from a master node. We now offer an option to disable this cache and we plan to disable it by default in RabbitMQ 3.6.0. Here is how to use this new option:

    %% In /etc/rabbitmq/rabbitmq.config
    [   
    {rabbit, [
      {fhc_read_buffering, false}
    ]}  
    ].
  • The queue_index_embed_msgs_below parameter is now read once from the application environment when the queue is created, instead of every time it is needed (#291). This removes a bottleneck by avoiding synchronous calls to the Erlang application server.

  • Reduce default heartbeat interval from 580 to 60 seconds (#297). This is a more sensible default value, after considering what users usually do.

  • Force essential TCP options (#282), especially {reuseaddr, true}. User won't have to copy them when tuning TCP options anymore and this decreases the risk of errors.

  • Catch SIGTERM and other signals in the rabbitmq-server script to stop RabbitMQ gracefully (#234). This mostly targets Docker users.

  • Honor !RABBITMQ_BASE! value for the default location of rabbitmq-env-conf.bat (#239).

  • Warn user if a 32-bit Erlang runtime is used (#251), due to the limited address space and the possible memory shortage.

Bug fixes
  • Fix a queue hang when a slave node is lost (#224).
  • Fix a crash during startup when RabbitMQ tries to clean non-existing bindings (#235).
  • Fix how NODE_IP_ADDRESS and NODE_PORT are handled in rabbitmq-env.bat on Windows (#243, #288). This bug made it impossible to override TCP listen port, for example.
  • Fix a problem in gen_server2 causing calls to timeout under certain conditions (#268).
  • Support old version of GNU sed (#273).

Plugin: Federation

Bug fixes

Plugin: Management UI

Enhancements
Bug fixes

Plugin: STOMP

Bug fixes
  • Properly propage extensions headers (x-headers) in the SUBSCRIBE and SEND frames (rabbitmq/rabbitmq-stomp#16). This allows a STOMP client to set parameters such as TTL, queue maximum length, and so on.

Client library: Java

Bug fixes

Client library: .NET

Bug fixes

Upgrading

To upgrade a non-clustered RabbitMQ simply install the new version. All configuration and persistent message data are retained.

To upgrade a RabbitMQ cluster, follow the instructions at:
http://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 or the client libraries. Please download the archive named rabbitmq-3.5.4.901.tar.gz.

RabbitMQ 3.5.4

22 Jul 14:56
Compare
Choose a tag to compare

This release contains bug fixes and minor usability improvements.

RabbitMQ Server

Enhancements

rabbitmq-env.conf.bat Support on Windows

It is now possible to use a separate file for configuring RabbitMQ environment variables on Windows.

rabbitmq-server#154

Excessive SASL Logging on Windows

SASL logger was needlessly verbose on Windows, even when configured to only log
errors.

rabbitmq-server#180

warn as Alias to warning

When configuring log levels, warn can now be used as an alias for warning.

rabbitmq-server#186

rabbitmqctl purge_queue

rabbitmqctl purge_queue is a new rabbitmqctl command which purges a queue and can
be used in situations when rabbitmqadmin or management UI are not available.

rabbitmq-server#175

file_handle_cache:clear_read_cache/0

file_handle_cache:clear_read_cache/0 is a new function that clears read cache buffers.
It is meant to be used with rabbitmqctl eval.

rabbitmq-server#196

Improved rabbitmqctl Error Messages

When rabbitmqctl list_user_permissions is invoked without any arguments, it now outputs
a sensible error message.

rabbitmq-server#183

Kernel Polling Enabled Unconditionally by Default

Previously it was possible to accidentally disable runtime kernel polling (epoll, kqueue, etc) by
overriding RABBITMQ_SERVER_ERL_ARGS. Now kernel polling is always enabled unless
explicitly disabled using RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS.

rabbitmq-server#179

Easier I/O Thread Pool Size Configuration

Runtime I/O thread pool size is now easier to tweak: just use the RABBITMQ_IO_THREAD_POOL_SIZE
environment variable.

rabbitmq-server#178

Higher I/O Thread Pool Size Default

Runtime I/O thread pool size is now 64 instead of 30 by default. This reduces time spent waiting for
file I/O operations to complete on machines with 8 or more cores.

rabbitmq-server#178

Improved Heartbeat Timeout Logging

Heartbeat timeouts are now logged with clearer messages and mention effective
timeout value.
rabbitmq-server#159

Bug Fixes

Recoverable Mirror Could Be Reset Due to Race Condition

Recoverable mirror could be reset (considered to be unrecoverable) on start
due to a race condition.

rabbitmq-server#200, since 3.5.0.

Throughput Regression Fix

rabbitmq-server#191, since 3.4.0.

x-death headers can now safely be republished by clients

When a client republished an x-death event injected during dead-lettering, it could lead
to queue process termination.

rabbitmq-server#216, since 3.5.2.

STOMP Plugin

Enhancements

Test Suite Upgraded to Stomp.py 4.x

Test suite now uses the most recent Stomp.py version.

rabbitmq-stomp.

End Frame With a Newline Character

STOMP frames are now terminated with a newline character.
This is allowed by the STOMP spec and improves compatibility with the PHP STOMP extension.

rabbitmq-stomp.

Java Client

Enhancements

Queue Name Length Validated Early

Queue names longer than 255 characters (per protocol spec) now result in an IllegalArgumentException
thrown early and with a clear error message.

rabbitmq-java-client#72.

Forgiving Exception Handler

Default ExceptionHandler implementation closes the channel after an unhandled consumer exception.
This is not desirable in every case, so a new ForgivingExceptionHandler was introduced. It works
exactly as DefaultExceptionHandler but does not close the channel.

rabbitmq-java-client#68.

Bug Fixes

Memory Leak

TCP back pressure added to the client in the 3.5.0 cycle had a memory leak that manifested itself
when channel churn was high.

rabbitmq-java-client#69, since 3.5.0.

.NET Client

Bug Fixes

Framing Errors When Publishing During Flow Control

Several clients (including the .NET one) had a subtle socket write failure handling issue that resulted in incorrect
frame interleaving errors when (temporary) flow control kicked in in the server.

rabbitmq-server#156, since 1.0.0.

Heartbeat Implementation Fixes

Several issues around heartbeats are fixed. They resulted in the client failing to send heartbeat
frames on time and being disconnected on idle connections, in particular when TLS was enabled.

rabbitmq-dotnet-client#82, since 3.5.2.
rabbitmq-dotnet-client#100, since 3.5.2.

Fixed Memory Leak in Automatically Recovering Connections

rabbitmq-dotnet-client#109, since 3.4.0.

Explicit Connection.Close Prevents Automatic Recovery Attempts

Explicitly invoked Connection.Close or Connection.Abort will disable ongoing and future automatic
connection recovery attempts.

rabbitmq-dotnet-client, since 3.4.0.

Subscription.Close Hangs if Queue is Deleted Underneath It

Subscription.Close() used to hang if the queue it was consuming from was previously
deleted.

rabbitmq-dotnet-client#89, since 1.0.0.

RabbitMQ 3.5.4 RC2

09 Jul 19:58
Compare
Choose a tag to compare
RabbitMQ 3.5.4 RC2 Pre-release
Pre-release

This release candidate contains bug fixes and minor usability improvements.

RabbitMQ Server

Enhancements

rabbitmq-env.conf.bat Support on Windows

It is now possible to use a separate file for configuring RabbitMQ environment variables on Windows.

rabbitmq-server#154

Excessive SASL Logging on Windows

SASL logger was needlessly verbose on Windows, even when configured to only log
errors.

rabbitmq-server#180

warn as Alias to warning

When configuring log levels, warn can now be used as an alias for warning.

rabbitmq-server#186

rabbitmqctl purge_queue

rabbitmqctl purge_queue is a new rabbitmqctl command which purges a queue and can
be used in situations when rabbitmqadmin or management UI are not available.

rabbitmq-server#175

file_handle_cache:clear_read_cache/0

file_handle_cache:clear_read_cache/0 is a new function that clears read cache buffers.
It is meant to be used with rabbitmqctl eval.

rabbitmq-server#196

Improved rabbitmqctl Error Messages

When rabbitmqctl list_user_permissions is invoked without any arguments, it now outputs
a sensible error message.

rabbitmq-server#183

Kernel Polling Enabled Unconditionally by Default

Previously it was possible to accidentally disable runtime kernel polling (epoll, kqueue, etc) by
overriding RABBITMQ_SERVER_ERL_ARGS. Now kernel polling is always enabled unless
explicitly disabled using RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS.

rabbitmq-server#179

Easier I/O Thread Pool Size Configuration

Runtime I/O thread pool size is now easier to tweak: just use the RABBITMQ_IO_THREAD_POOL_SIZE
environment variable.

rabbitmq-server#178

Higher I/O Thread Pool Size Default

Runtime I/O thread pool size is now 64 instead of 30 by default. This reduces time spent waiting for
file I/O operations to complete on machines with 8 or more cores.

rabbitmq-server#178

Improved Heartbeat Timeout Logging

Heartbeat timeouts are now logged with clearer messages and mention effective
timeout value.
rabbitmq-server#159

Bug Fixes

Recoverable Mirror Could Be Reset Due to Race Condition

Recoverable mirror could be reset (considered to be unrecoverable) on start
due to a race condition.

rabbitmq-server#200, since 3.5.0.

Throughput Regression Fix

rabbitmq-server#191, since 3.4.0.

x-death headers can now safely be republished by clients

When a client republished an x-death event injected during dead-lettering, it could lead
to queue process termination.

rabbitmq-server#216, since 3.5.2.

STOMP Plugin

Enhancements

Test Suite Upgraded to Stomp.py 4.x

Test suite now uses the most recent Stomp.py version.

rabbitmq-stomp.

Java Client

Enhancements

Queue Name Length Validated Early

Queue names longer than 255 characters (per protocol spec) now result in an IllegalArgumentException
thrown early and with a clear error message.

rabbitmq-java-client#72.

Forgiving Exception Handler

Default ExceptionHandler implementation closes the channel after an unhandled consumer exception.
This is not desirable in every case, so a new ForgivingExceptionHandler was introduced. It works
exactly as DefaultExceptionHandler but does not close the channel.

rabbitmq-java-client#68.

Bug Fixes

Memory Leak

TCP back pressure added to the client in the 3.5.0 cycle had a memory leak that manifested itself
when channel churn was high.

rabbitmq-java-client#69, since 3.5.0.

.NET Client

Bug Fixes

Framing Errors When Publishing During Flow Control

Several clients (including the .NET one) had a subtle socket write failure handling issue that resulted in incorrect
frame interleaving errors when (temporary) flow control kicked in in the server.

rabbitmq-server#156, since 1.0.0.

Heartbeat Implementation Fixes

Several issues around heartbeats are fixed. They resulted in the client failing to send heartbeat
frames on time and being disconnected on idle connections, in particular when TLS was enabled.

rabbitmq-dotnet-client#82, since 3.5.2.
rabbitmq-dotnet-client#100, since 3.5.2.

Fixed Memory Leak in Automatically Recovering Connections

rabbitmq-dotnet-client#109, since 3.4.0.

Explicit Connection.Close Prevents Automatic Recovery Attempts

Explicitly invoked Connection.Close or Connection.Abort will disable ongoing and future automatic
connection recovery attempts.

rabbitmq-dotnet-client, since 3.4.0.

Subscription.Close Hangs if Queue is Deleted Underneath It

Subscription.Close() used to hang if the queue it was consuming from was previously
deleted.

rabbitmq-dotnet-client#89, since 1.0.0.