node package manager
Easy sharing. Manage teams and permissions with one click. Create a free org »

mqemitter

mqemitter  Build Status

An Opinionated Message Queue with an emitter-style API, but with callbacks.

If you need a multi process MQEmitter, check out the table below:

mqemitter redis
mqemitter mongodb
mqemitter child process
mqemitter client server
mqemitter aerospike

JavaScript Style Guide

Installation

$ npm install mqemitter --save

Basic Example

var mq = require('mqemitter')
var emitter = mq({ concurrency: 5 })
var message
 
emitter.on('hello world', function (message, cb) {
  // call callback when you are done 
  // do not pass any errors, the emitter cannot handle it. 
  cb()
})
 
// topic is mandatory 
message = { topic: 'hello world', payload: 'or any other fields' }
emitter.emit(message, function () {
  // emitter will never return an error 
})

API


MQEmitter(opts)

MQEmitter is the class and function exposed by this module. It can be created by MQEmitter() or using new MQEmitter().

An MQEmitter accepts the following options:

  • concurrency: the maximum number of concurrent messages that can be on concurrent delivery.
  • wildcardOne: the char that will match one level wildcards.
  • wildcardSome: that char that will match multiple level wildcards.
  • separator: the separator for the different levels.

For more information on wildcards, see this explanation or Qlobber.


emitter.emit(message, callback())

Emit the given message, which must have a topic property, which can contain wildcards as defined on creation.


emitter.on(topic, callback(message, done), [onDone(err)])

Add the given callback to the passed topic. Topic can contain wildcards, as defined on creation. The callback, accept two parameters, the passed message and a done callback.

The callback must never error and done must not be called with an err object.

onDone will be called when the event subscribe is done correctly.


emitter.removeListener(topic, callback(message, done), [removeDone(err)])

The inverse of on.


emitter.close(callback())

Close the given emitter. After, all writes will return an error.

Wildcards

MQEmitter supports the use of wildcards: every topic is splitted according to separator (default /).

The wildcard character + matches exactly one word:

var mq = require('mqemitter')
  , emitter = mq()
 
emitter.on('hello/+/world', function(message, cb) {
  // this will print { topic: 'hello/my/world', 'something': 'more' } 
  console.log(message)
  cb()
})
 
emitter.on('hello/+', function(message, cb) {
  // this will not be called 
  console.log(message)
  cb()
})
 
emitter.emit({ topic: 'hello/my/world', something: 'more' })

The wildcard character # matches zero or more words:

var mq = require('mqemitter')
  , emitter = mq()
 
emitter.on('hello/#', function(message, cb) {
  // this will print { topic: 'hello/my/world', 'something': 'more' } 
  console.log(message)
  cb()
})
 
emitter.on('#', function(message, cb) {
  // this will print { topic: 'hello/my/world', 'something': 'more' } 
  console.log(message)
  cb()
})
 
emitter.on('hello/my/world/#', function(message, cb) {
  // this will print { topic: 'hello/my/world', 'something': 'more' } 
  console.log(message)
  cb()
})
 
emitter.emit({ topic: 'hello/my/world', something: 'more' })

Of course, you can mix # and + in the same subscription.

LICENSE

MIT