UNPKG

redis-smq

Version:

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

59 lines 2.68 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.scheduleMessage = void 0; const redis_keys_1 = require("../../common/redis-keys/redis-keys"); const message_not_scheduled_error_1 = require("./errors/message-not-scheduled.error"); const redis_smq_common_1 = require("redis-smq-common"); const redis_client_1 = require("../../common/redis-client/redis-client"); const types_1 = require("../../../types"); function scheduleMessageTransaction(multi, message) { const timestamp = message.getNextScheduledTimestamp(); if (timestamp > 0) { const { keyScheduledMessageWeight, keyScheduledMessages } = redis_keys_1.redisKeys.getMainKeys(); message.getRequiredMessageState().setScheduledAt(Date.now()); const messageId = message.getRequiredId(); multi.zadd(keyScheduledMessageWeight, timestamp, messageId); multi.hset(keyScheduledMessages, messageId, JSON.stringify(message)); return true; } return false; } function scheduleMessage(mixed, message, cb) { var _a; if (mixed instanceof redis_smq_common_1.RedisClient) { if (!cb) throw new redis_smq_common_1.errors.PanicError(`Expected a callback function`); const timestamp = message.getNextScheduledTimestamp(); if (timestamp > 0) { const queue = message.getDestinationQueue(); const { keyQueueSettings, keyScheduledMessageWeight, keyScheduledMessages, } = redis_keys_1.redisKeys.getQueueKeys(queue); message.getRequiredMessageState().setScheduledAt(Date.now()); const messageId = message.getRequiredId(); mixed.runScript(redis_client_1.ELuaScriptName.SCHEDULE_MESSAGE, [ keyQueueSettings, types_1.EQueueSettingType.QUEUE_TYPE, keyScheduledMessageWeight, keyScheduledMessages, ], [ messageId, JSON.stringify(message), `${timestamp}`, `${(_a = message.getPriority()) !== null && _a !== void 0 ? _a : ''}`, ], (err, reply) => { if (err) cb(err); else if (reply !== 'OK') cb(new message_not_scheduled_error_1.MessageNotScheduledError(String(reply))); else cb(); }); } else cb(new message_not_scheduled_error_1.MessageNotScheduledError('INVALID_SCHEDULING_PARAMETERS')); } else { return scheduleMessageTransaction(mixed, message); } } exports.scheduleMessage = scheduleMessage; //# sourceMappingURL=schedule-message.js.map