UNPKG

redis-smq

Version:

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

97 lines 4.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.retryMessage = exports.ERetryStatus = void 0; const types_1 = require("../../../../types"); const dead_letter_message_1 = require("./dead-letter-message"); const requeue_message_1 = require("./requeue-message"); const delay_message_1 = require("./delay-message"); const redis_smq_common_1 = require("redis-smq-common"); var EValidateAction; (function (EValidateAction) { EValidateAction[EValidateAction["DEAD_LETTER"] = 0] = "DEAD_LETTER"; EValidateAction[EValidateAction["REQUEUE"] = 1] = "REQUEUE"; EValidateAction[EValidateAction["DELAY"] = 2] = "DELAY"; })(EValidateAction || (EValidateAction = {})); var ERetryStatus; (function (ERetryStatus) { ERetryStatus[ERetryStatus["MESSAGE_DELAYED"] = 0] = "MESSAGE_DELAYED"; ERetryStatus[ERetryStatus["MESSAGE_REQUEUED"] = 1] = "MESSAGE_REQUEUED"; ERetryStatus[ERetryStatus["MESSAGE_DEAD_LETTERED"] = 2] = "MESSAGE_DEAD_LETTERED"; })(ERetryStatus = exports.ERetryStatus || (exports.ERetryStatus = {})); function getRetryAction(message, unacknowledgedCause) { if (unacknowledgedCause === types_1.EMessageUnacknowledgedCause.TTL_EXPIRED || message.getSetExpired()) { return { action: EValidateAction.DEAD_LETTER, deadLetterCause: types_1.EMessageDeadLetterCause.TTL_EXPIRED, }; } if (message.isPeriodic()) { return { action: EValidateAction.DEAD_LETTER, deadLetterCause: types_1.EMessageDeadLetterCause.PERIODIC_MESSAGE, }; } if (message.hasRetryThresholdExceeded()) { return { action: EValidateAction.DEAD_LETTER, deadLetterCause: types_1.EMessageDeadLetterCause.RETRY_THRESHOLD_EXCEEDED, }; } const delay = message.getRetryDelay(); if (delay) { return { action: EValidateAction.DELAY, }; } return { action: EValidateAction.REQUEUE, }; } function retryTransaction(config, mixed, processingQueue, message, unacknowledgedCause) { const r = getRetryAction(message, unacknowledgedCause); if (r.action === EValidateAction.DEAD_LETTER) { (0, dead_letter_message_1.deadLetterMessage)(config, mixed, message, processingQueue, unacknowledgedCause, r.deadLetterCause); return { message, status: ERetryStatus.MESSAGE_DEAD_LETTERED }; } if (r.action === EValidateAction.REQUEUE) { (0, requeue_message_1.requeueMessage)(mixed, message, processingQueue, unacknowledgedCause); return { message, status: ERetryStatus.MESSAGE_REQUEUED }; } (0, delay_message_1.delayMessage)(mixed, message, processingQueue, unacknowledgedCause); return { message, status: ERetryStatus.MESSAGE_DELAYED }; } function retryMessage(config, mixed, processingQueue, message, unacknowledgedCause, cb) { if (mixed instanceof redis_smq_common_1.RedisClient) { if (!cb) throw new redis_smq_common_1.errors.PanicError(`Expected a callback function`); const r = getRetryAction(message, unacknowledgedCause); if (r.action === EValidateAction.DEAD_LETTER) { return (0, dead_letter_message_1.deadLetterMessage)(config, mixed, message, processingQueue, unacknowledgedCause, r.deadLetterCause, (err) => { if (err) cb(err); else cb(null, { message, status: ERetryStatus.MESSAGE_DEAD_LETTERED }); }); } if (r.action === EValidateAction.DELAY) { return (0, delay_message_1.delayMessage)(mixed, message, processingQueue, unacknowledgedCause, (err) => { if (err) cb(err); else cb(null, { message, status: ERetryStatus.MESSAGE_DELAYED }); }); } return (0, requeue_message_1.requeueMessage)(mixed, message, processingQueue, unacknowledgedCause, (err) => { if (err) cb(err); else cb(null, { message, status: ERetryStatus.MESSAGE_REQUEUED }); }); } else { return retryTransaction(config, mixed, processingQueue, message, unacknowledgedCause); } } exports.retryMessage = retryMessage; //# sourceMappingURL=retry-message.js.map