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