redis-smq
Version:
A simple high-performance Redis message queue for Node.js.
59 lines • 2.68 kB
JavaScript
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
;