tibbar
v0.2.5
Published
Minimalist microservice framework for node and RabbitMQ.
Downloads
30
Maintainers
Readme
Tibbar
Minimalist microservice framework for node and RabbitMQ.
npm install tibbarUsage
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();
});