UNPKG

redis-smq

Version:

A simple high-performance Redis message queue for Node.js.

68 lines 2.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MultiplexedMessageHandlerRunner = void 0; const redis_smq_common_1 = require("redis-smq-common"); const multiplexed_message_handler_js_1 = require("../message-handler/multiplexed-message-handler.js"); const message_handler_runner_js_1 = require("./message-handler-runner.js"); class MultiplexedMessageHandlerRunner extends message_handler_runner_js_1.MessageHandlerRunner { constructor(consumer, redisClient, logger, eventBus) { super(consumer, redisClient, logger, eventBus); this.index = 0; this.activeMessageHandler = null; this.execNextMessageHandler = () => { this.activeMessageHandler = this.getNextMessageHandler(); if (this.activeMessageHandler && this.activeMessageHandler.isRunning()) { this.activeMessageHandler.dequeue(); } else { this.nextTick(); } }; this.timer = new redis_smq_common_1.Timer(); this.timer.on('error', (err) => this.handleError(err)); } nextTick() { if (this.isRunning()) { this.activeMessageHandler = null; this.timer.setTimeout(() => this.execNextMessageHandler(), 1000); } } getNextMessageHandler() { if (this.index >= this.messageHandlerInstances.length) { this.index = 0; } const messageHandler = this.messageHandlerInstances[this.index]; if (this.messageHandlerInstances.length > 1) { this.index += 1; } return messageHandler; } createMessageHandlerInstance(handlerParams) { const instance = new multiplexed_message_handler_js_1.MultiplexedMessageHandler(this.consumer, this.redisClient, this.logger, handlerParams, this.eventBus, this.execNextMessageHandler); this.messageHandlerInstances.push(instance); this.logger.info(`Created a new instance (ID: ${instance.getId()}) for MessageHandler (${JSON.stringify(handlerParams)}).`); return instance; } shutdownMessageHandler(messageHandler, cb) { super.shutdownMessageHandler(messageHandler, () => { if (messageHandler === this.activeMessageHandler) { this.nextTick(); } cb(); }); } goingUp() { return super.goingUp().concat([ (cb) => { this.execNextMessageHandler(); cb(); }, ]); } goingDown() { this.timer.reset(); return super.goingDown(); } } exports.MultiplexedMessageHandlerRunner = MultiplexedMessageHandlerRunner; //# sourceMappingURL=multiplexed-message-handler-runner.js.map