UNPKG

redis-smq

Version:

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

53 lines 2.23 kB
import { ELuaScriptName } from '../../../common/redis-client/scripts/scripts.js'; import { redisKeys } from '../../../common/redis-keys/redis-keys.js'; import { EMessageProperty, EMessagePropertyStatus, } from '../../message/index.js'; import { EQueueProperty } from '../../queue/index.js'; import { ProducerError, ProducerQueueNotFoundError, ProducerScheduleInvalidParametersError, } from '../errors/index.js'; export function _scheduleMessage(mixed, message, cb) { const timestamp = message.getNextScheduledTimestamp(); if (timestamp > 0) { const { keyQueueProperties, keyQueueScheduled, keyQueueMessages, keyQueueDelayed, } = redisKeys.getQueueKeys(message.getDestinationQueue(), message.getConsumerGroupId()); const ts = Date.now(); message.getMessageState().setScheduledAt(ts).setLastScheduledAt(ts); const messageId = message.getId(); const { keyMessage } = redisKeys.getMessageKeys(messageId); mixed.runScript(ELuaScriptName.SCHEDULE_MESSAGE, [ keyQueueMessages, keyQueueProperties, keyMessage, keyQueueScheduled, keyQueueDelayed, ], [ EQueueProperty.QUEUE_TYPE, EQueueProperty.MESSAGES_COUNT, EMessageProperty.MESSAGE, EMessageProperty.STATUS, EMessagePropertyStatus.SCHEDULED, EMessageProperty.STATE, '0', messageId, JSON.stringify(message), `${timestamp}`, JSON.stringify(message.getMessageState()), ], (err, reply) => { if (err) cb(err); else if (reply !== 'OK') { if (reply === 'QUEUE_NOT_FOUND') { cb(new ProducerQueueNotFoundError()); } else if (reply !== 'INVALID_PARAMETERS') { cb(new ProducerScheduleInvalidParametersError()); } else { cb(new ProducerError()); } } else cb(); }); } else cb(new ProducerScheduleInvalidParametersError()); } //# sourceMappingURL=_schedule-message.js.map