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);
})