UNPKG

redis-smq

Version:

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

172 lines 6.58 kB
import { async, CallbackEmptyReplyError, logger, withRedisClient, } from 'redis-smq-common'; import { RedisClient } from '../../common/redis-client/redis-client.js'; import { Configuration } from '../../config/index.js'; import { _deleteMessage } from './_/_delete-message.js'; import { _getMessageState } from './_/_get-message-state.js'; import { _getMessageStatus } from './_/_get-message-status.js'; import { _getMessage, _getMessages } from './_/_get-message.js'; import { _requeueMessage } from './_/_requeue-message.js'; export class Message { logger; redisClient; constructor() { const config = Configuration.getSetConfig(); this.logger = logger.getLogger(config.logger, this.constructor.name.toLowerCase()); this.redisClient = new RedisClient(); this.redisClient.on('error', (err) => this.logger.error(err)); this.logger.debug('Message instance created'); } getMessageStatus(messageId, cb) { this.logger.debug('Getting message status', { messageId }); withRedisClient(this.redisClient, (client, cb) => { _getMessageStatus(client, messageId, (err, status) => { if (err) { this.logger.error('Failed to get message status', { messageId, error: err.message, }); cb(err); } else { this.logger.debug('Successfully retrieved message status', { messageId, status, }); cb(null, status); } }); }, cb); } getMessageState(messageId, cb) { this.logger.debug('Getting message state', { messageId }); withRedisClient(this.redisClient, (client, cb) => { _getMessageState(client, messageId, (err, state) => { if (err) { this.logger.error('Failed to get message state', { messageId, error: err.message, }); cb(err); } else { this.logger.debug('Successfully retrieved message state', { messageId, }); cb(null, state); } }); }, cb); } getMessagesByIds(messageIds, cb) { this.logger.debug('Getting messages by IDs', { messageCount: messageIds.length, }); withRedisClient(this.redisClient, (client, cb) => { _getMessages(client, messageIds, (err, reply) => { if (err) { this.logger.error('Failed to get messages', { error: err.message }); cb(err); } else if (!reply) { this.logger.error('Empty messages reply'); cb(new CallbackEmptyReplyError()); } else { this.logger.debug('Successfully retrieved messages', { messageCount: reply.length, }); cb(null, reply.map((i) => i.transfer())); } }); }, cb); } getMessageById(messageId, cb) { this.logger.debug('Getting message by ID', { messageId }); withRedisClient(this.redisClient, (client, cb) => { _getMessage(client, messageId, (err, reply) => { if (err) { this.logger.error('Failed to get message', { messageId, error: err.message, }); cb(err); } else if (!reply) { this.logger.error('Empty message reply', { messageId }); cb(new CallbackEmptyReplyError()); } else { this.logger.debug('Successfully retrieved message', { messageId }); cb(null, reply.transfer()); } }); }, cb); } deleteMessagesByIds(ids, cb) { this.logger.debug(`Deleting ${ids.length} messages by IDs`, { messageIds: ids, }); withRedisClient(this.redisClient, (client, cb) => { async.withCallback((cb) => _deleteMessage(client, ids, cb), (reply, cb) => { this.logger.debug('Messages deletion completed', reply); cb(null, reply); }, cb); }, (err, result) => { if (err) { this.logger.error('Failed to delete messages by IDs', { error: err.message, messageIds: ids, }); } cb(err, result); }); } deleteMessageById(id, cb) { this.logger.debug('Deleting message by ID', { messageId: id }); this.deleteMessagesByIds([id], (err, reply) => { if (err) { this.logger.error('Failed to delete message', { messageId: id, error: err.message, }); cb(err); } else { this.logger.debug('Successfully deleted message', { messageId: id }); cb(null, reply); } }); } requeueMessageById(messageId, cb) { this.logger.debug('Requeuing message by ID', { messageId }); withRedisClient(this.redisClient, (client, cb) => { _requeueMessage(client, messageId, (err) => { if (err) { this.logger.error('Failed to requeue message', { messageId, error: err.message, }); cb(err); } else { this.logger.debug('Successfully requeued message', { messageId }); cb(); } }); }, cb); } shutdown = (cb) => { this.logger.debug('Shutting down Message instance'); this.redisClient.shutdown((err) => { if (err) { this.logger.error('Error during shutdown', { error: err.message }); cb(err); } else { this.logger.debug('Successfully shut down Message instance'); cb(); } }); }; } //# sourceMappingURL=message.js.map