JSPM

  • Created
  • Published
  • Downloads 182699
  • Score
    100M100P100Q167088F
  • License ISC

An Opinionated Message Queue with an emitter-style API

Package Exports

  • mqemitter

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (mqemitter) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

mqemitter  Build Status

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

Installation

$ npm install mqemitter --save

Basic Example

var mq = require('mqemitter')
  , emitter = mq({ concurrency: 5 })
  , 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))

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.


emitter.removeListener(topic, callback)

The inverse of on.

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, 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.