redis-smq
Version:
A high-performance, reliable, and scalable message queue for Node.js.
81 lines • 4.38 kB
JavaScript
import { async, createLogger } from 'redis-smq-common';
import { Configuration } from '../config-manager/configuration.js';
import { _parseQueueParams } from '../queue-manager/_/_parse-queue-params.js';
import { _deleteConsumerGroup } from './_/_delete-consumer-group.js';
import { _getConsumerGroups } from './_/_get-consumer-groups.js';
import { _saveConsumerGroup } from './_/_save-consumer-group.js';
import { withSharedPoolConnection } from '../common/redis/redis-connection-pool/with-shared-pool-connection.js';
export class ConsumerGroups {
logger;
constructor() {
const config = Configuration.getConfig();
this.logger = createLogger(config.logger, this.constructor.name.toLowerCase());
}
saveConsumerGroup(queue, groupId, cb) {
return async.withOptionalCallback(cb, (callback) => {
this.logger.debug(`Saving consumer group '${groupId}' to queue: ${typeof queue === 'string' ? queue : JSON.stringify(queue)}`);
const queueParams = _parseQueueParams(queue);
if (queueParams instanceof Error) {
this.logger.error(`Failed to parse queue parameters: ${queueParams.message}`);
return callback(queueParams);
}
this.logger.debug(`Parsed queue parameters: ${JSON.stringify(queueParams)}`);
withSharedPoolConnection((client, cb) => {
_saveConsumerGroup(client, queueParams, groupId, (err, result) => {
if (err) {
this.logger.error(`Failed to save consumer group '${groupId}': ${err.message}`);
return cb(err);
}
this.logger.info(`Consumer group '${groupId}' ${result === 1 ? 'created' : 'already exists'} for queue: ${queueParams.name}`);
cb(null, result);
});
}, callback);
});
}
deleteConsumerGroup(queue, groupId, cb) {
return async.withOptionalCallback(cb, (callback) => {
this.logger.debug(`Deleting consumer group '${groupId}' from queue: ${typeof queue === 'string' ? queue : JSON.stringify(queue)}`);
const queueParams = _parseQueueParams(queue);
if (queueParams instanceof Error) {
this.logger.error(`Failed to parse queue parameters: ${queueParams.message}`);
return callback(queueParams);
}
this.logger.debug(`Parsed queue parameters: ${JSON.stringify(queueParams)}`);
withSharedPoolConnection((client, cb) => {
_deleteConsumerGroup(client, queueParams, groupId, (err) => {
if (err) {
this.logger.error(`Failed to delete consumer group '${groupId}': ${err.message}`);
return cb(err);
}
this.logger.info(`Consumer group '${groupId}' successfully deleted from queue: ${queueParams.name}`);
cb();
});
}, callback);
});
}
getConsumerGroups(queue, cb) {
return async.withOptionalCallback(cb, (callback) => {
this.logger.debug(`Getting consumer groups for queue: ${typeof queue === 'string' ? queue : JSON.stringify(queue)}`);
const queueParams = _parseQueueParams(queue);
if (queueParams instanceof Error) {
this.logger.error(`Failed to parse queue parameters: ${queueParams.message}`);
return callback(queueParams);
}
this.logger.debug(`Parsed queue parameters: ${JSON.stringify(queueParams)}`);
withSharedPoolConnection((client, cb) => {
_getConsumerGroups(client, queueParams, (err, groups) => {
if (err) {
this.logger.error(`Failed to get consumer groups: ${err.message}`);
return cb(err);
}
this.logger.info(`Retrieved ${Number(groups?.length)} consumer groups for queue: ${queueParams.name}`);
if (groups && groups.length > 0) {
this.logger.debug(`Consumer groups: ${JSON.stringify(groups)}`);
}
cb(null, groups);
});
}, callback);
});
}
}
//# sourceMappingURL=consumer-groups.js.map