Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org »

mqemitter

2.2.0 • Public • Published

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

install

npm i mqemitter

Downloadsweekly downloads

1,106

version

2.2.0

license

ISC

homepage

github.com

repository

Gitgithub

last publish

collaborators

  • avatar
Report a vulnerability