Releases: rabbitmq/rabbitmq-server
RabbitMQ 3.6.2
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 filesGitHub 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 installationGitHub 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 queuePreviously it would only list one.
Contributed by Alexey Lebedeff (Mirantis).
GitHub issue: rabbitmq-server#701
-
rabbitmqctl list_queues
now correctly outputs rows for unavailable queuesContributed by Alexey Lebedeff (Mirantis).
GitHub issue: rabbitmq-server#696
-
rabbitmqctl set_disk_free_limit mem_relative
erroneously rejected values greater than1.0
GitHub issue: rabbitmq-server#717
-
Messages with an invalid client-provided
x-death
header value caused queue process terminationGitHub 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 restartGitHub issue: rabbitmq-server#795
-
Policy-related
rabbitmqctl
commands could return unformatted messagesGitHub issue: rabbitmq-server#742
-
RABBITMQ_IO_THREAD_POOL_SIZE
is no longer ignored byrabbitmq-server.bat
GitHub issue: rabbitmq-server#705
-
Deleting a vhost in parallel with updating a policy in it resulted
in unhandled exceptionsGitHub 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-dateGitHub 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 nodeGitHub 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 coresGitHub 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
-
Samples (stats) for abnormally terminated connections and channels will now be cleaned up more aggressively
GitHub issue: rabbitmq-management#198
-
Cluster name could be returned by HTTP API as a non-string value
GitHub issue: rabbitmq-management#143
-
Improved IE 11 compatibility
GitHub issue: rabbitmq-management#123
Enhancements
-
Management plugin has a new, better parallelised event collector which is less likely to
fall behind.GitHub issues: rabbitmq-management#41,
rabbitmq-management#166,
rabbitmq-management#173,
rabbitmq-management#185,
rabbitmq-management#174 -
Clients now can provide a human-readable connection name that will be displayed
in the management UI. Currently Java, .NET and Erlang clients support this.
In order to use this feature, set theconnection_name
key in client properties.
Note that this name doesn't have to be unique and cannot be used as a connection identifier,
for example, in HTTP API requests.GitHub issue: rabbitmq-server#104
-
GET /api/nodes/{node}/memory
andGET /api/nodes/{node}/memory/relative
are new HTTP API
endpoints that return memory usage breakdown in absolute (same asrabbitmqctl status
) and
relative terms.GitHub issue: rabbitmq-management#161
-
HTTPS related improvements in
rabbitmqadmin
.GitHub issues: rabbitmq-management#152, rabbitmq-management#151, rabbitmq-management#149.
-
Policies now can be listed (read) by the users tagged with
management
andmonitoring
As well as those tagged with
policymaker
andadministrator
, of course.GitHub issue: rabbitmq-management#156
-
Effective rates mode is now displayed for cluster nodes by default
GitHub issue: rabbitmq-management#177
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
-
Resource alarms are handled correctly by STOMP connections
GitHub issues: rabbitmq-stomp#68,
rabbitmq-stomp#67
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
####...
RabbitMQ 3.6.1
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 WindowsGitHub 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 channelsGitHub 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 from3.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 tableGitHub 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 headersGitHub issue: rabbitmq-server#595
-
scripts/rabbitmq-env
now works with GNU sed 4.2.2GitHub 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 statusGitHub issue: rabbitmq-server#392
-
Windows installer no longer jumps over installation log
GitHub issue: rabbitmq-server#634
-
Improved
rabbitmqctl reset
error messagesGitHub issue: rabbitmq-server#167
-
More unsigned field data types are supported.
GitHub issue: rabbitmq-server#20
Java client
Enhancements
-
Endpoints (hostnames) are now also accepted as a
java.util.List
GitHub issue: rabbitmq-java-client#125
-
Autorecovering connections now shuffle hosts in a more
reliable wayGitHub issue: rabbitmq-java-client#124
Bug Fixes
-
Binding recovery could fail
GitHub issue: rabbitmq-java-client#129
-
Channel.queueDelete
could throw aNullPointerException
GitHub issue: rabbitmq-java-client#120
.NET client
Bug Fixes
-
Autorecovering connections now use full list of provided hostnames
during recoveryGitHub issue: rabbitmq-dotnet-client#153
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
linkThis rendered federation links dysfunctional.
GitHub issue: rabbitmq-federation#7
Management plugin
Vulnerability Fixes
-
CVE-2015-8786: user-provided query parameters
lengths_age
andlengths_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
-
Internet Explorer (9+) compatibility restored
GitHub issue: rabbitmq-management#98
-
Internet Explorer 11 compatibility fixes
GitHub issues: rabbitmq-management#112,
rabbitmq-management#114 -
When policy fails to be created with invalid paramaters a sensible
error message will be displayed.GitHub issue: rabbitmq-management#110
Federation Management plugin
Enhancements
-
Federation link form now includes more settings (that are exchange- and queue-federation specific)
GitHub issue: rabbitmq-federation-management#5
Erlang client
Bug Fixes
-
password
anddepth
query parameters are now propagated to TLS optionsGitHub issue: rabbitmq-erlang-client#36
STOMP plugin
Bug Fixes
-
durable
andpersistent
headers weren't always used interchangeably,
leading to non-durable subscriptionsGitHub 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
-
Cowboy options are now supported for TLS listeners.
GitHub issue: rabbitmq-web-stomp#36
Web STOMP Examples plugin
Bug Fixes
-
Multi-byte UTF-8 characters are now handled
by the bundled version of stomp.js.GitHub issue: rabbitmq-web-stomp-examples#2
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
-
RabbitmQ
3.6.x
support.GitHub issue: rabbitmq-jsonrpc#3
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
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 notgz
. - 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
andrabbitmq_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 WindowsGitHub 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 usingrabbitmqctl
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 onrabbitmq-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
andrabbitmq-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 now530
.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 intorabbitmqctl 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...
RabbitMQ 3.5.7
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, notRABBITMQ_BASE
.If you override
RABBITMQ_BASE
, you may need to copy plugins from%RABBITMQ_BASE%\plugins
to theplugins
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
andRABBITMQ_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 supportsexclusive
as a queue info item.Contributed by Alexey Lebedeff (@binarin).
GitHub issue: rabbitmq-server#371
Java client
Enhancements
-
Heartbeats are now enabled by default.
GitHub issue: rabbitmq-java-client#109.
Bug Fixes
-
AutorecoveringChannel#basicCancel
could throw aNullPointerException
.GitHub issue: rabbitmq-java-client#105
.NET client
Enhancements
-
Heartbeats are now enabled by default.
GitHub issue: rabbitmq-dotnet-client#142.
Bug Fixes
-
IConnection.Dispose
could throw an exception.GitHub issue: rabbitmq-dotnet-client#133
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 stringsGitHub issue: rabbitmq-management#20
Erlang client
Enhancements
-
Heartbeats are now enabled by default.
GitHub issue: rabbitmq-erlang-client#25.
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
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
- Missed heartbeats will trigger automatic connection recovery (rabbitmq/rabbitmq-java-client#57).
MQTT Plugin
Bug Fixes
- Queues used by QoS 1 subscriptions are no longer deleted when the only subscriber disconnects (rabbitmq/rabbitmq-mqtt#30).
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
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:
- #321; Thanks to Emilien Macchi (@EmilienM), Denis Egorenko (@degorenko) and Kostikas Tom for reporting the issue!
- #325; Thanks to @CVTJNII for the patch!
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 therabbitmq-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 ofrabbitmq-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
andNODE_PORT
are handled inrabbitmq-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
- Fix a crash when certain headers are already present in the forwarded message (rabbitmq/rabbitmq-federation#12). Thanks to Gopi for reporting the issue!
- Increase reconnection delay from 1 to 5 seconds (rabbitmq/rabbitmq-federation#15). This reduces the noise in the SASL log file. Thanks to Peter Valdemar Mørch for reporting the issue!
- Ignore federation-specific headers added by clients (rabbitmq/rabbitmq-federation#16).
Plugin: Management UI
Enhancements
- Do not consider non-UTF-8 content as invalid (rabbitmq/rabbitmq-management#48). Now, the plugin just mentions why it cannot display it. Thanks to Petr Gotthard (@gotthardp) for the patch!
- Split long Base64 content in multiple lines (rabbitmq/rabbitmq-management#49). Thanks to Petr Gotthard (@gotthardp) for the patch!
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
andvhost
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 theSUBSCRIBE
andSEND
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
- Use JUnit 4 in the testsuite (rabbitmq/rabbitmq-java-client#89).
Bug fixes
- Stop recovery when a client is closed (rabbitmq/rabbitmq-java-client#77). Thanks to @dhakimTRX for the patch!
- Make connection handshake timeout configurable (rabbitmq/rabbitmq-java-client#81, rabbitmq/rabbitmq-java-client#92). Thanks to Jorge Neyra-Araoz (@jhneyra) for reporting the issue and Yann Robert (@YannRobert) for some improvements to the patch!
Client library: .NET
Bug fixes
- Handle
ObjectDisposed
exceptions gracefully when re-scheduling timers (rabbitmq/rabbitmq-dotnet-client#118). Thanks to Raphael Koch for reporting the issue! - Do not throw exceptions from a
Dispose
method (rabbitmq/rabbitmq-dotnet-client#119). Thanks to Michael Denny (@micdenny) for the patch!
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
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
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 therabbitmq-server
script to stop RabbitMQ gracefully (#234). This mostly targets Docker users. -
Honor
!RABBITMQ_BASE!
value for the default location ofrabbitmq-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
andNODE_PORT
are handled inrabbitmq-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
- Fix a crash when certain headers are already present in the forwarded message (rabbitmq/rabbitmq-federation#12).
- Increase reconnection delay from 1 to 5 seconds (rabbitmq/rabbitmq-federation#15). This reduces the noise in the SASL log file.
- Ignore federation-specific headers added by clients (rabbitmq/rabbitmq-federation#16).
Plugin: Management UI
Enhancements
- Do not consider no-UTF-8 content as invalid (rabbitmq/rabbitmq-management#48). Now, the plugin just mentions why it cannot display it.
- Split long Base64 content in multiple lines (rabbitmq/rabbitmq-management#49).
Bug fixes
- Fix a bug with rounding moving averages (rabbitmq/rabbitmq-management#35). This caused absurd values to be displayed.
Plugin: STOMP
Bug fixes
- Properly propage extensions headers (
x-headers
) in theSUBSCRIBE
andSEND
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
- Stop recovery when a client is closed (rabbitmq/rabbitmq-java-client#77).
- Make connection handshake timeout configurable (rabbitmq/rabbitmq-java-client#81).
Client library: .NET
Bug fixes
- Handle
ObjectDisposed
exceptions gracefully when re-scheduling timers (rabbitmq/rabbitmq-dotnet-client#118). - Do not throw exceptions from a
Dispose
method (rabbitmq/rabbitmq-dotnet-client#119).
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
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
.
RabbitMQ 3.5.4 RC2
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.
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.
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
.