Ruby RabbitMQ clients blog

News and updates about various Ruby clients for RabbitMQ

March Hare 2.2.0 Is Released

TL;DR

March Hare 2.2.0 is released to rubygems.org.

This is a bug fix release.

Changes Between 2.1.x and 2.2.0

IOExceptions Conversion Fix

Causeless IOExceptions and SocketExceptions thrown by the Java client are correctly converted to IOError in Ruby land.

Client-side Flow Control Removed

MarchHare::Channel#channel_flow is removed. Client-side flow control has been deprecated for some time and is now removed in the Java client.

Confirm Hooks Recovery

Confirm hooks (callbacks) are now recovered automatically.

Contributed by Noah Magram.

RabbitMQ Java Client Upgrade

RabbitMQ Java client dependency has been updated to 3.3.x.

Internal Exchanges

Exchanges now can be declared as internal:

1
2
ch = conn.create_channel
x  = ch.fanout("marchhare.tests.exchanges.internal", :internal => true)

Internal exchanges cannot be published to by clients and are solely used for Exchange-to-Exchange bindings and various plugins but apps may still need to bind them. Now it is possible to do so with March Hare.

Custom Executor Shutdown

MarchHare::Session#close now will always shut down the custom executor service it was using, if any.

Ruby 1.8 Support Dropped

March Hare no longer officially supports Ruby 1.8.

Full Change Log

Please consult the change log to learn about the changes.

About the Author

Michael on behalf of the Ruby RabbitMQ Clients Team

Bunny 1.2.1 Is Released

TL;DR

Bunny 1.2.1 is released to rubygems.org.

This is a bug fix release.

Changes between Bunny 1.2.0 and 1.2.1

Better Synchronization for Publisher Confirms

Publisher confirms implementation now synchronizes unconfirmed set better.

Contributed by Nicolas Viennot.

Channel Allocation After Recovery

Channel id allocator is no longer reset after recovery if there are channels open. Makes it possible to open channels on a recovered connection (in addition to the channels it already had).

Full Change Log

Full change log can be found on GitHub.

About the Author

Michael on behalf of the Ruby RabbitMQ Clients Team

Bunny 1.2.0 Is Released

TL;DR

Bunny 1.2.0 is released to rubygems.org.

This is a minor feature and bug fix release.

Changes between Bunny 1.1.0 and 1.2.0

:key Supported in Bunny::Channel#queue_bind

It is now possible to use :key (which Bunny versions prior to 0.9 used) as well as :routing_key as an argument to Bunny::Queue#bind.

System Exceptions Not Rescued by the Library

Bunny now rescues StandardError instead of Exception where it automatically does so (e.g. when dispatching deliveries to consumers).

Contributed by Alex Young.

Initial Socket Connection Timeout Again Raises Bunny::TCPConnectionFailed

Initial socket connection timeout again raises Bunny::TCPConnectionFailed on the connection origin thread.

Thread Leaks Plugged

Bunny::Session#close on connections that have experienced a network failure will correctly clean up I/O and heartbeat sender threads.

Contributed by m-o-e.

Bunny::Concurrent::ContinuationQueue#poll Rounding Fix

Bunny::Concurrent::ContinuationQueue#poll no longer floors the argument to the nearest second.

Contributed by Brian Abreu.

Routing Key Limit

Per AMQP 0-9-1 spec, routing keys cannot be longer than 255 characters. Bunny::Channel#basic_publish and Bunny::Exchange#publish now enforces this limit.

Nagle’s Algorithm Disabled Correctly

Bunny now properly disables Nagle’s algorithm on the sockets it opens. This likely means significantly lower latency for workloads that involve sending a lot of small messages very frequently.

Contributed by Nelson Gauthier (AirBnB).

Internal Exchanges

Exchanges now can be declared as internal:

1
2
ch = conn.create_channel
x  = ch.fanout("bunny.tests.exchanges.internal", :internal => true)

Internal exchanges cannot be published to by clients and are solely used for Exchange-to-Exchange bindings and various plugins but apps may still need to bind them. Now it is possible to do so with Bunny.

Uncaught Consumer Exceptions

Uncaught consumer exceptions are now handled by uncaught exceptions handler that can be defined per channel:

1
2
3
ch.on_uncaught_exception do |e, consumer|
  # ...
end

Full Change Log

Full change log can be found on GitHub.

About the Author

Michael on behalf of the Ruby RabbitMQ Clients Team

Bunny 1.1.9 Is Released

TL;DR

Bunny 1.1.9 is released to rubygems.org.

