0.2.0 • Published 7 years ago
amqplib-auto-recovery v0.2.0
amqplib-auto-recovery
Automatic connection recovery for amqplib. Node.js 6+.
Installation
npm install amqplib-auto-recovery --save
Usage
Wrap amqp client with auto recovery decorator (like shown below).
API stays absolutely the same as before *. The only difference is that amqp.connect(...)
's callback
will be executed each time (re)connection is attempted (exponential backoff is turned on by default).
const amqp = require('amqplib/callback_api');
const withAutoRecovery = require('amqplib-auto-recovery');
withAutoRecovery(amqp, {
// onError: (err) => { console.log(err.message) },
// isErrorUnrecoverable: (err) => false
// for more see src/amqplib-auto-recovery.js
}).connect("amqp://localhost", (err, con) => {
if (err) {
console.error(`Failed to connect (${err.message})`);
return
}
console.info("Connection established");
con.createChannel((err, ch) => {
if (err) {
console.error(`Failed to create a channel (${err.message})`);
return
}
ch.prefetch(1, false);
ch.assertQueue(consumer.queue, {durable: true});
ch.consume(consumer.queue, (msg) => {
// handle msg
});
});
});
* with exception to closed
property (added to connection/channel), which
might come in handy in situations like:
// ...
ch.consume(consumer.queue, (msg) => {
// simulating a long-running task
setTimeout(() => {
if (ch.closed) {
console.log("Channel had been closed before task was completed");
return
}
ch.ack(msg); // throws IllegalOperationError if channel is closed
// note that this is a standard amqplib behavior and not something
// introduced by amqplib-auto-recovery
}, 5000);
});