UNPKG

redis-smq

Version:

A high-performance, reliable, and scalable message queue for Node.js.

42 lines 2.12 kB
import { async, CallbackEmptyReplyError, } from 'redis-smq-common'; import { redisKeys } from '../../common/redis/redis-keys/redis-keys.js'; import { _getQueueProperties } from '../../queue-manager/_/_get-queue-properties.js'; import { EQueueDeliveryModel, } from '../../queue-manager/index.js'; import { ConsumerGroupsNotSupportedError, InvalidConsumerGroupIdError, } from '../../errors/index.js'; import { EventMultiplexer } from '../../event-bus/event-multiplexer.js'; import { _validateOperation } from '../../queue-operation-validator/_/_validate-operation.js'; import { EQueueOperation } from '../../queue-operation-validator/index.js'; import { validateRedisKey } from '../../common/redis/redis-keys/validator.js'; export function _saveConsumerGroup(redisClient, queue, groupId, cb) { const gid = validateRedisKey(groupId); if (gid instanceof Error) cb(new InvalidConsumerGroupIdError()); else { async.series([ (cb) => _validateOperation(redisClient, queue, EQueueOperation.CREATE_CONSUMER_GROUP, cb), (cb) => _getQueueProperties(redisClient, queue, (err, properties) => { if (err) cb(err); else if (!properties) cb(new CallbackEmptyReplyError()); else if (properties.deliveryModel !== EQueueDeliveryModel.PUB_SUB) cb(new ConsumerGroupsNotSupportedError()); else cb(); }), (cb) => { const { keyQueueConsumerGroups } = redisKeys.getQueueKeys(queue.ns, queue.name, gid); redisClient.sadd(keyQueueConsumerGroups, gid, (err, reply) => { if (err) cb(err); else { if (reply) EventMultiplexer.publish('queue.consumerGroupCreated', queue, groupId); cb(null, reply); } }); }, ], (err, result) => cb(err, result?.[2])); } } //# sourceMappingURL=_save-consumer-group.js.map