tibbar

0.2.5 • Public • Published

Tibbar

Minimalist microservice framework for node and RabbitMQ.

NPM Version NPM Downloads Build Coverage Status

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

License

MIT

Package Sidebar

Install

npm i tibbar

Weekly Downloads

1

Version

0.2.5

License

MIT

Last publish

Collaborators

  • brendan-myers