Skip to content

Releases: rabbitmq/rabbitmq-server

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.

RabbitMQ 3.5.3

22 May 13:55
Compare
Choose a tag to compare

Release Highlights

Server

Enhancements
  • If rabbitmqctl can't contact a node, suggest to verify any Erlang TLS distribution configuration (#162).
Bug fixes
  • Ensure the memory monitor is fully started before the file handle cache is used (since 3.5.2, #157). Before, the problem could lead to the following crash during RabbitMQ startup:

    =CRASH REPORT==== ... ===
    crasher:
      initial call: gen:init_it/6
      pid: <0.229.0>
      registered_name: []
      exception exit: {noproc,
                          {gen_server,call,
                              [vm_memory_monitor,get_memory_limit,infinity]}}
        in function  gen_server2:terminate/3 
    ...
    

    Thanks to Carl Hörberg and Gilles Danycan for the bug report!

Plugin: Management UI

Bug fixes
  • Fix a crash during RabbitMQ startup if force_fine_statistics is set in rabbitmq_management_agent configuration (since 3.5.2, rabbitmq/rabbitmq-management-agent#4). The error was:

    BOOT FAILED
    ===========
    
    Error description:
    {could_not_start,rabbit,
       {{case_clause,false},
        [{rabbit_mgmt_db_handler,ensure_statistics_enabled,0,[]},
    ...
    

    Thanks to Kevin Blackwell for the bug report!

Documentation
  • When the management UI warns about network partitions, add a link to the documentation which gives explanations and possible solutions (rabbitmq/rabbitmq-management#43).

Client library: Java

Bug fixes
Feature deprecation
  • Deprecate com.rabbitmq.client.Channel methods related to the old flow control (rabbitmq/rabbitmq-java-client#59):

    boolean flowBlocked();
    void addFlowListener(FlowListener listener);
    boolean removeFlowListener(FlowListener listener);
    void clearFlowListeners();
Documentation

Building and packaging

Bug fixes
  • When updating Git remote URLs, use git set-url ... to set the fetch URL, not git set-url --fetch ... (since 3.5.1).

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 archives provided by GitHub only contain the source of the broker, not the plugins or the client libraries. Please download the archives available from the official download page:
http://www.rabbitmq.com/download.html

RabbitMQ 3.5.2

12 May 16:02
Compare
Choose a tag to compare

Release Highlights

Server

Enhancements
  • Improve integration with Docker (#113). Problems which were previously worked around in the official Docker image, were fixed in RabbitMQ. In particular:
    • Add a way to send log messages (both "normal" and sasl messages) to stdout (#128).
    • Do not try to use exec before su ... as su(1) forks a process anyway (since 3.5.0, #129).
  • Report a queue is under flow control only if it was in this situation in the last 1 second, instead of the last 5 seconds previously (#138).
  • Add a check to ensure the Mnesia directory is not shared with the PID file location or the plugin expansion directory (#120). This should help users facing non-working automatic clustering.
Bug fixes
  • Ensure the file handle cache remains under the memory high watermark when syncing a mirrored queue (since 2.0.0, #134).
  • Restore support for messages stored on disk with the previous x-death header format (since 3.5.1, #152).
  • Ensure passwords containing $ characters are properly escaped so they are not interpreted by the shell, when a password is changed using rabbitmqctl change_password (since 1.5.2, #66).

Plugin: Management UI

Enhancements
Bug fixes
  • Fix a badarith crash if for some reasons, the disk free space or the file descriptors count are temporarily reported incorrectly (rabbitmq/rabbitmq-management#30).

Plugin: STOMP

Bug fixes

Client library: Java

Bug fixes
Documentation

Client library: .NET

Bug fixes

Client library: Erlang

Enhancements

Building and packaging

Enhancements
  • Upgrade Mac OS X standalone package to Erlang/OTP 17.5 (#97).
Bug fixes
  • Fix a problem where Erlang crash dumps (erl_crash.dump) were created when using the Mac OS X standalone package, even though RabbitMQ was running properly (#96). Thanks to Vitaly Numenta for the report!
  • Ensure rabbit_misc:otp_release/0 returns an appropriate value when using the Mac OS X standalone package (#106).
  • Ignore $RABBITMQ_PID_FILE set in /etc/rabbitmq/rabbitmq-env.conf as it would break the init script (#127).
  • Ensure $RABBITMQ_PID_FILE is not used before being set in the Debian init script (since 2.8.2, #126).
  • Use $(MAKE) instead of hard-coding make in the MQTT (rabbitmq/rabbitmq-mqtt#23) and STOMP (rabbitmq/rabbitmq-stomp#9) plugins.

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 archives provided by GitHub only contain the source of the broker, not the plugins or the client libraries. Please download the archives available from the official download page:
http://www.rabbitmq.com/download.html

RabbitMQ 3.5.1

03 Apr 07:28
Compare
Choose a tag to compare

Release Highlights

Server

Enhancements
  • Introduce a new channel log category for channel log messages (#74).
Bug fixes
  • Ensure consumer_closed events are emitted for the actually closed channels only, not all of them (since 3.3.0, #86). The events were filtered later in the management plugin so the behaviour was correct. However, the broker did way too much work.
  • Ensure the number of x-death message headers doesn't grow indefinitely (#78). Now, there is a single entry for each {queue, reason} pair.
  • Adjust the file read buffer cache size to avoid useless reads (since 3.5.0, #69). Before this fix, reading a file backward would cause the buffer to be filled and thrown away quickly, leading to a large I/O bandwidth consumption.
  • Ensure the priority queue plugin reports its memory consumption properly (since 3.5.0, #67). Before this fix, the queue might not be paged out under memory pressure.
  • Prevent a crash while synchronising paged out priority queues (since 3.5.0, #65). This was caused by priority queues accessing message properties without checking their existence.
  • Pass the PID file to rabbitmqctl stop in rabbitmq-server.ocf, exactly like Debian- and Red Hat-flavour init scripts (since 2.6.0, #72).

Plugin: AMQP 1.0

Bug fixes

Client library: Java

Enhancements

Client library: .NET

Enhancements
Bug fixes

Building and packaging

Enhancements
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 archives provided by GitHub only contain the source of the broker, not the plugins or the client libraries. Please download the archives available from the official download page:
http://www.rabbitmq.com/download.html

RabbitMQ 3.5.0

28 Mar 23:43
Compare
Choose a tag to compare

See release notes.

If you have any questions, please use RabbitMQ mailing list.

RabbitMQ 3.4.4

29 Mar 14:51
Compare
Choose a tag to compare

See release notes.

If you have any questions, please use RabbitMQ mailing list.

RabbitMQ 3.4.3

21 Aug 13:03
Compare
Choose a tag to compare