UNPKG

redis-smq

Version:

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

59 lines 3.2 kB
import { async, CallbackEmptyReplyError, } from 'redis-smq-common'; import { ELuaScriptName } from '../../../common/redis-client/scripts/scripts.js'; import { redisKeys } from '../../../common/redis-keys/redis-keys.js'; import { EQueueProperty, EQueueType } from '../../queue/index.js'; import { MessageError, MessageInvalidParametersError, MessageMessageInProcessError, MessageMessageNotDeletedError, MessageMessageNotFoundError, } from '../errors/index.js'; import { EMessageProperty, EMessagePropertyStatus } from '../types/index.js'; import { _getMessage } from './_get-message.js'; export function _deleteMessage(redisClient, messageId, cb) { const keys = []; const argv = []; const ids = typeof messageId === 'string' ? [messageId] : messageId; argv.push(EQueueProperty.QUEUE_TYPE, EQueueProperty.MESSAGES_COUNT, EQueueType.PRIORITY_QUEUE, EQueueType.LIFO_QUEUE, EQueueType.FIFO_QUEUE, EMessageProperty.STATUS, EMessagePropertyStatus.PROCESSING, EMessagePropertyStatus.ACKNOWLEDGED, EMessagePropertyStatus.PENDING, EMessagePropertyStatus.SCHEDULED, EMessagePropertyStatus.DEAD_LETTERED, EMessagePropertyStatus.UNACK_DELAYING, EMessagePropertyStatus.UNACK_REQUEUING); async.each(ids, (id, _, done) => { _getMessage(redisClient, id, (err, message) => { if (err) done(err); else if (!message) done(new CallbackEmptyReplyError()); else { const { keyQueueScheduled, keyQueueDelayed, keyQueueRequeued, keyQueueProperties, keyQueueDL, keyQueueAcknowledged, keyQueuePriorityPending, keyQueuePending, } = redisKeys.getQueueKeys(message.getDestinationQueue(), message.getConsumerGroupId()); const { keyMessage } = redisKeys.getMessageKeys(id); keys.push(keyQueueScheduled, keyQueueDelayed, keyQueueRequeued, keyMessage, keyQueueProperties, keyQueuePending, keyQueueDL, keyQueueAcknowledged, keyQueuePriorityPending); argv.push(id); done(); } }); }, (err) => { if (err) cb(err); else if (keys.length && argv.length) { redisClient.runScript(ELuaScriptName.DELETE_MESSAGE, keys, argv, (err, reply) => { if (err) cb(err); else if (reply !== 'OK') { if (reply === 'MESSAGE_NOT_FOUND') { cb(new MessageMessageNotFoundError()); } else if (reply === 'MESSAGE_IN_PROCESS') { cb(new MessageMessageInProcessError()); } else if (reply === 'MESSAGE_NOT_DELETED') { cb(new MessageMessageNotDeletedError()); } else if (reply === 'INVALID_PARAMETERS') { cb(new MessageInvalidParametersError()); } else { cb(new MessageError()); } } else cb(); }); } else cb(); }); } //# sourceMappingURL=_delete-message.js.map