UNPKG

redis-smq

Version:

A high-performance, reliable, and scalable message queue for Node.js.

86 lines 4.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports._executeAcknowledgementScript = _executeAcknowledgementScript; const configuration_js_1 = require("../../../../config-manager/configuration.js"); const scripts_js_1 = require("../../../../common/redis/scripts.js"); const index_js_1 = require("../../../../queue-manager/index.js"); const index_js_2 = require("../../../../message/index.js"); const with_shared_pool_connection_js_1 = require("../../../../common/redis/redis-connection-pool/with-shared-pool-connection.js"); const index_js_3 = require("../../../../errors/index.js"); const redis_keys_js_1 = require("../../../../common/redis/redis-keys/redis-keys.js"); function isValidAcknowledgementResult(reply) { return (Array.isArray(reply) && reply.find((i) => typeof i !== 'number') == null); } function _executeAcknowledgementScript(queue, consumerId, messages, cb) { (0, with_shared_pool_connection_js_1.withSharedPoolConnection)((client, done) => { const { enabled, queueSize, expire } = configuration_js_1.Configuration.getConfig().messageAudit.acknowledgedMessages; const { keyQueueAcknowledged, keyQueueProperties } = redis_keys_js_1.redisKeys.getQueueKeys(queue.queueParams.ns, queue.queueParams.name, queue.groupId); const { keyQueueProcessing } = redis_keys_js_1.redisKeys.getQueueConsumerKeys(queue.queueParams, consumerId); const messageKeys = []; const messageIds = []; messages.forEach((m) => { const id = m.getId(); messageIds.push(id); const { keyMessage } = redis_keys_js_1.redisKeys.getMessageKeys(id); messageKeys.push(keyMessage); }); const keys = [ keyQueueProcessing, keyQueueAcknowledged, keyQueueProperties, ...messageKeys, ]; const argv = [ Number(enabled), expire, queueSize * -1, Date.now(), index_js_1.EQueueProperty.OPERATIONAL_STATE, index_js_1.EQueueOperationalState.ACTIVE, index_js_1.EQueueOperationalState.PAUSED, index_js_1.EQueueOperationalState.STOPPED, index_js_1.EQueueOperationalState.LOCKED, index_js_2.EMessageProperty.STATUS, index_js_2.EMessagePropertyStatus.ACKNOWLEDGED, index_js_2.EMessageProperty.ACKNOWLEDGED_AT, index_js_1.EQueueProperty.ACKNOWLEDGED_MESSAGES_COUNT, index_js_1.EQueueProperty.PROCESSING_MESSAGES_COUNT, ...messageIds, ]; client.runScript(scripts_js_1.ERedisScriptName.ACKNOWLEDGE_MESSAGE, keys, argv, (err, reply) => { if (!err && isValidAcknowledgementResult(reply)) { return done(null, reply); } if (err) return done(err); if (typeof reply === 'string') { if (reply === 'QUEUE_STOPPED') { return done(new index_js_3.QueueStoppedError({ metadata: { queue: queue.queueParams }, })); } if (reply === 'QUEUE_LOCKED') { return done(new index_js_3.QueueLockedError({ metadata: { queue: queue.queueParams }, })); } if (reply === 'QUEUE_NOT_FOUND') { return done(new index_js_3.QueueNotFoundError({ metadata: { queue: queue.queueParams }, })); } if (reply === 'QUEUE_INVALID_STATE') { return done(new index_js_3.InvalidQueueStateError({ metadata: { queue: queue.queueParams }, })); } } done(new index_js_3.UnexpectedScriptReplyError({ metadata: { reply, }, })); }); }, cb); } //# sourceMappingURL=_execute-acknowledgement-script.js.map