This is a bug fix release and the last release in 1.1.x series.

Changes between Bunny 1.1.8 and 1.1.9

:key Supported in Bunny::Channel#queue_bind

It is now possible to use :key (which Bunny versions prior to 0.9 used) as well as :routing_key as an argument to Bunny::Queue#bind.

System Exceptions Not Rescued by the Library

Bunny now rescues StandardError instead of Exception where it automatically does so (e.g. when dispatching deliveries to consumers).

Contributed by Alex Young.

Full Change Log

Full change log can be found on GitHub.

About the Author

Michael on behalf of the Ruby RabbitMQ Clients Team

Bunny 1.1.8 Is Released

TL;DR

Bunny 1.1.8 is released to rubygems.org.

This is a bug fix release.

Changes between Bunny 1.1.7 and 1.1.8

Initial Socket Connection Timeout Again Raises Bunny::TCPConnectionFailed

Initial socket connection timeout again raises Bunny::TCPConnectionFailed on the connection origin thread.

Full Change Log

Full change log can be found on GitHub.

About the Author

Michael on behalf of the Ruby RabbitMQ Clients Team

Bunny 1.1.7 Is Released

TL;DR

Bunny 1.1.7 is released to rubygems.org.

This is a bug fix release.

Changes between Bunny 1.1.6 and 1.1.7

Heartbeat Sender Thread Leak

Bunny::Session#close no longer leaks heartbeat sender threads.

Contributed by m-o-e.

Full Change Log

Full change log can be found on GitHub.

About the Author

Michael on behalf of the Ruby RabbitMQ Clients Team

Bunny 1.1.6 Is Released

TL;DR

Bunny 1.1.6 is released to rubygems.org.

This is a bug fix release.

Changes between Bunny 1.1.5 and 1.1.6

Cherry-picked Missing Commit from Master

Bunny::Session#clean_up_on_shutdown was cherry-picked from master.

Routing Key Limit

Per AMQP 0-9-1 spec, routing keys cannot be longer than 255 characters. Bunny::Channel#basic_publish and Bunny::Exchange#publish now enforces this limit.

Full Change Log

Full change log can be found on GitHub.

About the Author

Michael on behalf of the Ruby RabbitMQ Clients Team

Bunny 1.1.5 Is Released

TL;DR

Bunny 1.1.5 is released to rubygems.org.

This is a bug fix release.

Changes between Bunny 1.1.4 and 1.1.5

Thread Leak Plugged

Bunny::Session#close on connections that have experienced a network failure will correctly clean up I/O thread.

Changes between Bunny 1.1.3 and 1.1.4

Bunny::Concurrent::ContinuationQueue#poll Rounding Fix

Bunny::Concurrent::ContinuationQueue#poll no longer floors the argument to the nearest second.

Contributed by Brian Abreu.

Full Change Log

Full change log can be found on GitHub.

About the Author

Michael on behalf of the Ruby RabbitMQ Clients Team

Bunny 1.1.3 Is Released

TL;DR

Bunny 1.1.3 is released to rubygems.org.

This is a bug fix release.

Changes between Bunny 1.1.2 and 1.1.3

Nagle’s Algorithm Disabled Correctly

Bunny now properly disables Nagle’s algorithm on the sockets it opens. This likely means significantly lower latency for workloads that involve sending a lot of small messages very frequently:

Contributed by Nelson Gauthier (AirBnB).

Full Change Log

Full change log can be found on GitHub.

About the Author

Michael on behalf of the Ruby RabbitMQ Clients Team

Hutch 0.8.0 Is Released

TL;DR

Hutch 0.8.0 is released to rubygems.org.

This release introduces several minor new features.

Changes Between 0.7.0 and 0.8.0

Uncaught Exceptions Result in Rejected Messages

Uncaught exceptions in consumers now result in Hutch rejecting messages (deliveries) using basic.nack. This way they are dead lettered.

Contributed by Garrett Johnson.

Missing Require

hutch/consumer.rb no longer fails to load with the apps that do not require "set".

Contributed by Garrett Johnson.

Relaxed Queue Namespace Validation

Namespaces now can include any characters that are valid in RabbitMQ queue names.

Contributed by Garrett Johnson.

basic.qos Configuration

It is now possible to configure basic.qos (aka channel prefetch) setting used by Hutch using the :channel_prefetch config key.

Passwords No Longer Logged

Hutch now elides passwords from logs.

Full Changelog

Full change log can be found on GitHub.

About the Author

Michael on behalf of the Hutch maintainers Team.