A library for making AMQP 0-9-1 clients for Node.JS, and an AMQP 0-9-1 client for Node.JS v10+. This library does not implement AMQP1.0 or AMQP0-10.
RabbitMQ Compatibility
Only 0.10.7 and later versions of this library are compatible with RabbitMQ 4.1.0 (and later releases).
Links
Project status
- Expected to work
- Complete high-level and low-level APIs (i.e., all bits of the protocol)
- Stable APIs
- A fair few tests
- Measured test coverage
- Ports of the RabbitMQ tutorials as examples
- Used in production
Still working on:
- Getting to 100% (or very close to 100%) test coverage
Callback API example
const amqplib = require('amqplib/callback_api'); const queue = 'tasks'; amqplib.connect('amqp://localhost', (err, conn) => { if (err) throw err; // Listener conn.createChannel((err, ch2) => { if (err) throw err; ch2.assertQueue(queue); ch2.consume(queue, (msg) => { if (msg !== null) { console.log(msg.content.toString()); ch2.ack(msg); } else { console.log('Consumer cancelled by server'); } }); }); // Sender conn.createChannel((err, ch1) => { if (err) throw err; ch1.assertQueue(queue); setInterval(() => { ch1.sendToQueue(queue, Buffer.from('something to do')); }, 1000); }); });
Promise/Async API example
const amqplib = require('amqplib'); (async () => { const queue = 'tasks'; const conn = await amqplib.connect('amqp://localhost'); const ch1 = await conn.createChannel(); await ch1.assertQueue(queue); // Listener ch1.consume(queue, (msg) => { if (msg !== null) { console.log('Received:', msg.content.toString()); ch1.ack(msg); } else { console.log('Consumer cancelled by server'); } }); // Sender const ch2 = await conn.createChannel(); setInterval(() => { ch2.sendToQueue(queue, Buffer.from('something to do')); }, 1000); })();
Running tests
To run the tests RabbitMQ is required. Either install it with your package manager, or use docker to run a RabbitMQ instance.
docker run -d --name amqp.test -p 5672:5672 rabbitmq
If prefer not to run RabbitMQ locally it is also possible to use a
instance of RabbitMQ hosted elsewhere. Use the URL environment
variable to configure a different amqp host to connect to. You may
also need to do this if docker is not on localhost; e.g., if it's
running in docker-machine.
One public host is dev.rabbitmq.com:
URL=amqp://dev.rabbitmq.com npm test
NB You may experience test failures due to timeouts if using the dev.rabbitmq.com instance.
You can run it under different versions of Node.JS using nave:
or run the tests on all supported versions of Node.JS in one go:
(which also needs nave installed, of course).
Lastly, setting the environment variable LOG_ERRORS will cause the
tests to output error messages encountered, to the console; this is
really only useful for checking the kind and formatting of the errors.
Test coverage
make coverage
open file://`pwd`/coverage/lcov-report/index.html