Skip to content
RabbitMQ 3.5.4
Choose a tag to compare

This release contains bug fixes and minor usability improvements.

RabbitMQ Server


rabbitmq-env.conf.bat Support on Windows

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


Excessive SASL Logging on Windows

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


warn as Alias to warning

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


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.



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.


Improved rabbitmqctl Error Messages

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


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.


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.


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.


Improved Heartbeat Timeout Logging

Heartbeat timeouts are now logged with clearer messages and mention effective
timeout value.

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


Test Suite Upgraded to 4.x

Test suite now uses the most recent version.


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.


Java Client


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.


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.


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

rabbitmq-dotnet-client#89, since 1.0.0.