@johnmmackey/amqp-rpc

RPC Classes for use with AMQP

Stats

stars 🌟issues ⚠️updated 🛠created 🐣size 🏋️‍♀️
Minified + gzip package size for @johnmmackey/amqp-rpc in KB

Readme

amqp-msrvlib

RPC classes for use with ampqlib.

Due to the use of ES6 features, this module requires Node.js V8 or above.

Installation

npm install @johnmmackey/amqp-rpc

RPCQueueManager Class

This class is used to manage a queue towards an RPC server. Note that under the hood, json-rpc 2.0 is used, although this is transparent to the class consumer.

const amqprc = require('@johnmmackey/amqp-rpc');

var rpcQM = new (amqprpc.RPCQueueManager)(connection, 5000);     //connection and RPC ttl for this queue
// its an event emitter - only emits 'debug' 
rpcQM.on('debug', msg => {
    winston.debug('rpcQ:', msg);
})

To send an RPC request, use the add method. Parameters are:

  • the destination queue name (string)
  • the method to invoke on the server (string)
  • parameters (any type, optional, and can be an array)
    rpcQM.add('server', 'test', {a: 2})
        .then(r => {
            // response is an object
            winston.verbose('Result is', JSON.stringify(r));
        })
        .catch(err => {
            winston.error('RPC failed:', err.message);
        });
    

RPCServer Class

This class is used by the RPC Server.

var n = new amqprpc.RPCServer(connection, server_queue_name, callback);

The callback function must be an async function. It is invoked with two parameters - the method and params from the RPC request above.

(new amqprpc.RPCServer(connection, 'serverq', async (method, params) => {
    if (there is a problem)
        return Promise.reject(new Error('Cant do that'));
    // do some async work
    return result;
}))
    .on('debug', debug => {
        //console.log('RPCServer Debug:', debug);
    })

If you find any bugs or have a feature request, please open an issue on github!

The npm package download data comes from npm's download counts api and package details come from npms.io.