UNPKG

amqplib

Version:

An AMQP 0-9-1 (e.g., RabbitMQ) library and client.

56 lines (48 loc) 1.5 kB
#!/usr/bin/env node const amqp = require('amqplib/callback_api'); const { basename } = require('node:path'); const { v4: uuid } = require('uuid'); const queue = 'rpc_queue'; const n = parseInt(process.argv[2], 10); if (Number.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); }); }