redis-smq
Version:
A simple high-performance Redis message queue for Node.js.
65 lines • 3.09 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports._requeueMessage = _requeueMessage;
const redis_smq_common_1 = require("redis-smq-common");
const scripts_js_1 = require("../../../common/redis-client/scripts/scripts.js");
const redis_keys_js_1 = require("../../../common/redis-keys/redis-keys.js");
const index_js_1 = require("../../queue/index.js");
const index_js_2 = require("../index.js");
const _get_message_js_1 = require("./_get-message.js");
function _requeueMessage(redisClient, messageId, cb) {
(0, _get_message_js_1._getMessage)(redisClient, messageId, (err, message) => {
var _a;
if (err)
cb(err);
else if (!message)
cb(new redis_smq_common_1.CallbackEmptyReplyError());
else if (![
index_js_2.EMessagePropertyStatus.ACKNOWLEDGED,
index_js_2.EMessagePropertyStatus.DEAD_LETTERED,
].includes(message.getStatus()))
cb(new index_js_2.MessageMessageNotRequeuableError());
else {
message.getMessageState().reset();
const { keyQueueProperties, keyQueuePending, keyQueuePriorityPending, keyQueueAcknowledged, keyQueueDL, } = redis_keys_js_1.redisKeys.getQueueKeys(message.getDestinationQueue(), message.getConsumerGroupId());
const messageId = message.getId();
const { keyMessage } = redis_keys_js_1.redisKeys.getMessageKeys(messageId);
const status = message.getStatus();
const sourceKey = status === index_js_2.EMessagePropertyStatus.DEAD_LETTERED
? keyQueueDL
: keyQueueAcknowledged;
redisClient.runScript(scripts_js_1.ELuaScriptName.REQUEUE_MESSAGE, [
sourceKey,
keyQueueProperties,
keyQueuePriorityPending,
keyQueuePending,
keyMessage,
], [
index_js_1.EQueueProperty.QUEUE_TYPE,
index_js_1.EQueueType.PRIORITY_QUEUE,
index_js_1.EQueueType.LIFO_QUEUE,
index_js_1.EQueueType.FIFO_QUEUE,
index_js_2.EMessageProperty.STATUS,
index_js_2.EMessagePropertyStatus.PENDING,
index_js_2.EMessageProperty.STATE,
messageId,
(_a = message.producibleMessage.getPriority()) !== null && _a !== void 0 ? _a : '',
JSON.stringify(message.getMessageState()),
], (err, reply) => {
if (err)
cb(err);
else if (reply !== 'OK') {
if (reply === 'MESSAGE_NOT_FOUND')
cb(new index_js_2.MessageMessageNotFoundError());
else if (reply === 'INVALID_PARAMETERS')
cb(new index_js_2.MessageInvalidParametersError());
else
cb(new index_js_2.MessageError());
}
else
cb();
});
}
});
}
//# sourceMappingURL=_requeue-message.js.map
;