1.3.2 • Published 7 years ago
mq-mongo v1.3.2
mq-mongo
Easy message queue on mongo
Install
npm i mq-mongoUsage
const mq = require('mq-mongo');
const q = mq(db, options);
q.get().then(msg => {/* Do something */});db- mongo db object (or promise resolves to). Only required parameter.
options
options.name- name of mongo collection for queue. Defaults to'mq'.options.ttl- time-to-live (ms) for taken message before it will be acked or returned to queue. Defaults to 30000.options.tries- just how many times single message may be taken and returned to queue without ack. Defaults to 10.options.clean- iftrueprevious messages in this queue (in fact documents in collection) will be deleted. Defaults tofalse.options.strict- iftruemethodgetwill work in strict mode (throws error instead of returningnull). Defaults tofalse.options.insistent- iftruethengetwill begins from last failed (returned to queue without ack) messages. Iffalsethengetfollow 'FIFO' rule.options.items- message or array of messages for adding to queue on start.
methods (all asinc)
q.add(something)- adds single message or array of messages to queue. Returns array of_idstrings for added messages.q.get(ttl)- gets message from queue. Optional parameter is individualttlfor that specific message. Returns message object if there is messages ready. If no waiting messages returnsnullor (ifoptions.strictset totrue) throws error.q.ack(tag)- deletes successfully handled message (specified by tag field) from queue. Returns_idstring of deleted message or null (if no message with such tag or if ttl expires).q.ping(tag, ttl)- prolong ttl of message specified by tag field. Optional parameterttldefaults tooptions.ttlof queue.q.waiting()- returns quantity of messages in queue.q.active()- returns quantity of messages in work (waiting for ack).q.failed()- returns quantity of failed messages (all tries is over).q.total()- returns total quantity of messages (sum of three above).q.stats()- returns object with quantities of waiting, active and failed messages.q.options()- getter, returns object with some options ({ttl, tries, insistent}).
message fields
msg._id- mongo objectID of message.msg.data- payload data of message.msg.created- time (unix TS, number) when message was added to queue.msg.expires- time (unix TS, number) when message will returns to queue.msg.tries- just how many times this message was getted from queue.msg.tag- unique tag for this try (for use inackandping).
Example
const mq = require('mq-mongo');
(async () => {
const q = mq(db, {
name = 'mq', // default mongo collection name
ttl = 30000, // default message ttl
tries = 10, // default tries to handle message
});
await q.add('test');
const msg = await q.get();
await doSomethingWithData(msg.data);
await q.ack(msg.tag);
})();See tests for more complicated examples.
License
MIT