Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
An Opinionated Message Queue with an emitter-style API
JavaScript
Branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
.gitignore
.travis.yml
LICENSE
README.md
abstractTest.js
bench.js
mqemitter.js
package.json
test.js

README.md

mqemitter  Build Status

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

Do you need a multi process MQEmitter? Check out mqemitter-redis or mqemitter-mongodb.

js-standard-style

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

Copyright (c) 2014-2015, Matteo Collina hello@matteocollina.com

Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

Something went wrong with that request. Please try again.