{"id":43090,"library":"mongo-message-queue","title":"mongo-message-queue","description":"A promise-based message queue for Node.js backed by MongoDB. Version 1.1.0 is the latest stable release. It provides a simple worker pattern where messages of a given type are processed by registered handlers, with built-in retry and rejection support. Compatible with MongoDB driver versions 4 through 6 and MongoDB server versions 5 through 7. Uses polling (default 1 second) to check for new messages. Differentiators: lightweight, no external dependencies besides MongoDB, and simple API.","status":"active","version":"1.1.0","language":"javascript","source_language":"en","source_url":"https://github.com/wonderlic/mongo-message-queue","tags":["javascript"],"install":[{"cmd":"npm install mongo-message-queue","lang":"bash","label":"npm"},{"cmd":"yarn add mongo-message-queue","lang":"bash","label":"yarn"},{"cmd":"pnpm add mongo-message-queue","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Peer dependency required for database connection and operations.","package":"mongodb","optional":false}],"imports":[{"note":"Package is CommonJS-only; does not support ESM imports.","wrong":"import MessageQueue from 'mongo-message-queue';","symbol":"MessageQueue","correct":"const MessageQueue = require('mongo-message-queue');"},{"note":"The package exports a single constructor function directly, not as named export. So destructuring will give undefined.","wrong":"const { MessageQueue } = require('mongo-message-queue');","symbol":"MessageQueue","correct":"const { MessageQueue } = require('mongo-message-queue');"},{"note":"Both forms work with MongoDB driver v4+, but destructuring is modern.","wrong":"const MongoClient = require('mongodb').MongoClient;","symbol":"MongoClient","correct":"const { MongoClient } = require('mongodb');"}],"quickstart":{"code":"const MessageQueue = require('mongo-message-queue');\nconst { MongoClient } = require('mongodb');\n\nconst mQueue = new MessageQueue();\nconst mongoUri = process.env.MONGO_URI || 'mongodb://localhost:27017';\n\nmQueue.databasePromise = async () => {\n  const client = new MongoClient(mongoUri);\n  await client.connect();\n  return client.db('messageQueue');\n};\n\nmQueue.registerWorker('sendEmail', async (queueItem) => {\n  const { to, subject } = queueItem.message;\n  try {\n    // Simulate sending email\n    console.log(`Sending email to ${to}: ${subject}`);\n    return 'Completed';\n  } catch (err) {\n    queueItem.releasedReason = err.message;\n    if ((queueItem.retryCount || 0) < 3) {\n      queueItem.nextReceivableTime = new Date(Date.now() + 10000);\n      return 'Retry';\n    } else {\n      queueItem.rejectionReason = 'Max retries exceeded';\n      return 'Rejected';\n    }\n  }\n});\n\nawait mQueue.enqueue('sendEmail', { to: 'user@example.com', subject: 'Hello' });\nconsole.log('Message enqueued');","lang":"javascript","description":"Shows how to instantiate MessageQueue, set up a MongoDB connection, register a worker with retry logic, and enqueue a message."},"warnings":[{"fix":"Update MongoDB driver to version 4.0.0 or higher.","message":"MongoDB driver peer dependency changed from 3.x to >= 4.0.0 in version 1.0.0.","severity":"breaking","affected_versions":"<1.0.0"},{"fix":"Ensure the promise resolves to a Db object (from client.db()), not a MongoClient.","message":"The .databasePromise method expects a function returning a promise to a database object, not a client.","severity":"deprecated","affected_versions":">=1.0.0"},{"fix":"Use mQueue.stopPolling() when you no longer need to process messages.","message":"Polling starts automatically on worker registration. Call mQueue.stopPolling() to stop.","severity":"gotcha","affected_versions":">=0.1.0"},{"fix":"Use (queueItem.retryCount || 0) to safely get the count.","message":"The queueItem.retryCount is only available after the first retry; it is undefined on first attempt.","severity":"gotcha","affected_versions":">=0.1.0"},{"fix":"Register all workers before enqueuing messages.","message":"Enqueuing a message requires the worker to be registered first; otherwise, the message will be stored but never processed.","severity":"gotcha","affected_versions":">=0.1.0"}],"env_vars":null,"search_vec":"'1':66 '1.1.0':17 '4':53 '5':60 '6':55 '7':62 'api':82 'back':13 'base':8 'besid':78 'built':42 'built-in':41 'check':69 'compat':48 'default':65 'depend':77 'differenti':73 'driver':51 'extern':76 'given':33 'handler':39 'javascript':83 'latest':20 'lightweight':74 'messag':3,9,30,72 'mongo':2 'mongo-message-queu':1 'mongodb':15,50,57,79 'new':71 'node.js':12 'pattern':28 'poll':64 'process':36 'promis':7 'promise-bas':6 'provid':24 'queue':4,10 'regist':38 'reject':46 'releas':22 'retri':44 'second':67 'server':58 'simpl':26,81 'stabl':21 'support':47 'type':34 'use':63 'version':16,52,59 'worker':27","created_at":"2026-06-05T16:58:07.724623+00:00","updated_at":"2026-06-05T16:58:07.724623+00:00","problems":[{"fix":"Set mQueue.databasePromise = async () => { return await client.db('queue'); };","cause":"The .databasePromise property was not set or is not a function returning a promise.","error":"TypeError: mQueue.databasePromise is not a function"},{"fix":"Check MONGO_URI environment variable or ensure MongoDB server is running.","cause":"MongoDB connection string or cluster is not reachable.","error":"MongoError: no primary server available"},{"fix":"Ensure enqueue is called with a valid message object.","cause":"The enqueued message had no payload or was malformed.","error":"TypeError: queueItem.message is undefined"}],"ecosystem":"npm","meta_description":null,"install_score":null,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":null,"cli_name":null,"cli_version":null,"type":"library","homepage":"https://github.com/wonderlic/mongo-message-queue#readme","github":"https://github.com/wonderlic/mongo-message-queue","docs":null,"changelog":null,"pypi":null,"npm":"mongo-message-queue","openapi_spec":null,"status_page":null,"smithery":null,"categories":["messaging"],"base_url":null,"auth_type":null,"provenance":{"verified_status":null,"verified_at":null,"last_verified":"2026-06-05","next_check":"2026-09-03","install_tag":null}}