amqplib
Version:
An AMQP 0-9-1 (e.g., RabbitMQ) library and client.
52 lines (43 loc) • 1.43 kB
JavaScript
const amqp = require('amqplib/callback_api');
const { basename } = require('path');
const { v4: uuid } = require('uuid');
const queue = 'rpc_queue';
const n = parseInt(process.argv[2], 10);
if (isNaN(n)) {
console.warn('Usage: %s number', basename(process.argv[1]));
process.exit(1);
}
amqp.connect((err, connection) => {
if (err) return bail(err);
connection.createChannel((err, channel) => {
if (err) return bail(err, connection);
channel.assertQueue('', { exclusive: true }, (err, { queue: replyTo }) => {
if (err) return bail(err, connection);
const correlationId = uuid();
channel.consume(replyTo, (message) => {
if (!message) console.warn(' [x] Consumer cancelled');
else if (message.properties.correlationId === correlationId) {
console.log(' [.] Got %d', message.content.toString());
channel.close(() => {
connection.close();
})
}
}, { noAck: true });
channel.assertQueue(queue, { durable: false }, (err) => {
if (err) return bail(err, connection);
console.log(' [x] Requesting fib(%d)', n);
channel.sendToQueue(queue, Buffer.from(n.toString()), {
correlationId,
replyTo
});
});
});
});
});
function bail(err, connection) {
console.error(err);
if (connection) connection.close(() => {
process.exit(1);
});
}