/notifme-sdk-queue-rabbitmq

RabbitMQ plugin for Notif.me SDK

Primary LanguageJavaScriptMIT LicenseMIT

Notif.me

RabbitMQ plugin for Notif.me SDK.

npm-status js-standard-style flow-typed license

Features

  • Easy integration — Just plug and play.

  • Breakdown management — Try to reconnect automatically if connection to queue is lost, and let you choose what to do with notification requests in the meantime.

  • MIT license — Use it like you want.

Getting Started

In your application

$ yarn add notifme-sdk-queue-rabbitmq
import NotifmeRabbitMqProducer from 'notifme-sdk-queue-rabbitmq/lib/producer'

const notificationService = new NotifmeRabbitMqProducer({
  url: 'amqp://localhost'
})

notificationService.enqueueNotification({
  sms: {from: '+15000000000', to: '+15000000001', text: 'Hello, how are you?'}
}).catch(console.error)

In your worker

$ yarn add notifme-sdk notifme-sdk-queue-rabbitmq
import NotifmeSdk from 'notifme-sdk'
import NotifmeRabbitMqConsumer from 'notifme-sdk-queue-rabbitmq/lib/consumer'

const notifmeSdk = new NotifmeSdk({
  /*
   * Define all your providers here.
   * (see documentation: https://github.com/notifme/notifme-sdk#2-providers)
   */
})

const notifmeWorker = new NotifmeRabbitMqConsumer({
  url: 'amqp://localhost'
})

notifmeWorker.run(async (request) => {
  const result = await notifmeSdk.send(request)
  if (result.status === 'error') {
    /*
     * Some channels of this request have errors.
     * Which means all your providers failed for these channels.
     * Do you want to retry failing channels by enqueing to a delayed queue?
     */
  }
})

See a complete working example for more details.

How to use

Producer options

new NotifmeRabbitMqProducer({
  keepRequestsInMemoryWhileConnecting: ...,
  url: ...,
  amqpOptions: ...,
  queueName: ...,
  isPersistent: ...,
  reconnectDelaySecond: ...
})
Option name Type Default Description
keepRequestsInMemoryWhileConnecting boolean false Should the requests be kept in memory while queue is (re)connecting? If set to true, may cause memory overflow.
url string 'amqp://localhost' RabbitMQ URL. See amqplib documentation.
amqpOptions Object {} Connection options. See amqplib documentation.
queueName string 'notifme:request' Name of the queue to use.
isPersistent boolean true Is the queue persistent?
reconnectDelaySecond number 30 Time in second to wait between two reconnection tries.

Consumer options

new NotifmeRabbitMqConsumer({
  url: ...,
  amqpOptions: ...,
  queueName: ...,
  isPersistent: ...,
  reconnectDelaySecond: ...
})
Option name Type Default Description
url string 'amqp://localhost' RabbitMQ URL. See amqplib documentation.
amqpOptions Object {} Connection options. See amqplib documentation.
queueName string 'notifme:request' Name of the queue to use.
isPersistent boolean true Is the queue persistent?
reconnectDelaySecond number 30 Time in second to wait between two reconnection tries.

Contributing

Contributions are very welcome!

To get started: fork this repository to your own GitHub account and then clone it to your local device.

$ git clone git@github.com:[YOUR_USERNAME]/notifme-sdk-queue-rabbitmq.git && cd notifme-sdk-queue-rabbitmq
$ yarn install

Need Help? Found a bug?

Submit an issue to the project Github if you need any help. And, of course, feel free to submit pull requests with bug fixes or changes.