multiconsumer-kue
Version:
A multi-consumer queue on top of Kue
34 lines • 1.43 kB
JavaScript
;
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", { value: true });
const multiconsumer_queue_1 = require("multiconsumer-queue");
const redis_liveset_1 = require("redis-liveset");
__export(require("multiconsumer-queue"));
class KueNamedQueue {
constructor(_out) {
this._out = _out;
}
add(topic, data) {
this._out.create(topic, data).removeOnComplete(true).save();
}
process(topic, fn, n = 1) {
this._out.process(topic, n, fn);
}
}
/**
* Build new multi-consumer queue
*/
function MultiConsumerKue(queue, redis, liveSetKey = (topic) => multiconsumer_queue_1.QueueTopic(`QueueMultiConsumerGroups/${topic}`)) {
return new multiconsumer_queue_1.EventBusImpl((topic) => {
const kQueue = new KueNamedQueue(queue);
const src = new multiconsumer_queue_1.NamedQueueWrap(topic, kQueue);
const dest = new multiconsumer_queue_1.DynamicallyNamedQueue((groupId) => multiconsumer_queue_1.QueueTopic(`${topic}/${groupId}`), kQueue);
const groups = redis_liveset_1.createStringsLiveSet(liveSetKey(topic), redis(), redis());
return new multiconsumer_queue_1.MultiConsumerQueueImpl(src, dest, groups, (job) => job.data);
});
}
exports.MultiConsumerKue = MultiConsumerKue;
exports.default = MultiConsumerKue;
//# sourceMappingURL=index.js.map