1.2.2 • Published 5 months ago
@evlmaistrenko/tools-mongomq v1.2.2
@evlmaistrenko/tools-mongomq
Simple messages queue (MQ) using MongoDB.
Try to use it in case:
- You already have MongoDB in your project
- Need to organize some queue of tasks
- Need queue data to be persist (i.e. not to lose messages due to restarts of application)
- Don't want to add powerful brokers as a dependency of your project
Features:
- No dependencies (except of official MongoDB driver for node)
- Uses change streams for reactive behavior (requires replication)
- Delayed messages delivery
Usage
npm i @evlmaistrenko/tools-mongomqimport * as mongoMq from "@evlmaistrenko/tools-mongomq";
import { MongoClient } from "mongodb";
const client = new MongoClient("<your connection string>");
await client.connect();
const messages = client
.db("<your database name>")
.collection("<your collection name>");
const queue = new mongoMq.Queue(messages);
// Publishing messages:
await queue.publish({ some: "value" });
// Publishing delayed messages:
await queue.publish(
{ some: "other value" },
new Date("2099-12-30T19:00:00.000Z"),
);
// Consuming messages concurrently:
for await (let consume of queue.messages())
consume(async (message) => {
// do something with `message.payload`
}).catch((error) => {
// process `error`
});
// With specified concurrency:
for await (let consume of queue.messages(5))
consume(async (message) => {
// do something with `message.payload`
}).catch((error) => {
// process `error`
});