RabbitMQ 3.5.4
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.
Excessive SASL Logging on Windows
SASL logger was needlessly verbose on Windows, even when configured to only log
errors.
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
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.
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.
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
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.
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
deleted.
rabbitmq-dotnet-client#89, since 1.0.0
.