[erlang-questions] [ANN] Turtle - Yet another wrapper for the RabbitMQ erlang client

Jesper Louis Andersen <>
Fri Oct 23 13:46:05 CEST 2015


At Shopgun, we've just Open Sourced our "turtle" application:


The turtle application is built to be a wrapper around the RabbitMQ
standard Erlang driver. The purpose is to enable faster implementation and
use of RabbitMQ by factoring out common tasks into a specific application
targeted toward ease of use.

The secondary purpose is to make the Erlang client better behaving toward
an OTP setup. The official client makes lots of assumptions which are not
always true in an OTP setting.

The features of turtle are:

Maintain RabbitMQ connections and automate re-connections if the network is
temporarily severed. Provides the invariant that there is always a process
knowing the connection state toward RabbitMQ. If the connection is down,
you will receive errors back.

Provide support for having multiple connection points to the RabbitMQ
cluster. On failure the client will try the next client in the group. On
too many failures on a group, connect to a backup group instead. This
allows a client the ability to use a backup cluster in another data center,
should the primary cluster break down.

Support easy subscription where each received message is handled by a
stateful callback function supplied by the application.

Support easy message sending anywhere in the application by introducing a
connection proxy.

Support RPC style calls in RabbitMQ over the connection proxy. This allows
a caller to block on an AMQP style RPC message since the connection proxy
handles the asynchronous non-blocking behavior.

Tracks timing of most calls. This allows you to gather metrics on the
behavior of underlying systems and in turn handle erroneous cases


We are using the application in several setups internally, and it has
already helped us more than once. It bears some resemblance with other
applications which has been written in the same area, such as MochiMedias
gen_bunny, or as I've seen them as closed source implementations. This is a
rewrite, focusing on the support of RPC style messaging with timing

I'm interested in speaking to potential users of turtle, so we can help
each other. Also, please get in touch if you need a dependency broken or
altered for you to be able to use it.

The documentation is written with a users guide in the README.md, which I
hope is good enough for people to be able to get started. If not, please
open an Issue :)

On behalf of the Shopgun team,

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20151023/86629a5d/attachment.html>

More information about the erlang-questions mailing list