rabbit-rr
v2.0.0
Published
Simple rabbitmq client for use with REQ/REP pattern
Downloads
5
Readme
rabbit-rr
A simple rabbitmq module based on amqplib
and inspired by
rabbit.js
meant to provide a simple callback interface for using
a req/rep pattern. This is ideal when doing concurrent operations that require
the return callback to be properly associated with the data that was sent (and
the result then returned)
Goal:
The purpose of this module is to hide all of the dirty async startup needed when
connecting to rabbit. When initializing a constructor, we establish a connection
to rabbit and
begin creating a channel
WITH that connection
. This channel and connection
is used with any socket created with the rabbit instance. We take care of
deferring the function calls of connect
and send
(send
is only for the REQ
socket) so
that you have a clean and simple API to use. Each Rabbit
and Socket
instance
is an EventEmitter
with various events associated for gaining insight into the
inner workings. The main event to worry about though is the message
event on
the REP
socket which emits any message received from a REQ
socket with
a callback to reply to it. Please see the example below to understand my
ramblings.
Example:
Below shows a simple use case
var Rabbit = require('rabbit-rr');
//
// Remark: This constructor accepts an object or URL string with the
// options you want to pass into `amqplib` to connect (e.g ssl options)
//
var rabbit = new Rabbit()
.on('ready', function () {
console.log('We are conected to Rabbit!');
});
//
// Creates a socket to handle sending requests to Rabbit,
// options are accepted as a second argument
//
var req = rabbit.socket('REQ')
.on('error', console.error.bind(console))
.on('ready', function () {
// Called when channel has been assigned
console.log('REQ socket Ready!');
})
// Connect to the specified Queue, accepts an optional callback
.connect('made_up_queue')
.on('connect', function () {
console.log('REQ has connected to queue');
})
// We assume and parse payloads as objects
.send({ foo: 'bar' }, function (err, msg) {
if (err) return console.error('application error from REP socket %s', err.message)
console.log('received msg %j', msg);
});
var rep = rabbit.socket('REP')
.on('error', console.error.bind(console))
.on('ready', function () {
console.log('REP socket ready');
})
.connect('made_up_queue')
.on('connect', function () {
console.log('REP has connected');
})
// Listen for messages from requester
.on('message', function (msg, reply) {
// Reply to them with a particular payload
// We assume object payloads everywhere
reply(undefined, { reply: 'wooo' });
});