Skip to content

arobson/rabbot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

49760e4 Â· Jun 17, 2020
Feb 16, 2018
Feb 18, 2018
Feb 18, 2018
Feb 18, 2018
Sep 6, 2016
Feb 18, 2018
Dec 12, 2015
Feb 18, 2018
Feb 16, 2018
Feb 18, 2018
Feb 16, 2018
Feb 16, 2018
Aug 31, 2016
Feb 18, 2018
Jun 4, 2016
Feb 16, 2018
Jun 17, 2020
Feb 16, 2018
Feb 18, 2018

Repository files navigation

rabbot

Build Status Coverage Status Version npm npm Downloads Dependencies

Deprecated

As many have already noticed, I have not had the time to maintain this library in quite some time. I appreciate that Zach Lintz has taken the initiative to fork this and continue maintenance over at [https://github.com/foo-foo-mq/foo-foo-mq]. I appreciate that Zach has made it possible for folks to continue using this approach. Thanks, Zach! 🎉

Summary

This is a very opinionated abstraction over amqplib to help simplify the implementation of several messaging patterns on RabbitMQ.

!Important! - successful use of this library will require a conceptual knowledge of AMQP and an understanding of RabbitMQ.

Features:

  • Attempt to gracefully handle lost connections and channels
  • Automatically re-assert all topology on re-connection
  • Support the majority of RabbitMQ's extensions
  • Handle batching of acknowledgements and rejections
  • Topology & configuration via JSON (thanks to @JohnDMathis!)
  • Built-in support for JSON, binary and text message bodies
  • Support for custom serialization

Assumptions & Defaults:

  • Fault-tolerance/resilience over throughput
  • Prefer "at least once delivery"
  • Default to publish confirmation
  • Default to ack mode on consumers
  • Heterogenous services that include statically typed languages
  • JSON as the default serialization provider for object based message bodies

Documentation You Should Read

Other Documents

Demos

API Example

This contrived example is here to make it easy to see what the API looks like now that documentation is broken up across multiple pages.

const rabbit = require('rabbot');

rabbot.handle('MyMessage', (msg) => {
  console.log('received msg', msg.body);
  msg.ack();
});

rabbot.handle('MyRequest', (req) => {
  req.reply('yes?');
});

rabbot.configure({
  connection: {
    name: 'default',
    user: 'guest',
    pass: 'guest',
    host: 'my-rabbot-server',
    port: 5672,
    vhost: '%2f',
    replyQueue: 'customReplyQueue'
  },
  exchanges: [
    { name: 'ex.1', type: 'fanout', autoDelete: true }
  ],
  queues: [
    { name: 'q.1', autoDelete: true, subscribe: true },
  ],
  bindings: [
    { exchange: 'ex.1', target: 'q.1', keys: [] }
  ]
}).then(
  () => console.log('connected!');
);

rabbot.request('ex.1', { type: 'MyRequest' })
  .then(
    reply => {
      console.log('got response:', reply.body);
      reply.ack();
    }
  );

rabbot.publish('ex.1', { type: 'MyMessage', body: 'hello!' });


setTimeout(() => {
  rabbot.shutdown(true)
},5000);

Roadmap

  • improve support RabbitMQ backpressure mechanisms
  • add support for Rabbit's HTTP API