UNPKG

redis-smq

Version:

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

83 lines 3.79 kB
import { Configuration } from '../../../../config-manager/configuration.js'; import { ERedisScriptName } from '../../../../common/redis/scripts.js'; import { EQueueOperationalState, EQueueProperty, } from '../../../../queue-manager/index.js'; import { EMessageProperty, EMessagePropertyStatus, } from '../../../../message/index.js'; import { withSharedPoolConnection } from '../../../../common/redis/redis-connection-pool/with-shared-pool-connection.js'; import { InvalidQueueStateError, QueueLockedError, QueueNotFoundError, QueueStoppedError, UnexpectedScriptReplyError, } from '../../../../errors/index.js'; import { redisKeys } from '../../../../common/redis/redis-keys/redis-keys.js'; function isValidAcknowledgementResult(reply) { return (Array.isArray(reply) && reply.find((i) => typeof i !== 'number') == null); } export function _executeAcknowledgementScript(queue, consumerId, messages, cb) { withSharedPoolConnection((client, done) => { const { enabled, queueSize, expire } = Configuration.getConfig().messageAudit.acknowledgedMessages; const { keyQueueAcknowledged, keyQueueProperties } = redisKeys.getQueueKeys(queue.queueParams.ns, queue.queueParams.name, queue.groupId); const { keyQueueProcessing } = redisKeys.getQueueConsumerKeys(queue.queueParams, consumerId); const messageKeys = []; const messageIds = []; messages.forEach((m) => { const id = m.getId(); messageIds.push(id); const { keyMessage } = redisKeys.getMessageKeys(id); messageKeys.push(keyMessage); }); const keys = [ keyQueueProcessing, keyQueueAcknowledged, keyQueueProperties, ...messageKeys, ]; const argv = [ Number(enabled), expire, queueSize * -1, Date.now(), EQueueProperty.OPERATIONAL_STATE, EQueueOperationalState.ACTIVE, EQueueOperationalState.PAUSED, EQueueOperationalState.STOPPED, EQueueOperationalState.LOCKED, EMessageProperty.STATUS, EMessagePropertyStatus.ACKNOWLEDGED, EMessageProperty.ACKNOWLEDGED_AT, EQueueProperty.ACKNOWLEDGED_MESSAGES_COUNT, EQueueProperty.PROCESSING_MESSAGES_COUNT, ...messageIds, ]; client.runScript(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 QueueStoppedError({ metadata: { queue: queue.queueParams }, })); } if (reply === 'QUEUE_LOCKED') { return done(new QueueLockedError({ metadata: { queue: queue.queueParams }, })); } if (reply === 'QUEUE_NOT_FOUND') { return done(new QueueNotFoundError({ metadata: { queue: queue.queueParams }, })); } if (reply === 'QUEUE_INVALID_STATE') { return done(new InvalidQueueStateError({ metadata: { queue: queue.queueParams }, })); } } done(new UnexpectedScriptReplyError({ metadata: { reply, }, })); }); }, cb); } //# sourceMappingURL=_execute-acknowledgement-script.js.map