5.4.3 • Published 2 months ago

@pager/jackrabbit v5.4.3

Weekly downloads
4,363
License
MIT
Repository
github
Last release
2 months ago

Jackrabbit

This is a fork of hunterloftis/jackrabbit.

CircleCI

Jackrabbit is a very opinionated abstraction built on top of amqplib focused on usability and implementing several messaging patterns on RabbitMQ.

Simple Example

// producer.js
'use strict';

const jackrabbit = require('@pager/jackrabbit');
const rabbit = jackrabbit(process.env.RABBIT_URL);

rabbit
  .default()
  .publish('Hello World!', { key: 'hello' })
  .on('drain', rabbit.close);
// consumer.js
'use strict';

const jackrabbit = require('@pager/jackrabbit');
const rabbit = jackrabbit(process.env.RABBIT_URL);

rabbit
  .default()
  .queue({ name: 'hello' })
  .consume(onMessage, { noAck: true });

function onMessage(data) {
  console.log('received:', data);
}

Ack/Nack Consumer Example

'use strict';

const jackrabbit = require('@pager/jackrabbit');
const rabbit = jackrabbit(process.env.RABBIT_URL);

rabbit
  .default()
  .queue({ name: 'important_job' })
  .consume(function(data, ack, nack, msg) {
    // process data...
    // and ACK on success
    ack();
    // or alternatively NACK on failure
    nack();
  })

More Examples

For now, the best usage help is can be found in examples, which map 1-to-1 with the official RabbitMQ tutorials.

Installation

npm install --save @pager/jackrabbit

Tests

The tests are set up with Docker + Docker-Compose, so you don't need to install rabbitmq (or even node) to run them:

$ docker-compose up

Reconnection

Jackrabbit is a wrapper for ampqlib, ampqlib does NOT support reconnection.

This project will try to recover a lost connection gracefully, if it fails to do so, we will throw an error event and then exit the current process with code 1.

Our approach to reconnection is recording all the exchanges and queues created through jackrabbit. Once a connection is lost, we will try to create a new one, update the existing exchange and queue references, initialize a new channel for each queue, and bind each queue's consumers to their new channel. This should be transparent to any users of this lib.

You can configure some basic parameters of the reconnection process with some env vars:

NameDefaultDescription
RABBIT_RECONNECTION_TIMEOUT2000ms between each reconnection attempt. The first attempt will always be immediate.
RABBIT_RECONNECTION_RETRIES20Amount of retries before erroring out and killing the node process.
RABBIT_RECONNECTION_EXACT_TIMEOUTfalseTo prevent total outages on HA services, we're adding a random overhead of 0-10% to the reconnection timeout by default. You can disable this behaviour by setting this option to true.
5.4.2-a001

2 months ago

5.4.3

2 months ago

5.4.2

4 months ago

5.4.1

5 months ago

5.4.0

5 months ago

5.3.1

1 year ago

5.3.0

2 years ago

5.2.5

2 years ago

5.2.4

2 years ago

5.2.3

2 years ago

5.2.2

2 years ago

5.2.1

2 years ago

5.2.0

2 years ago

5.1.0

2 years ago

5.0.10

2 years ago

5.0.9

2 years ago

5.0.8

3 years ago

5.0.7

3 years ago

5.0.6

3 years ago

5.0.5

3 years ago

5.0.4

3 years ago

5.0.3

3 years ago

5.0.2

3 years ago

5.0.1

3 years ago

5.0.0

3 years ago

4.8.2

3 years ago

4.8.1

3 years ago

4.8.0

3 years ago

4.7.1

3 years ago

4.7.0

4 years ago

4.6.8

5 years ago

4.6.7

5 years ago

4.6.6

5 years ago

4.6.5

5 years ago

4.6.4

5 years ago

4.6.3

5 years ago

4.7.0-rc.1

5 years ago

4.6.1

5 years ago

4.6.0

6 years ago

4.5.3

6 years ago

4.5.2

6 years ago

4.5.1

6 years ago

4.5.0

6 years ago

4.4.0

6 years ago