Skip to content


Subversion checkout URL

You can clone with
Download ZIP
MongoMQ is a messaging queue built on top of Node.js and MongoDB's tailable cursors.
JavaScript CoffeeScript
Tree: b682662271

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.

MongoMQ - Node.js MongoMQ


From GitHub

  • Download from GitHub and extract.
  • npm install mongodb

Using NPM

  • npm install MongoMQ

What is MongoMQ?

MongoMQ is a messaging queue built on top of Node.js and MongoDB's tailable cursors. It allows for distributed of messages across workers in both a single reciever and broadcast method.

What MongoMQ is NOT

MongoMQ does NOT (currently) support callback's once a message is processed. Instead it is recommended that you use a one time listener to pickup responses if this is required.

Supported Methods

new MongoMQ(options)


  • mqCollectionName - Collection to store queue messages in, defaults to 'queue'
  • mqDB - Database to store queue in, defaults to 'MongoMQ'
  • server - If not running against a ReplicaSet this is the server to connect to
  • port - If not running against a ReplicaSet this is the server port to connect with
  • servers[] - If connecting to a ReplicaSet then this is a collection of {host: 'hostname', port: 1234} objects defining the root entry for the ReplicaSet

MongoMQ.on(msgType, passive, callback);


  • The message type to listen for


  • If true will not mark the message as handled and will

callback(err, messageContents, next)

  • Use next() to look for another message in the queue, don't call next() if you only want a one time listener

MongoMQ.emit(msgType, messageContents);


  • The message type to send


  • What to send

How does MongoMQ work?

MongoMQ sets up a tailable collection and then starts listeners using find in conjunction with findAndModify to pickup messages out of this collection.

Since MongoMQ is basically a wrapper around MongoDB's built in support for tailable cursors it is possible to place listeners built in other langauges on the "queue".

Sample Usage

  • Ensure MongoDB is up and running locally (or modify the config options to collect to your Mongo instance)
  • Start 3 copies of the bin/test.js script.
  • In two copies type listen() to setup a "test" message listener
  • In the 3rd copy type load() to send 100 test messages to the queue

You should see the two listeners pickup messages one at a time with whoever has resources to process picking up the message first.


var MongoMQ = require('../lib/MongoMQ').MongoMQ;
var repl = require('repl');

var queue = new MongoMQ();

var r = repl.start({
      prompt: ">"

r.on('exit', function(){

r.context.listen = function(){
  queue.on('test', function(err, data, next){
    console.log('got: ', data);

var msgidx = 0;
r.context.send = function(){
  queue.emit('test', msgidx);

r.context.load = function(){
  for(var i = 0; i<100; i++){
    queue.emit('test', msgidx);

r.context.queue = queue;
Something went wrong with that request. Please try again.