Skip to content

@dumbbell dumbbell released this Sep 24, 2015 · 5155 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 (#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 the rabbitmq-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 of rabbitmq-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 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. 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

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.

Assets 32
You can’t perform that action at this time.