RabbitMQ 3.5.5

@dumbbell dumbbell released this Sep 24, 2015 · 3609 commits to master since this release

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 (rabbitmq/rabbitmq-server#227, rabbitmq/rabbitmq-server#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 (rabbitmq/rabbitmq-server#279). This also helps normalize throughput.

  • Improve performance when a queue is purged (rabbitmq/rabbitmq-server#295).

  • Introduce new options to tune the queue paging performance (rabbitmq/rabbitmq-server#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 (rabbitmq/rabbitmq-server#308).

  • Add an option to disable file_handle_cache's read cache (rabbitmq/rabbitmq-server#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 (rabbitmq/rabbitmq-server#291). This removes a bottleneck by avoiding synchronous calls to the Erlang application server.

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

  • Force essential TCP options (rabbitmq/rabbitmq-server#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 (rabbitmq/rabbitmq-server#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 (rabbitmq/rabbitmq-server#239). Thanks to Jared Kauppila (@jakauppila) for the patch!

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

Bug fixes

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.