Wondering what’s next for npm?Check out our public roadmap! »

    mqemitter
    TypeScript icon, indicating that this package has built-in type declarations

    4.4.1 • Public • Published

    MQEmitter

    ci Known Vulnerabilities js-standard-style
    Dependencies Status devDependencies Status
    NPM version NPM downloads

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

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

    Installation

    npm install mqemitter

    Examples

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

    new MQEmitter ([options])

    • options <object>
      • concurrency <number> maximum number of concurrent messages that can be on concurrent delivery. Default: 0
      • wildcardOne <string> a char to use for matching exactly one non-empty level word. Default: +
      • wildcardSome <string> a char to use for matching multiple level wildcards. Default: #`
      • matchEmptyLevels <boolean> If true then wildcardOne also matches an empty word. Default: true
      • separator <string> a separator character to use for separating words. Default: /

    Create a new MQEmitter class.

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

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

    emitter.emit (message, callback)

    • message <object>
    • callback <Function> (error) => void
      • error <Error> | null

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

    emitter.on (topic, listener, [callback])

    • topic <string>
    • listener <Function> (message, done) => void
    • callback <Function> () => void

    Add the given listener to the passed topic. Topic can contain wildcards, as defined on creation.

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

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

    emitter.removeListener (topic, listener, [callback])

    The inverse of on.

    emitter.close (callback)

    • callback <Function> () => void

    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.

    The wildcard character + matches exactly non-empty one word:

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

    The wildcard character + matches one word:

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

    The wildcard character # matches zero or more words:

    const mq = require('mqemitter')
    const 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

    17,260

    Version

    4.4.1

    License

    ISC

    Unpacked Size

    35.5 kB

    Total Files

    16

    Last publish

    Collaborators

    • avatar