Tibbar
Minimalist microservice framework for node and RabbitMQ.
npm install tibbar
Usage
Service Workers
Workers bind handlers to a route with accept(route, handler)
. Like Express, handlers are passed a request and a response object.
Routes can be bound both before and after the worker has connected to a RabbitMQ server.
const tibbar = require('tibbar');
const worker = tibbar().worker;
// Worker
worker.accept('/', (req, res) => {
res.send('Hello, world!').ack();
});
worker.connect('amqp://localhost');
Clients
After connecting to a RabbitMQ server, clients can send requests to routes with call(route, payload, timeout)
, which returns a promise containing a result
object.
Payloads can be buffers, strings, integers, or objects.
// Client
const tibbar = require('tibbar');
const client = tibbar().client;
client.connect('amqp://localhost').then(() => {
return client.call('/');
}).then(res => {
console.log(res.asString());
client.disconnect();
});
Custom middleware
Tibbar supports Express style middleware functions.
const tibbar = require('tibbar');
const worker = tibbar().worker;
// Worker
const middleware = (res, req, next) => {
console.log('Middleware');
next();
};
worker.use(middleware);
worker.accept('/', (req, res) => {
res.send('Hello, world!').ack();
});
worker.connect('amqp://localhost');
Combined client/worker
If a worker needs to call other workers, then instead of separate client and worker instances, an application
instance can be created.
An application
is just a thin wrapper for the underlying client/worker instances, although only one (shared) connection is opened to the RabbitMQ server.
const tibbar = require('tibbar');
const app = tibbar();
app.accept('/signoff', (req, res) => {
res.send('Have a nice day!').ack();
});
app.accept('/greeting', (req, res1) => {
app.call('/signoff').then(res2 => {
res1.send(`Hello, ${req.content.asString()}. ${res2.asString()}`).ack();
});
});
app.connect('amqp://localhost').then(() => {
return app.call('/greeting', 'Tibbar');
}).then(res => {
console.log(res.asString());
app.disconnect();
});