redis-smq
Advanced tools
Comparing version 8.0.0-rc.20 to 8.0.0-rc.21
## [8.0.0-rc.21](https://github.com/weyoss/redis-smq/compare/v8.0.0-rc.20...v8.0.0-rc.21) (2024-04-29) | ||
### Bug Fixes | ||
* **message:** correct logic for deleting multiple messages by IDs ([fdb39d6](https://github.com/weyoss/redis-smq/commit/fdb39d66f3cea59decf8ad29b5efdf827780ba73)) | ||
### Documentation | ||
* improve RC release status description, clean up ([98910dc](https://github.com/weyoss/redis-smq/commit/98910dcef215494ccee4de01879d0e2f8037213d)) | ||
* update examples ([d80beb2](https://github.com/weyoss/redis-smq/commit/d80beb2af2472ac596a88531786a0ba2681e09dd)) | ||
### Codebase Refactoring | ||
* optimize imports ([29a0efb](https://github.com/weyoss/redis-smq/commit/29a0efb9e46ce23a6fb14c44222cf987a05ee22a)) | ||
* remove unused error classes and clean up ([15bd959](https://github.com/weyoss/redis-smq/commit/15bd9591d58b5717ee5a8e8191df7388e65a768b)) | ||
* shorten imports ([3bfb8f1](https://github.com/weyoss/redis-smq/commit/3bfb8f1e39011e2f48039b2c534f0fe936b67759)) | ||
### Tests | ||
* increase code coverage ([e9d84e8](https://github.com/weyoss/redis-smq/commit/e9d84e8b4a9a239246473ca770ce035ce8e66831)) | ||
### Misc | ||
* clean up package.json ([ff9ff3d](https://github.com/weyoss/redis-smq/commit/ff9ff3d06f61c20f70bd55c34a545278713847d5)) | ||
* update LICENSE ([cb18d44](https://github.com/weyoss/redis-smq/commit/cb18d4449f851df803a0e2cd84410257cbfcfdfd)) | ||
## [8.0.0-rc.20](https://github.com/weyoss/redis-smq/compare/v8.0.0-rc.19...v8.0.0-rc.20) (2024-03-24) | ||
@@ -4,0 +35,0 @@ |
@@ -5,15 +5,6 @@ "use strict"; | ||
const redis_keys_js_1 = require("../../../common/redis-keys/redis-keys.js"); | ||
const index_js_1 = require("../../consumer/index.js"); | ||
function validateGroupId(groupId) { | ||
const lowerCase = groupId.toLowerCase(); | ||
const filtered = lowerCase.replace(/(?:[a-z][a-z0-9]?)+(?:[-_]?[a-z0-9])*/, ''); | ||
if (filtered.length) { | ||
return false; | ||
} | ||
return lowerCase; | ||
} | ||
function _saveConsumerGroup(redisClient, eventBus, queue, groupId, cb) { | ||
const gid = validateGroupId(groupId); | ||
if (!gid) | ||
cb(new index_js_1.ConsumerInvalidGroupIdError()); | ||
const gid = redis_keys_js_1.redisKeys.validateRedisKey(groupId); | ||
if (gid instanceof Error) | ||
cb(gid); | ||
else { | ||
@@ -20,0 +11,0 @@ const { keyQueueConsumerGroups } = redis_keys_js_1.redisKeys.getQueueKeys(queue, gid); |
import { ICallback } from 'redis-smq-common'; | ||
import { RedisClientInstance } from '../../common/redis-client/redis-client-instance.js'; | ||
import { EventBusRedisInstance } from '../event-bus/event-bus-redis-instance.js'; | ||
import { EventBusRedisInstance } from '../event-bus/index.js'; | ||
import { IQueueParams } from '../queue/index.js'; | ||
@@ -5,0 +5,0 @@ export declare class ConsumerGroups { |
@@ -7,3 +7,3 @@ "use strict"; | ||
const index_js_1 = require("../../config/index.js"); | ||
const event_bus_redis_instance_js_1 = require("../event-bus/event-bus-redis-instance.js"); | ||
const index_js_2 = require("../event-bus/index.js"); | ||
const _parse_queue_params_js_1 = require("../queue/_/_parse-queue-params.js"); | ||
@@ -19,3 +19,3 @@ const _delete_consumer_group_js_1 = require("./_/_delete-consumer-group.js"); | ||
this.logger = redis_smq_common_1.logger.getLogger(index_js_1.Configuration.getSetConfig().logger, `consumer-groups`); | ||
this.eventBus = new event_bus_redis_instance_js_1.EventBusRedisInstance(); | ||
this.eventBus = new index_js_2.EventBusRedisInstance(); | ||
this.eventBus.on('error', (err) => this.logger.error(err)); | ||
@@ -22,0 +22,0 @@ this.redisClient = new redis_client_instance_js_1.RedisClientInstance(); |
@@ -31,3 +31,3 @@ "use strict"; | ||
const redis_keys_js_1 = require("../../../common/redis-keys/redis-keys.js"); | ||
const configuration_js_1 = require("../../../config/configuration.js"); | ||
const index_js_1 = require("../../../config/index.js"); | ||
const event_bus_redis_factory_js_1 = require("../../event-bus/event-bus-redis-factory.js"); | ||
@@ -62,3 +62,3 @@ const event_bus_publisher_js_1 = require("./event-bus-publisher.js"); | ||
this.redisClient = (0, redis_client_factory_js_1.RedisClientFactory)(consumer.getId(), (err) => this.handleError(err)); | ||
if (configuration_js_1.Configuration.getSetConfig().eventBus.enabled) { | ||
if (index_js_1.Configuration.getSetConfig().eventBus.enabled) { | ||
this.eventBus = (0, event_bus_redis_factory_js_1.EventBusRedisFactory)(consumer.getId(), (err) => this.handleError(err)); | ||
@@ -65,0 +65,0 @@ (0, event_bus_publisher_js_1.eventBusPublisher)(this, this.consumer.getId(), this.logger); |
@@ -15,6 +15,6 @@ "use strict"; | ||
const _cleanup_offline_consumer_js_1 = require("../consumer-heartbeat/_/_cleanup-offline-consumer.js"); | ||
const event_bus_publisher_js_1 = require("./event-bus-publisher.js"); | ||
const consumer_heartbeat_js_1 = require("../consumer-heartbeat/consumer-heartbeat.js"); | ||
const message_handler_runner_js_1 = require("../message-handler-runner/message-handler-runner.js"); | ||
const multiplexed_message_handler_runner_js_1 = require("../message-handler-runner/multiplexed-message-handler-runner.js"); | ||
const event_bus_publisher_js_1 = require("./event-bus-publisher.js"); | ||
class Consumer extends redis_smq_common_1.Runnable { | ||
@@ -21,0 +21,0 @@ constructor(enableMultiplexing) { |
export { ConsumerError } from './consumer.error.js'; | ||
export { ConsumerMessageHandlerAlreadyExistsError } from './consumer-message-handler-already-exists.error.js'; | ||
export { ConsumerGroupDeleteError } from './consumer-group-delete.error.js'; | ||
export { ConsumerGroupIdNotFoundError } from './consumer-group-id-not-found.error.js'; | ||
export { ConsumerGroupIdNotSupportedError } from './consumer-group-id-not-supported.error.js'; | ||
export { ConsumerGroupIdRequiredError } from './consumer-group-id-required.error.js'; | ||
export { ConsumerInvalidGroupIdError } from './consumer-invalid-group-id.error.js'; | ||
//# sourceMappingURL=index.d.ts.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.ConsumerInvalidGroupIdError = exports.ConsumerGroupIdRequiredError = exports.ConsumerGroupIdNotSupportedError = exports.ConsumerGroupIdNotFoundError = exports.ConsumerGroupDeleteError = exports.ConsumerMessageHandlerAlreadyExistsError = exports.ConsumerError = void 0; | ||
exports.ConsumerGroupIdRequiredError = exports.ConsumerGroupIdNotSupportedError = exports.ConsumerGroupDeleteError = exports.ConsumerMessageHandlerAlreadyExistsError = exports.ConsumerError = void 0; | ||
var consumer_error_js_1 = require("./consumer.error.js"); | ||
@@ -10,4 +10,2 @@ Object.defineProperty(exports, "ConsumerError", { enumerable: true, get: function () { return consumer_error_js_1.ConsumerError; } }); | ||
Object.defineProperty(exports, "ConsumerGroupDeleteError", { enumerable: true, get: function () { return consumer_group_delete_error_js_1.ConsumerGroupDeleteError; } }); | ||
var consumer_group_id_not_found_error_js_1 = require("./consumer-group-id-not-found.error.js"); | ||
Object.defineProperty(exports, "ConsumerGroupIdNotFoundError", { enumerable: true, get: function () { return consumer_group_id_not_found_error_js_1.ConsumerGroupIdNotFoundError; } }); | ||
var consumer_group_id_not_supported_error_js_1 = require("./consumer-group-id-not-supported.error.js"); | ||
@@ -17,4 +15,2 @@ Object.defineProperty(exports, "ConsumerGroupIdNotSupportedError", { enumerable: true, get: function () { return consumer_group_id_not_supported_error_js_1.ConsumerGroupIdNotSupportedError; } }); | ||
Object.defineProperty(exports, "ConsumerGroupIdRequiredError", { enumerable: true, get: function () { return consumer_group_id_required_error_js_1.ConsumerGroupIdRequiredError; } }); | ||
var consumer_invalid_group_id_error_js_1 = require("./consumer-invalid-group-id.error.js"); | ||
Object.defineProperty(exports, "ConsumerInvalidGroupIdError", { enumerable: true, get: function () { return consumer_invalid_group_id_error_js_1.ConsumerInvalidGroupIdError; } }); | ||
//# sourceMappingURL=index.js.map |
@@ -5,4 +5,4 @@ import { ICallback, ILogger, Runnable } from 'redis-smq-common'; | ||
import { Consumer } from '../consumer/consumer.js'; | ||
import { MessageHandler } from '../message-handler/message-handler/message-handler.js'; | ||
import { IConsumerMessageHandlerArgs, TConsumerMessageHandler } from '../types/index.js'; | ||
import { MessageHandler } from '../message-handler/message-handler/message-handler.js'; | ||
export declare class MessageHandlerRunner extends Runnable<TConsumerMessageHandlerRunnerEvent> { | ||
@@ -9,0 +9,0 @@ protected consumer: Consumer; |
@@ -5,4 +5,4 @@ "use strict"; | ||
const redis_smq_common_1 = require("redis-smq-common"); | ||
const configuration_js_1 = require("../../../config/configuration.js"); | ||
const index_js_1 = require("../errors/index.js"); | ||
const index_js_1 = require("../../../config/index.js"); | ||
const index_js_2 = require("../errors/index.js"); | ||
const message_handler_js_1 = require("../message-handler/message-handler/message-handler.js"); | ||
@@ -30,3 +30,3 @@ const event_bus_publisher_js_1 = require("./event-bus-publisher.js"); | ||
this.logger = logger; | ||
if (configuration_js_1.Configuration.getSetConfig().eventBus.enabled) { | ||
if (index_js_1.Configuration.getSetConfig().eventBus.enabled) { | ||
(0, event_bus_publisher_js_1.eventBusPublisher)(this, this.consumer.getId(), logger); | ||
@@ -121,3 +121,3 @@ } | ||
if (handler) | ||
cb(new index_js_1.ConsumerMessageHandlerAlreadyExistsError(queue)); | ||
cb(new index_js_2.ConsumerMessageHandlerAlreadyExistsError(queue)); | ||
else { | ||
@@ -124,0 +124,0 @@ const handlerParams = { |
import { ICallback, ILogger, Timer } from 'redis-smq-common'; | ||
import { Consumer } from '../consumer/consumer.js'; | ||
import { MessageHandler } from '../message-handler/message-handler/message-handler.js'; | ||
import { IConsumerMessageHandlerArgs } from '../types/index.js'; | ||
import { MessageHandlerRunner } from './message-handler-runner.js'; | ||
import { IConsumerMessageHandlerArgs } from '../types/index.js'; | ||
export declare class MultiplexedMessageHandlerRunner extends MessageHandlerRunner { | ||
@@ -7,0 +7,0 @@ protected timer: Timer; |
@@ -5,4 +5,4 @@ "use strict"; | ||
const redis_smq_common_1 = require("redis-smq-common"); | ||
const multiplexed_message_handler_js_1 = require("../message-handler/multiplexed-message-handler.js"); | ||
const message_handler_runner_js_1 = require("./message-handler-runner.js"); | ||
const multiplexed_message_handler_js_1 = require("../message-handler/multiplexed-message-handler.js"); | ||
class MultiplexedMessageHandlerRunner extends message_handler_runner_js_1.MessageHandlerRunner { | ||
@@ -9,0 +9,0 @@ constructor(consumer, logger) { |
@@ -31,9 +31,9 @@ "use strict"; | ||
const redis_keys_js_1 = require("../../../../common/redis-keys/redis-keys.js"); | ||
const configuration_js_1 = require("../../../../config/configuration.js"); | ||
const index_js_1 = require("../../../../config/index.js"); | ||
const _save_consumer_group_js_1 = require("../../../consumer-groups/_/_save-consumer-group.js"); | ||
const event_bus_redis_factory_js_1 = require("../../../event-bus/event-bus-redis-factory.js"); | ||
const index_js_1 = require("../../../queue/index.js"); | ||
const _has_rate_limit_exceeded_js_1 = require("../../../queue-rate-limit/_/_has-rate-limit-exceeded.js"); | ||
const _get_queue_properties_js_1 = require("../../../queue/_/_get-queue-properties.js"); | ||
const index_js_2 = require("../../errors/index.js"); | ||
const index_js_2 = require("../../../queue/index.js"); | ||
const index_js_3 = require("../../errors/index.js"); | ||
const event_bus_publisher_js_1 = require("./event-bus-publisher.js"); | ||
@@ -122,3 +122,3 @@ const IPAddresses = (() => { | ||
this.eventBus = (0, event_bus_redis_factory_js_1.EventBusRedisFactory)(this.consumerId, (err) => this.handleError(err)); | ||
if (configuration_js_1.Configuration.getSetConfig().eventBus.enabled) { | ||
if (index_js_1.Configuration.getSetConfig().eventBus.enabled) { | ||
(0, event_bus_publisher_js_1.eventBusPublisher)(this, consumerId, logger); | ||
@@ -180,3 +180,3 @@ } | ||
else if (!reply) | ||
cb(new index_js_1.QueueNotFoundError()); | ||
cb(new index_js_2.QueueNotFoundError()); | ||
else | ||
@@ -203,11 +203,11 @@ cb(); | ||
if (queueProperties.deliveryModel === | ||
index_js_1.EQueueDeliveryModel.POINT_TO_POINT) { | ||
index_js_2.EQueueDeliveryModel.POINT_TO_POINT) { | ||
if (groupId) | ||
cb(new index_js_2.ConsumerGroupIdNotSupportedError()); | ||
cb(new index_js_3.ConsumerGroupIdNotSupportedError()); | ||
else | ||
cb(); | ||
} | ||
else if (queueProperties.deliveryModel === index_js_1.EQueueDeliveryModel.PUB_SUB) { | ||
else if (queueProperties.deliveryModel === index_js_2.EQueueDeliveryModel.PUB_SUB) { | ||
if (!groupId) | ||
cb(new index_js_2.ConsumerGroupIdRequiredError()); | ||
cb(new index_js_3.ConsumerGroupIdRequiredError()); | ||
else { | ||
@@ -254,3 +254,3 @@ const eventBus = this.eventBus.getInstance(); | ||
isPriorityQueuingEnabled() { | ||
return this.queueType === index_js_1.EQueueType.PRIORITY_QUEUE; | ||
return this.queueType === index_js_2.EQueueType.PRIORITY_QUEUE; | ||
} | ||
@@ -257,0 +257,0 @@ dequeue() { |
@@ -10,4 +10,4 @@ "use strict"; | ||
const index_js_1 = require("../../../../config/index.js"); | ||
const _from_message_js_1 = require("../../../message/_/_from-message.js"); | ||
const index_js_2 = require("../../../message/index.js"); | ||
const _from_message_js_1 = require("../../../message/_/_from-message.js"); | ||
const index_js_3 = require("../../types/index.js"); | ||
@@ -14,0 +14,0 @@ const consume_message_js_1 = require("../consume-message/consume-message.js"); |
import { ILogger } from 'redis-smq-common'; | ||
import { Consumer } from '../consumer/consumer.js'; | ||
import { IConsumerMessageHandlerArgs } from '../types/index.js'; | ||
import { DequeueMessage } from './dequeue-message/dequeue-message.js'; | ||
import { MessageHandler } from './message-handler/message-handler.js'; | ||
import { IConsumerMessageHandlerArgs } from '../types/index.js'; | ||
export declare class MultiplexedMessageHandler extends MessageHandler { | ||
@@ -7,0 +7,0 @@ protected dequeueNextFn: () => void; |
@@ -8,4 +8,4 @@ "use strict"; | ||
const index_js_1 = require("../../../config/index.js"); | ||
const _get_message_js_1 = require("../../message/_/_get-message.js"); | ||
const index_js_2 = require("../../message/index.js"); | ||
const _get_message_js_1 = require("../../message/_/_get-message.js"); | ||
const consumer_queues_js_1 = require("../consumer-queues.js"); | ||
@@ -12,0 +12,0 @@ const index_js_3 = require("../errors/index.js"); |
export * from './message-handler.js'; | ||
export * from './consumer-heartbeat.js'; | ||
export * from './consume-message.js'; | ||
export * from './config.js'; | ||
//# sourceMappingURL=index.d.ts.map |
@@ -20,3 +20,2 @@ "use strict"; | ||
__exportStar(require("./consume-message.js"), exports); | ||
__exportStar(require("./config.js"), exports); | ||
//# sourceMappingURL=index.js.map |
@@ -6,4 +6,4 @@ "use strict"; | ||
const redis_keys_js_1 = require("../../../common/redis-keys/redis-keys.js"); | ||
const _get_message_js_1 = require("../../message/_/_get-message.js"); | ||
const index_js_1 = require("../../message/index.js"); | ||
const _get_message_js_1 = require("../../message/_/_get-message.js"); | ||
const index_js_2 = require("../../queue/index.js"); | ||
@@ -10,0 +10,0 @@ const worker_js_1 = require("./worker.js"); |
@@ -6,5 +6,5 @@ "use strict"; | ||
const redis_keys_js_1 = require("../../../common/redis-keys/redis-keys.js"); | ||
const index_js_1 = require("../../message/index.js"); | ||
const _from_message_js_1 = require("../../message/_/_from-message.js"); | ||
const _get_message_js_1 = require("../../message/_/_get-message.js"); | ||
const index_js_1 = require("../../message/index.js"); | ||
const index_js_2 = require("../../queue/index.js"); | ||
@@ -11,0 +11,0 @@ const worker_js_1 = require("./worker.js"); |
@@ -6,4 +6,4 @@ "use strict"; | ||
const redis_keys_js_1 = require("../../../common/redis-keys/redis-keys.js"); | ||
const _get_message_js_1 = require("../../message/_/_get-message.js"); | ||
const index_js_1 = require("../../message/index.js"); | ||
const _get_message_js_1 = require("../../message/_/_get-message.js"); | ||
const index_js_2 = require("../../queue/index.js"); | ||
@@ -10,0 +10,0 @@ const worker_js_1 = require("./worker.js"); |
import { ICallback, ILogger, Runnable } from 'redis-smq-common'; | ||
import { RedisClientInstance } from '../../../common/redis-client/redis-client-instance.js'; | ||
import { IRedisSMQConfigRequired } from '../../../config/types/config.js'; | ||
import { IRedisSMQConfigRequired } from '../../../config/index.js'; | ||
export declare abstract class Worker extends Runnable<Record<string, never>> { | ||
@@ -5,0 +5,0 @@ protected redisClient: RedisClientInstance; |
@@ -10,3 +10,2 @@ "use strict"; | ||
this.shutdown = (cb) => { | ||
console.log('SSSSSSSSSSSSSSSSSSSSSSSSS'); | ||
this.redisClient.shutdown(cb); | ||
@@ -13,0 +12,0 @@ }; |
@@ -1,4 +0,4 @@ | ||
import { IQueueParams } from '../../../queue/types/queue.js'; | ||
import { IQueueParams } from '../../../queue/index.js'; | ||
import { TExchangeDirectTransferable } from '../../types/exchange.js'; | ||
export declare function _getExchangeDirectTransferable(queue: string | IQueueParams): TExchangeDirectTransferable; | ||
//# sourceMappingURL=_get-exchange-direct-transferable.d.ts.map |
@@ -9,4 +9,4 @@ "use strict"; | ||
const index_js_1 = require("../../queue/index.js"); | ||
const exchange_fan_out_error_js_1 = require("../errors/exchange-fan-out.error.js"); | ||
const exchange_error_js_1 = require("../errors/exchange.error.js"); | ||
const index_js_2 = require("../errors/index.js"); | ||
const index_js_3 = require("../errors/index.js"); | ||
const exchange_abstract_js_1 = require("../exchange-abstract.js"); | ||
@@ -62,3 +62,3 @@ const _get_fan_out_exchange_queues_js_1 = require("./_/_get-fan-out-exchange-queues.js"); | ||
else if (reply.length) | ||
cb(new exchange_error_js_1.ExchangeError(`Exchange has ${reply.length} bound queue(s). Unbind all queues before deleting the exchange.`)); | ||
cb(new index_js_3.ExchangeError(`Exchange has ${reply.length} bound queue(s). Unbind all queues before deleting the exchange.`)); | ||
else { | ||
@@ -110,3 +110,3 @@ const multi = client.multi(); | ||
queueProperties.queueType) | ||
cb(new exchange_fan_out_error_js_1.ExchangeFanOutError('Binding different types of queues to the same exchange is not allowed.')); | ||
cb(new index_js_2.ExchangeFanOutError('Binding different types of queues to the same exchange is not allowed.')); | ||
else | ||
@@ -171,3 +171,3 @@ cb(null, queueProperties); | ||
else if (properties.exchange !== fanOutName) | ||
cb(new exchange_fan_out_error_js_1.ExchangeFanOutError(`Queue ${queueParams.name}@${queueParams.ns} is not bound to [${fanOutName}] exchange.`)); | ||
cb(new index_js_2.ExchangeFanOutError(`Queue ${queueParams.name}@${queueParams.ns} is not bound to [${fanOutName}] exchange.`)); | ||
else | ||
@@ -174,0 +174,0 @@ cb(); |
import { ICallback } from 'redis-smq-common'; | ||
import { IQueueParams } from '../../queue/types/queue.js'; | ||
import { IQueueParams } from '../../queue/index.js'; | ||
import { ExchangeAbstract } from '../exchange-abstract.js'; | ||
@@ -4,0 +4,0 @@ import { ITopicParams } from '../types/exchange.js'; |
@@ -8,5 +8,5 @@ "use strict"; | ||
const index_js_1 = require("../../queue/index.js"); | ||
const _get_message_js_1 = require("./_get-message.js"); | ||
const index_js_2 = require("../errors/index.js"); | ||
const index_js_3 = require("../types/index.js"); | ||
const _get_message_js_1 = require("./_get-message.js"); | ||
function _deleteMessage(redisClient, messageId, cb) { | ||
@@ -16,2 +16,5 @@ const keys = []; | ||
const ids = typeof messageId === 'string' ? [messageId] : messageId; | ||
const { keyScheduledMessages, keyDelayedMessages, keyRequeueMessages } = redis_keys_js_1.redisKeys.getMainKeys(); | ||
keys.push(keyScheduledMessages, keyDelayedMessages, keyRequeueMessages); | ||
argv.push(index_js_1.EQueueProperty.QUEUE_TYPE, index_js_1.EQueueProperty.MESSAGES_COUNT, index_js_1.EQueueType.PRIORITY_QUEUE, index_js_1.EQueueType.LIFO_QUEUE, index_js_1.EQueueType.FIFO_QUEUE, index_js_3.EMessageProperty.STATUS, index_js_3.EMessagePropertyStatus.PROCESSING, index_js_3.EMessagePropertyStatus.ACKNOWLEDGED, index_js_3.EMessagePropertyStatus.PENDING, index_js_3.EMessagePropertyStatus.SCHEDULED, index_js_3.EMessagePropertyStatus.DEAD_LETTERED, index_js_3.EMessagePropertyStatus.UNACK_DELAYING, index_js_3.EMessagePropertyStatus.UNACK_REQUEUING); | ||
redis_smq_common_1.async.each(ids, (id, _, done) => { | ||
@@ -25,6 +28,5 @@ (0, _get_message_js_1._getMessage)(redisClient, id, (err, message) => { | ||
const { keyQueueProperties, keyQueueDL, keyQueueScheduled, keyQueueAcknowledged, keyQueuePriorityPending, keyQueuePending, } = redis_keys_js_1.redisKeys.getQueueKeys(message.getDestinationQueue(), message.getConsumerGroupId()); | ||
const { keyScheduledMessages, keyDelayedMessages, keyRequeueMessages, } = redis_keys_js_1.redisKeys.getMainKeys(); | ||
const { keyMessage } = redis_keys_js_1.redisKeys.getMessageKeys(id); | ||
keys.push(keyScheduledMessages, keyDelayedMessages, keyRequeueMessages, keyMessage, keyQueueProperties, keyQueuePending, keyQueueDL, keyQueueAcknowledged, keyQueueScheduled, keyQueuePriorityPending); | ||
argv.push(index_js_1.EQueueProperty.QUEUE_TYPE, index_js_1.EQueueProperty.MESSAGES_COUNT, index_js_1.EQueueType.PRIORITY_QUEUE, index_js_1.EQueueType.LIFO_QUEUE, index_js_1.EQueueType.FIFO_QUEUE, index_js_3.EMessageProperty.STATUS, index_js_3.EMessagePropertyStatus.PROCESSING, index_js_3.EMessagePropertyStatus.ACKNOWLEDGED, index_js_3.EMessagePropertyStatus.PENDING, index_js_3.EMessagePropertyStatus.SCHEDULED, index_js_3.EMessagePropertyStatus.DEAD_LETTERED, index_js_3.EMessagePropertyStatus.UNACK_DELAYING, index_js_3.EMessagePropertyStatus.UNACK_REQUEUING, id); | ||
keys.push(keyMessage, keyQueueProperties, keyQueuePending, keyQueueDL, keyQueueAcknowledged, keyQueueScheduled, keyQueuePriorityPending); | ||
argv.push(id); | ||
done(); | ||
@@ -31,0 +33,0 @@ } |
@@ -6,5 +6,5 @@ "use strict"; | ||
const redis_keys_js_1 = require("../../../common/redis-keys/redis-keys.js"); | ||
const _from_message_js_1 = require("./_from-message.js"); | ||
const index_js_1 = require("../errors/index.js"); | ||
const index_js_2 = require("../types/index.js"); | ||
const _from_message_js_1 = require("./_from-message.js"); | ||
function _getMessage(redisClient, messageId, cb) { | ||
@@ -11,0 +11,0 @@ const { keyMessage } = redis_keys_js_1.redisKeys.getMessageKeys(messageId); |
@@ -8,5 +8,5 @@ "use strict"; | ||
const _delete_message_js_1 = require("./_/_delete-message.js"); | ||
const _get_message_js_1 = require("./_/_get-message.js"); | ||
const _get_message_state_js_1 = require("./_/_get-message-state.js"); | ||
const _get_message_status_js_1 = require("./_/_get-message-status.js"); | ||
const _get_message_js_1 = require("./_/_get-message.js"); | ||
class Message { | ||
@@ -13,0 +13,0 @@ constructor() { |
import { NamespaceError } from './namespace.error.js'; | ||
export declare class NamespaceNotFoundError extends NamespaceError { | ||
constructor(namespace: string); | ||
} | ||
//# sourceMappingURL=namespace-not-found.error.d.ts.map |
@@ -6,7 +6,4 @@ "use strict"; | ||
class NamespaceNotFoundError extends namespace_error_js_1.NamespaceError { | ||
constructor(namespace) { | ||
super(`Namespace (${namespace}) does not exist`); | ||
} | ||
} | ||
exports.NamespaceNotFoundError = NamespaceNotFoundError; | ||
//# sourceMappingURL=namespace-not-found.error.js.map |
@@ -50,13 +50,28 @@ "use strict"; | ||
else { | ||
const { keyNamespaces } = redis_keys_js_1.redisKeys.getMainKeys(); | ||
const { keyNamespaceQueues } = redis_keys_js_1.redisKeys.getNamespaceKeys(ns); | ||
client.smembers(keyNamespaceQueues, (err, reply) => { | ||
if (err) | ||
cb(err); | ||
else if (!reply) | ||
cb(new redis_smq_common_1.CallbackEmptyReplyError()); | ||
else { | ||
const messageQueues = reply.map((i) => JSON.parse(i)); | ||
cb(null, messageQueues); | ||
} | ||
}); | ||
redis_smq_common_1.async.waterfall([ | ||
(cb) => { | ||
client.sismember(keyNamespaces, ns, (err, reply) => { | ||
if (err) | ||
cb(err); | ||
else if (!reply) | ||
cb(new index_js_2.NamespaceNotFoundError()); | ||
else | ||
cb(); | ||
}); | ||
}, | ||
(cb) => { | ||
client.smembers(keyNamespaceQueues, (err, reply) => { | ||
if (err) | ||
cb(err); | ||
else if (!reply) | ||
cb(new redis_smq_common_1.CallbackEmptyReplyError()); | ||
else { | ||
const messageQueues = reply.map((i) => JSON.parse(i)); | ||
cb(null, messageQueues); | ||
} | ||
}); | ||
}, | ||
], cb); | ||
} | ||
@@ -63,0 +78,0 @@ }); |
@@ -10,4 +10,4 @@ "use strict"; | ||
const event_bus_redis_factory_js_1 = require("../event-bus/event-bus-redis-factory.js"); | ||
const _get_exchange_queues_js_1 = require("../exchange/_/_get-exchange-queues.js"); | ||
const index_js_2 = require("../exchange/index.js"); | ||
const _get_exchange_queues_js_1 = require("../exchange/_/_get-exchange-queues.js"); | ||
const index_js_3 = require("../message/index.js"); | ||
@@ -18,4 +18,4 @@ const message_envelope_js_1 = require("../message/message-envelope.js"); | ||
const index_js_5 = require("./errors/index.js"); | ||
const event_bus_publisher_js_1 = require("./event-bus-publisher.js"); | ||
const queue_consumer_groups_cache_js_1 = require("./queue-consumer-groups-cache.js"); | ||
const event_bus_publisher_js_1 = require("./event-bus-publisher.js"); | ||
class Producer extends redis_smq_common_1.Runnable { | ||
@@ -22,0 +22,0 @@ constructor() { |
@@ -8,5 +8,5 @@ "use strict"; | ||
const event_bus_redis_factory_js_1 = require("../event-bus/event-bus-redis-factory.js"); | ||
const index_js_1 = require("../queue/index.js"); | ||
const _get_queue_properties_js_1 = require("../queue/_/_get-queue-properties.js"); | ||
const _get_queues_js_1 = require("../queue/_/_get-queues.js"); | ||
const index_js_1 = require("../queue/index.js"); | ||
class QueueConsumerGroupsCache extends redis_smq_common_1.Runnable { | ||
@@ -13,0 +13,0 @@ constructor(producerId, logger) { |
@@ -7,6 +7,6 @@ "use strict"; | ||
const redis_keys_js_1 = require("../../../common/redis-keys/redis-keys.js"); | ||
const _get_message_js_1 = require("../../message/_/_get-message.js"); | ||
const index_js_1 = require("../../message/index.js"); | ||
const _get_message_js_1 = require("../../message/_/_get-message.js"); | ||
const _parse_queue_params_js_1 = require("../../queue/_/_parse-queue-params.js"); | ||
const index_js_2 = require("../../queue/index.js"); | ||
const _parse_queue_params_js_1 = require("../../queue/_/_parse-queue-params.js"); | ||
const index_js_3 = require("../errors/index.js"); | ||
@@ -13,0 +13,0 @@ function _requeueMessage(redisClient, queue, messageId, messageStatus, cb) { |
@@ -5,4 +5,4 @@ "use strict"; | ||
const index_js_1 = require("../../consumer/index.js"); | ||
const _get_queue_properties_js_1 = require("../../queue/_/_get-queue-properties.js"); | ||
const index_js_2 = require("../../queue/index.js"); | ||
const _get_queue_properties_js_1 = require("../../queue/_/_get-queue-properties.js"); | ||
function _validateQueueExtendedParams(redisClient, queue, requireGroupId, cb) { | ||
@@ -9,0 +9,0 @@ const { queueParams, groupId } = queue; |
@@ -10,5 +10,5 @@ "use strict"; | ||
const processing_queue_js_1 = require("../../consumer/message-handler/processing-queue.js"); | ||
const _get_queue_properties_js_1 = require("./_get-queue-properties.js"); | ||
const index_js_1 = require("../errors/index.js"); | ||
const index_js_2 = require("../types/index.js"); | ||
const _get_queue_properties_js_1 = require("./_get-queue-properties.js"); | ||
function checkOnlineConsumers(redisClient, queue, cb) { | ||
@@ -15,0 +15,0 @@ const verifyHeartbeats = (consumerIds, cb) => { |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports._parseQueueParams = void 0; | ||
const redis_keys_error_js_1 = require("../../../common/redis-keys/redis-keys.error.js"); | ||
const redis_keys_js_1 = require("../../../common/redis-keys/redis-keys.js"); | ||
const redis_keys_error_js_1 = require("../../../common/redis-keys/redis-keys.error.js"); | ||
const index_js_1 = require("../../../config/index.js"); | ||
@@ -7,0 +7,0 @@ function _parseQueueParams(queue) { |
import { ICallback } from 'redis-smq-common'; | ||
import { RedisClientInstance } from '../../common/redis-client/redis-client-instance.js'; | ||
import { EventBusRedisInstance } from '../event-bus/event-bus-redis-instance.js'; | ||
import { EventBusRedisInstance } from '../event-bus/index.js'; | ||
import { EQueueDeliveryModel, EQueueType, IQueueParams, IQueueProperties } from './types/index.js'; | ||
@@ -5,0 +5,0 @@ export declare class Queue { |
@@ -9,3 +9,3 @@ "use strict"; | ||
const index_js_1 = require("../../config/index.js"); | ||
const event_bus_redis_instance_js_1 = require("../event-bus/event-bus-redis-instance.js"); | ||
const index_js_2 = require("../event-bus/index.js"); | ||
const _delete_queue_js_1 = require("./_/_delete-queue.js"); | ||
@@ -15,4 +15,4 @@ const _get_queue_properties_js_1 = require("./_/_get-queue-properties.js"); | ||
const _parse_queue_params_js_1 = require("./_/_parse-queue-params.js"); | ||
const index_js_2 = require("./errors/index.js"); | ||
const index_js_3 = require("./types/index.js"); | ||
const index_js_3 = require("./errors/index.js"); | ||
const index_js_4 = require("./types/index.js"); | ||
class Queue { | ||
@@ -24,3 +24,3 @@ constructor() { | ||
this.logger = redis_smq_common_1.logger.getLogger(index_js_1.Configuration.getSetConfig().logger, `queue`); | ||
this.eventBus = new event_bus_redis_instance_js_1.EventBusRedisInstance(); | ||
this.eventBus = new index_js_2.EventBusRedisInstance(); | ||
this.eventBus.on('error', (err) => this.logger.error(err)); | ||
@@ -48,5 +48,5 @@ this.redisClient = new redis_client_instance_js_1.RedisClientInstance(); | ||
queueParamsStr, | ||
index_js_3.EQueueProperty.QUEUE_TYPE, | ||
index_js_4.EQueueProperty.QUEUE_TYPE, | ||
queueType, | ||
index_js_3.EQueueProperty.DELIVERY_MODEL, | ||
index_js_4.EQueueProperty.DELIVERY_MODEL, | ||
deliveryModel, | ||
@@ -59,3 +59,3 @@ ], (err, reply) => { | ||
else if (reply !== 'OK') | ||
cb(new index_js_2.QueueExistsError()); | ||
cb(new index_js_3.QueueExistsError()); | ||
else | ||
@@ -62,0 +62,0 @@ this.getProperties(queueParams, (err, properties) => { |
import { redisKeys } from '../../../common/redis-keys/redis-keys.js'; | ||
import { ConsumerInvalidGroupIdError } from '../../consumer/index.js'; | ||
function validateGroupId(groupId) { | ||
const lowerCase = groupId.toLowerCase(); | ||
const filtered = lowerCase.replace(/(?:[a-z][a-z0-9]?)+(?:[-_]?[a-z0-9])*/, ''); | ||
if (filtered.length) { | ||
return false; | ||
} | ||
return lowerCase; | ||
} | ||
export function _saveConsumerGroup(redisClient, eventBus, queue, groupId, cb) { | ||
const gid = validateGroupId(groupId); | ||
if (!gid) | ||
cb(new ConsumerInvalidGroupIdError()); | ||
const gid = redisKeys.validateRedisKey(groupId); | ||
if (gid instanceof Error) | ||
cb(gid); | ||
else { | ||
@@ -16,0 +7,0 @@ const { keyQueueConsumerGroups } = redisKeys.getQueueKeys(queue, gid); |
import { ICallback } from 'redis-smq-common'; | ||
import { RedisClientInstance } from '../../common/redis-client/redis-client-instance.js'; | ||
import { EventBusRedisInstance } from '../event-bus/event-bus-redis-instance.js'; | ||
import { EventBusRedisInstance } from '../event-bus/index.js'; | ||
import { IQueueParams } from '../queue/index.js'; | ||
@@ -5,0 +5,0 @@ export declare class ConsumerGroups { |
import { async, CallbackEmptyReplyError, logger, } from 'redis-smq-common'; | ||
import { RedisClientInstance } from '../../common/redis-client/redis-client-instance.js'; | ||
import { Configuration } from '../../config/index.js'; | ||
import { EventBusRedisInstance } from '../event-bus/event-bus-redis-instance.js'; | ||
import { EventBusRedisInstance } from '../event-bus/index.js'; | ||
import { _parseQueueParams } from '../queue/_/_parse-queue-params.js'; | ||
@@ -6,0 +6,0 @@ import { _deleteConsumerGroup } from './_/_delete-consumer-group.js'; |
@@ -5,3 +5,3 @@ import * as os from 'os'; | ||
import { redisKeys } from '../../../common/redis-keys/redis-keys.js'; | ||
import { Configuration } from '../../../config/configuration.js'; | ||
import { Configuration } from '../../../config/index.js'; | ||
import { EventBusRedisFactory } from '../../event-bus/event-bus-redis-factory.js'; | ||
@@ -8,0 +8,0 @@ import { eventBusPublisher } from './event-bus-publisher.js'; |
@@ -9,6 +9,6 @@ import path from 'path'; | ||
import { _cleanupOfflineConsumer } from '../consumer-heartbeat/_/_cleanup-offline-consumer.js'; | ||
import { eventBusPublisher } from './event-bus-publisher.js'; | ||
import { ConsumerHeartbeat } from '../consumer-heartbeat/consumer-heartbeat.js'; | ||
import { MessageHandlerRunner } from '../message-handler-runner/message-handler-runner.js'; | ||
import { MultiplexedMessageHandlerRunner } from '../message-handler-runner/multiplexed-message-handler-runner.js'; | ||
import { eventBusPublisher } from './event-bus-publisher.js'; | ||
export class Consumer extends Runnable { | ||
@@ -15,0 +15,0 @@ messageHandlerRunner; |
export { ConsumerError } from './consumer.error.js'; | ||
export { ConsumerMessageHandlerAlreadyExistsError } from './consumer-message-handler-already-exists.error.js'; | ||
export { ConsumerGroupDeleteError } from './consumer-group-delete.error.js'; | ||
export { ConsumerGroupIdNotFoundError } from './consumer-group-id-not-found.error.js'; | ||
export { ConsumerGroupIdNotSupportedError } from './consumer-group-id-not-supported.error.js'; | ||
export { ConsumerGroupIdRequiredError } from './consumer-group-id-required.error.js'; | ||
export { ConsumerInvalidGroupIdError } from './consumer-invalid-group-id.error.js'; | ||
//# sourceMappingURL=index.d.ts.map |
export { ConsumerError } from './consumer.error.js'; | ||
export { ConsumerMessageHandlerAlreadyExistsError } from './consumer-message-handler-already-exists.error.js'; | ||
export { ConsumerGroupDeleteError } from './consumer-group-delete.error.js'; | ||
export { ConsumerGroupIdNotFoundError } from './consumer-group-id-not-found.error.js'; | ||
export { ConsumerGroupIdNotSupportedError } from './consumer-group-id-not-supported.error.js'; | ||
export { ConsumerGroupIdRequiredError } from './consumer-group-id-required.error.js'; | ||
export { ConsumerInvalidGroupIdError } from './consumer-invalid-group-id.error.js'; | ||
//# sourceMappingURL=index.js.map |
@@ -5,4 +5,4 @@ import { ICallback, ILogger, Runnable } from 'redis-smq-common'; | ||
import { Consumer } from '../consumer/consumer.js'; | ||
import { MessageHandler } from '../message-handler/message-handler/message-handler.js'; | ||
import { IConsumerMessageHandlerArgs, TConsumerMessageHandler } from '../types/index.js'; | ||
import { MessageHandler } from '../message-handler/message-handler/message-handler.js'; | ||
export declare class MessageHandlerRunner extends Runnable<TConsumerMessageHandlerRunnerEvent> { | ||
@@ -9,0 +9,0 @@ protected consumer: Consumer; |
import { async, Runnable } from 'redis-smq-common'; | ||
import { Configuration } from '../../../config/configuration.js'; | ||
import { Configuration } from '../../../config/index.js'; | ||
import { ConsumerMessageHandlerAlreadyExistsError } from '../errors/index.js'; | ||
@@ -4,0 +4,0 @@ import { MessageHandler } from '../message-handler/message-handler/message-handler.js'; |
import { ICallback, ILogger, Timer } from 'redis-smq-common'; | ||
import { Consumer } from '../consumer/consumer.js'; | ||
import { MessageHandler } from '../message-handler/message-handler/message-handler.js'; | ||
import { IConsumerMessageHandlerArgs } from '../types/index.js'; | ||
import { MessageHandlerRunner } from './message-handler-runner.js'; | ||
import { IConsumerMessageHandlerArgs } from '../types/index.js'; | ||
export declare class MultiplexedMessageHandlerRunner extends MessageHandlerRunner { | ||
@@ -7,0 +7,0 @@ protected timer: Timer; |
import { Timer } from 'redis-smq-common'; | ||
import { MultiplexedMessageHandler } from '../message-handler/multiplexed-message-handler.js'; | ||
import { MessageHandlerRunner } from './message-handler-runner.js'; | ||
import { MultiplexedMessageHandler } from '../message-handler/multiplexed-message-handler.js'; | ||
export class MultiplexedMessageHandlerRunner extends MessageHandlerRunner { | ||
@@ -5,0 +5,0 @@ timer; |
@@ -5,8 +5,8 @@ import * as os from 'os'; | ||
import { redisKeys } from '../../../../common/redis-keys/redis-keys.js'; | ||
import { Configuration } from '../../../../config/configuration.js'; | ||
import { Configuration } from '../../../../config/index.js'; | ||
import { _saveConsumerGroup } from '../../../consumer-groups/_/_save-consumer-group.js'; | ||
import { EventBusRedisFactory } from '../../../event-bus/event-bus-redis-factory.js'; | ||
import { EQueueDeliveryModel, EQueueType, QueueNotFoundError, } from '../../../queue/index.js'; | ||
import { _hasRateLimitExceeded } from '../../../queue-rate-limit/_/_has-rate-limit-exceeded.js'; | ||
import { _getQueueProperties } from '../../../queue/_/_get-queue-properties.js'; | ||
import { EQueueDeliveryModel, EQueueType, QueueNotFoundError, } from '../../../queue/index.js'; | ||
import { ConsumerGroupIdNotSupportedError, ConsumerGroupIdRequiredError, } from '../../errors/index.js'; | ||
@@ -13,0 +13,0 @@ import { eventBusPublisher } from './event-bus-publisher.js'; |
@@ -7,4 +7,4 @@ import { CallbackEmptyReplyError, CallbackInvalidReplyError, Runnable, } from 'redis-smq-common'; | ||
import { Configuration } from '../../../../config/index.js'; | ||
import { _fromMessage } from '../../../message/_/_from-message.js'; | ||
import { EMessageProperty, EMessagePropertyStatus, } from '../../../message/index.js'; | ||
import { _fromMessage } from '../../../message/_/_from-message.js'; | ||
import { EConsumeMessageUnacknowledgedCause, } from '../../types/index.js'; | ||
@@ -11,0 +11,0 @@ import { ConsumeMessage } from '../consume-message/consume-message.js'; |
import { ILogger } from 'redis-smq-common'; | ||
import { Consumer } from '../consumer/consumer.js'; | ||
import { IConsumerMessageHandlerArgs } from '../types/index.js'; | ||
import { DequeueMessage } from './dequeue-message/dequeue-message.js'; | ||
import { MessageHandler } from './message-handler/message-handler.js'; | ||
import { IConsumerMessageHandlerArgs } from '../types/index.js'; | ||
export declare class MultiplexedMessageHandler extends MessageHandler { | ||
@@ -7,0 +7,0 @@ protected dequeueNextFn: () => void; |
@@ -5,4 +5,4 @@ import { async } from 'redis-smq-common'; | ||
import { Configuration } from '../../../config/index.js'; | ||
import { _getMessage } from '../../message/_/_get-message.js'; | ||
import { EMessageProperty, EMessagePropertyStatus, } from '../../message/index.js'; | ||
import { _getMessage } from '../../message/_/_get-message.js'; | ||
import { consumerQueues } from '../consumer-queues.js'; | ||
@@ -9,0 +9,0 @@ import { ConsumerError } from '../errors/index.js'; |
export * from './message-handler.js'; | ||
export * from './consumer-heartbeat.js'; | ||
export * from './consume-message.js'; | ||
export * from './config.js'; | ||
//# sourceMappingURL=index.d.ts.map |
export * from './message-handler.js'; | ||
export * from './consumer-heartbeat.js'; | ||
export * from './consume-message.js'; | ||
export * from './config.js'; | ||
//# sourceMappingURL=index.js.map |
import { async, CallbackEmptyReplyError, PanicError, } from 'redis-smq-common'; | ||
import { ELuaScriptName } from '../../../common/redis-client/scripts/scripts.js'; | ||
import { redisKeys } from '../../../common/redis-keys/redis-keys.js'; | ||
import { _getMessage } from '../../message/_/_get-message.js'; | ||
import { EMessageProperty, EMessagePropertyStatus, } from '../../message/index.js'; | ||
import { _getMessage } from '../../message/_/_get-message.js'; | ||
import { EQueueProperty } from '../../queue/index.js'; | ||
@@ -7,0 +7,0 @@ import { Worker } from './worker.js'; |
import { async, PanicError } from 'redis-smq-common'; | ||
import { ELuaScriptName } from '../../../common/redis-client/scripts/scripts.js'; | ||
import { redisKeys } from '../../../common/redis-keys/redis-keys.js'; | ||
import { EMessageProperty, EMessagePropertyStatus, } from '../../message/index.js'; | ||
import { _fromMessage } from '../../message/_/_from-message.js'; | ||
import { _getMessages } from '../../message/_/_get-message.js'; | ||
import { EMessageProperty, EMessagePropertyStatus, } from '../../message/index.js'; | ||
import { EQueueProperty, EQueueType } from '../../queue/index.js'; | ||
@@ -8,0 +8,0 @@ import { Worker } from './worker.js'; |
import { async, CallbackEmptyReplyError } from 'redis-smq-common'; | ||
import { ELuaScriptName } from '../../../common/redis-client/scripts/scripts.js'; | ||
import { redisKeys } from '../../../common/redis-keys/redis-keys.js'; | ||
import { _getMessage } from '../../message/_/_get-message.js'; | ||
import { EMessageProperty, EMessagePropertyStatus, } from '../../message/index.js'; | ||
import { _getMessage } from '../../message/_/_get-message.js'; | ||
import { EQueueProperty, EQueueType } from '../../queue/index.js'; | ||
@@ -7,0 +7,0 @@ import { Worker } from './worker.js'; |
import { ICallback, ILogger, Runnable } from 'redis-smq-common'; | ||
import { RedisClientInstance } from '../../../common/redis-client/redis-client-instance.js'; | ||
import { IRedisSMQConfigRequired } from '../../../config/types/config.js'; | ||
import { IRedisSMQConfigRequired } from '../../../config/index.js'; | ||
export declare abstract class Worker extends Runnable<Record<string, never>> { | ||
@@ -5,0 +5,0 @@ protected redisClient: RedisClientInstance; |
@@ -13,3 +13,2 @@ import { logger } from 'redis-smq-common'; | ||
shutdown = (cb) => { | ||
console.log('SSSSSSSSSSSSSSSSSSSSSSSSS'); | ||
this.redisClient.shutdown(cb); | ||
@@ -16,0 +15,0 @@ }; |
@@ -1,4 +0,4 @@ | ||
import { IQueueParams } from '../../../queue/types/queue.js'; | ||
import { IQueueParams } from '../../../queue/index.js'; | ||
import { TExchangeDirectTransferable } from '../../types/exchange.js'; | ||
export declare function _getExchangeDirectTransferable(queue: string | IQueueParams): TExchangeDirectTransferable; | ||
//# sourceMappingURL=_get-exchange-direct-transferable.d.ts.map |
@@ -6,4 +6,4 @@ import { async, CallbackEmptyReplyError } from 'redis-smq-common'; | ||
import { EQueueProperty, } from '../../queue/index.js'; | ||
import { ExchangeFanOutError } from '../errors/exchange-fan-out.error.js'; | ||
import { ExchangeError } from '../errors/exchange.error.js'; | ||
import { ExchangeFanOutError } from '../errors/index.js'; | ||
import { ExchangeError } from '../errors/index.js'; | ||
import { ExchangeAbstract } from '../exchange-abstract.js'; | ||
@@ -10,0 +10,0 @@ import { _getFanOutExchangeQueues } from './_/_get-fan-out-exchange-queues.js'; |
import { ICallback } from 'redis-smq-common'; | ||
import { IQueueParams } from '../../queue/types/queue.js'; | ||
import { IQueueParams } from '../../queue/index.js'; | ||
import { ExchangeAbstract } from '../exchange-abstract.js'; | ||
@@ -4,0 +4,0 @@ import { ITopicParams } from '../types/exchange.js'; |
@@ -5,5 +5,5 @@ import { async, CallbackEmptyReplyError, } from 'redis-smq-common'; | ||
import { EQueueProperty, EQueueType } from '../../queue/index.js'; | ||
import { _getMessage } from './_get-message.js'; | ||
import { MessageDeleteError } from '../errors/index.js'; | ||
import { EMessageProperty, EMessagePropertyStatus } from '../types/index.js'; | ||
import { _getMessage } from './_get-message.js'; | ||
export function _deleteMessage(redisClient, messageId, cb) { | ||
@@ -13,2 +13,5 @@ const keys = []; | ||
const ids = typeof messageId === 'string' ? [messageId] : messageId; | ||
const { keyScheduledMessages, keyDelayedMessages, keyRequeueMessages } = redisKeys.getMainKeys(); | ||
keys.push(keyScheduledMessages, keyDelayedMessages, keyRequeueMessages); | ||
argv.push(EQueueProperty.QUEUE_TYPE, EQueueProperty.MESSAGES_COUNT, EQueueType.PRIORITY_QUEUE, EQueueType.LIFO_QUEUE, EQueueType.FIFO_QUEUE, EMessageProperty.STATUS, EMessagePropertyStatus.PROCESSING, EMessagePropertyStatus.ACKNOWLEDGED, EMessagePropertyStatus.PENDING, EMessagePropertyStatus.SCHEDULED, EMessagePropertyStatus.DEAD_LETTERED, EMessagePropertyStatus.UNACK_DELAYING, EMessagePropertyStatus.UNACK_REQUEUING); | ||
async.each(ids, (id, _, done) => { | ||
@@ -22,6 +25,5 @@ _getMessage(redisClient, id, (err, message) => { | ||
const { keyQueueProperties, keyQueueDL, keyQueueScheduled, keyQueueAcknowledged, keyQueuePriorityPending, keyQueuePending, } = redisKeys.getQueueKeys(message.getDestinationQueue(), message.getConsumerGroupId()); | ||
const { keyScheduledMessages, keyDelayedMessages, keyRequeueMessages, } = redisKeys.getMainKeys(); | ||
const { keyMessage } = redisKeys.getMessageKeys(id); | ||
keys.push(keyScheduledMessages, keyDelayedMessages, keyRequeueMessages, keyMessage, keyQueueProperties, keyQueuePending, keyQueueDL, keyQueueAcknowledged, keyQueueScheduled, keyQueuePriorityPending); | ||
argv.push(EQueueProperty.QUEUE_TYPE, EQueueProperty.MESSAGES_COUNT, EQueueType.PRIORITY_QUEUE, EQueueType.LIFO_QUEUE, EQueueType.FIFO_QUEUE, EMessageProperty.STATUS, EMessagePropertyStatus.PROCESSING, EMessagePropertyStatus.ACKNOWLEDGED, EMessagePropertyStatus.PENDING, EMessagePropertyStatus.SCHEDULED, EMessagePropertyStatus.DEAD_LETTERED, EMessagePropertyStatus.UNACK_DELAYING, EMessagePropertyStatus.UNACK_REQUEUING, id); | ||
keys.push(keyMessage, keyQueueProperties, keyQueuePending, keyQueueDL, keyQueueAcknowledged, keyQueueScheduled, keyQueuePriorityPending); | ||
argv.push(id); | ||
done(); | ||
@@ -28,0 +30,0 @@ } |
import { async } from 'redis-smq-common'; | ||
import { redisKeys } from '../../../common/redis-keys/redis-keys.js'; | ||
import { _fromMessage } from './_from-message.js'; | ||
import { MessageNotFoundError } from '../errors/index.js'; | ||
import { EMessageProperty } from '../types/index.js'; | ||
import { _fromMessage } from './_from-message.js'; | ||
export function _getMessage(redisClient, messageId, cb) { | ||
@@ -7,0 +7,0 @@ const { keyMessage } = redisKeys.getMessageKeys(messageId); |
@@ -5,5 +5,5 @@ import { CallbackEmptyReplyError, logger } from 'redis-smq-common'; | ||
import { _deleteMessage } from './_/_delete-message.js'; | ||
import { _getMessage, _getMessages } from './_/_get-message.js'; | ||
import { _getMessageState } from './_/_get-message-state.js'; | ||
import { _getMessageStatus } from './_/_get-message-status.js'; | ||
import { _getMessage, _getMessages } from './_/_get-message.js'; | ||
export class Message { | ||
@@ -10,0 +10,0 @@ logger; |
import { NamespaceError } from './namespace.error.js'; | ||
export declare class NamespaceNotFoundError extends NamespaceError { | ||
constructor(namespace: string); | ||
} | ||
//# sourceMappingURL=namespace-not-found.error.d.ts.map |
import { NamespaceError } from './namespace.error.js'; | ||
export class NamespaceNotFoundError extends NamespaceError { | ||
constructor(namespace) { | ||
super(`Namespace (${namespace}) does not exist`); | ||
} | ||
} | ||
//# sourceMappingURL=namespace-not-found.error.js.map |
@@ -46,13 +46,28 @@ import { async, CallbackEmptyReplyError, logger, } from 'redis-smq-common'; | ||
else { | ||
const { keyNamespaces } = redisKeys.getMainKeys(); | ||
const { keyNamespaceQueues } = redisKeys.getNamespaceKeys(ns); | ||
client.smembers(keyNamespaceQueues, (err, reply) => { | ||
if (err) | ||
cb(err); | ||
else if (!reply) | ||
cb(new CallbackEmptyReplyError()); | ||
else { | ||
const messageQueues = reply.map((i) => JSON.parse(i)); | ||
cb(null, messageQueues); | ||
} | ||
}); | ||
async.waterfall([ | ||
(cb) => { | ||
client.sismember(keyNamespaces, ns, (err, reply) => { | ||
if (err) | ||
cb(err); | ||
else if (!reply) | ||
cb(new NamespaceNotFoundError()); | ||
else | ||
cb(); | ||
}); | ||
}, | ||
(cb) => { | ||
client.smembers(keyNamespaceQueues, (err, reply) => { | ||
if (err) | ||
cb(err); | ||
else if (!reply) | ||
cb(new CallbackEmptyReplyError()); | ||
else { | ||
const messageQueues = reply.map((i) => JSON.parse(i)); | ||
cb(null, messageQueues); | ||
} | ||
}); | ||
}, | ||
], cb); | ||
} | ||
@@ -59,0 +74,0 @@ }); |
@@ -7,4 +7,4 @@ import { async, CallbackEmptyReplyError, logger, PanicError, Runnable, } from 'redis-smq-common'; | ||
import { EventBusRedisFactory } from '../event-bus/event-bus-redis-factory.js'; | ||
import { _getExchangeQueues } from '../exchange/_/_get-exchange-queues.js'; | ||
import { EExchangeType } from '../exchange/index.js'; | ||
import { _getExchangeQueues } from '../exchange/_/_get-exchange-queues.js'; | ||
import { EMessageProperty, EMessagePropertyStatus, } from '../message/index.js'; | ||
@@ -15,4 +15,4 @@ import { MessageEnvelope } from '../message/message-envelope.js'; | ||
import { ProducerInstanceNotRunningError, ProducerMessageExchangeRequiredError, ProducerMessageNotPublishedError, ProducerQueueWithoutConsumerGroupsError, } from './errors/index.js'; | ||
import { eventBusPublisher } from './event-bus-publisher.js'; | ||
import { QueueConsumerGroupsCache } from './queue-consumer-groups-cache.js'; | ||
import { eventBusPublisher } from './event-bus-publisher.js'; | ||
export class Producer extends Runnable { | ||
@@ -19,0 +19,0 @@ logger; |
@@ -5,5 +5,5 @@ import { async, Runnable, } from 'redis-smq-common'; | ||
import { EventBusRedisFactory } from '../event-bus/event-bus-redis-factory.js'; | ||
import { EQueueDeliveryModel, } from '../queue/index.js'; | ||
import { _getQueueProperties } from '../queue/_/_get-queue-properties.js'; | ||
import { _getQueues } from '../queue/_/_get-queues.js'; | ||
import { EQueueDeliveryModel, } from '../queue/index.js'; | ||
export class QueueConsumerGroupsCache extends Runnable { | ||
@@ -10,0 +10,0 @@ redisClient; |
import { CallbackEmptyReplyError, } from 'redis-smq-common'; | ||
import { ELuaScriptName } from '../../../common/redis-client/scripts/scripts.js'; | ||
import { redisKeys } from '../../../common/redis-keys/redis-keys.js'; | ||
import { _getMessage } from '../../message/_/_get-message.js'; | ||
import { EMessageProperty, EMessagePropertyStatus, } from '../../message/index.js'; | ||
import { _getMessage } from '../../message/_/_get-message.js'; | ||
import { _parseQueueParams } from '../../queue/_/_parse-queue-params.js'; | ||
import { EQueueProperty, EQueueType } from '../../queue/index.js'; | ||
import { _parseQueueParams } from '../../queue/_/_parse-queue-params.js'; | ||
import { MessageRequeueError } from '../errors/index.js'; | ||
@@ -9,0 +9,0 @@ export function _requeueMessage(redisClient, queue, messageId, messageStatus, cb) { |
import { ConsumerGroupIdNotSupportedError, ConsumerGroupIdRequiredError, } from '../../consumer/index.js'; | ||
import { _getQueueProperties } from '../../queue/_/_get-queue-properties.js'; | ||
import { EQueueDeliveryModel } from '../../queue/index.js'; | ||
import { _getQueueProperties } from '../../queue/_/_get-queue-properties.js'; | ||
export function _validateQueueExtendedParams(redisClient, queue, requireGroupId, cb) { | ||
@@ -5,0 +5,0 @@ const { queueParams, groupId } = queue; |
@@ -7,5 +7,5 @@ import { async, } from 'redis-smq-common'; | ||
import { processingQueue } from '../../consumer/message-handler/processing-queue.js'; | ||
import { _getQueueProperties } from './_get-queue-properties.js'; | ||
import { QueueHasRunningConsumersError, QueueNotEmptyError, QueueNotFoundError, } from '../errors/index.js'; | ||
import { EQueueDeliveryModel } from '../types/index.js'; | ||
import { _getQueueProperties } from './_get-queue-properties.js'; | ||
function checkOnlineConsumers(redisClient, queue, cb) { | ||
@@ -12,0 +12,0 @@ const verifyHeartbeats = (consumerIds, cb) => { |
@@ -0,3 +1,3 @@ | ||
import { RedisKeysError } from '../../../common/redis-keys/redis-keys.error.js'; | ||
import { redisKeys } from '../../../common/redis-keys/redis-keys.js'; | ||
import { RedisKeysError } from '../../../common/redis-keys/redis-keys.error.js'; | ||
import { Configuration } from '../../../config/index.js'; | ||
@@ -4,0 +4,0 @@ export function _parseQueueParams(queue) { |
import { ICallback } from 'redis-smq-common'; | ||
import { RedisClientInstance } from '../../common/redis-client/redis-client-instance.js'; | ||
import { EventBusRedisInstance } from '../event-bus/event-bus-redis-instance.js'; | ||
import { EventBusRedisInstance } from '../event-bus/index.js'; | ||
import { EQueueDeliveryModel, EQueueType, IQueueParams, IQueueProperties } from './types/index.js'; | ||
@@ -5,0 +5,0 @@ export declare class Queue { |
@@ -6,3 +6,3 @@ import { async, CallbackEmptyReplyError, logger, } from 'redis-smq-common'; | ||
import { Configuration } from '../../config/index.js'; | ||
import { EventBusRedisInstance } from '../event-bus/event-bus-redis-instance.js'; | ||
import { EventBusRedisInstance } from '../event-bus/index.js'; | ||
import { _deleteQueue } from './_/_delete-queue.js'; | ||
@@ -9,0 +9,0 @@ import { _getQueueProperties } from './_/_get-queue-properties.js'; |
{ | ||
"name": "redis-smq", | ||
"version": "8.0.0-rc.20", | ||
"version": "8.0.0-rc.21", | ||
"description": "A simple high-performance Redis message queue for Node.js.", | ||
@@ -50,9 +50,2 @@ "author": "Weyoss <weyoss@protonmail.com>", | ||
}, | ||
"typesVersions": { | ||
"*": { | ||
".": [ | ||
"./dist/types/index.d.ts" | ||
] | ||
} | ||
}, | ||
"dependencies": { | ||
@@ -59,0 +52,0 @@ "cron-parser": "4.7.1", |
@@ -6,4 +6,11 @@ > [!IMPORTANT] | ||
<div align="center" style="text-align: center"> | ||
<p><a href="https://github.com/weyoss/redis-smq"><img alt="RedisSMQ" src="./logo.png?v=202312182134" /></a></p> | ||
<p>A simple high-performance Redis message queue for Node.js.</p> | ||
<p><a href="https://github.com/weyoss/redis-smq"><img alt="RedisSMQ" src="./logo.png?v=202312182134" /></a></p> | ||
<p>A simple high-performance Redis message queue for Node.js.</p> | ||
<p> | ||
<a href="https://github.com/weyoss/redis-smq/actions/workflows/tests.yml"><img src="https://github.com/weyoss/redis-smq/actions/workflows/tests.yml/badge.svg" alt="Tests" style="max-width:100%;" /></a> | ||
<a href="https://github.com/weyoss/redis-smq/actions/workflows/codeql.yml" rel="nofollow"><img src="https://github.com/weyoss/redis-smq/actions/workflows/codeql.yml/badge.svg" alt="Code quality" /></a> | ||
<a href="https://codecov.io/github/weyoss/redis-smq?branch=master" rel="nofollow"><img src="https://img.shields.io/codecov/c/github/weyoss/redis-smq" alt="Coverage Status" /></a> | ||
<a href="https://npmjs.org/package/redis-smq" rel="nofollow"><img src="https://img.shields.io/npm/v/redis-smq.svg" alt="NPM version" /></a> | ||
<a href="https://npmjs.org/package/redis-smq" rel="nofollow"><img src="https://img.shields.io/npm/dm/redis-smq.svg" alt="NPM downloads" /></a> | ||
</p> | ||
</div> | ||
@@ -13,10 +20,2 @@ | ||
<p> | ||
<a href="https://github.com/weyoss/redis-smq/actions/workflows/tests.yml"><img src="https://github.com/weyoss/redis-smq/actions/workflows/tests.yml/badge.svg" alt="Tests" style="max-width:100%;" /></a> | ||
<a href="https://github.com/weyoss/redis-smq/actions/workflows/codeql.yml" rel="nofollow"><img src="https://github.com/weyoss/redis-smq/actions/workflows/codeql.yml/badge.svg" alt="Code quality" /></a> | ||
<a href="https://codecov.io/github/weyoss/redis-smq?branch=master" rel="nofollow"><img src="https://img.shields.io/codecov/c/github/weyoss/redis-smq" alt="Coverage Status" /></a> | ||
<a href="https://npmjs.org/package/redis-smq" rel="nofollow"><img src="https://img.shields.io/npm/v/redis-smq.svg" alt="NPM version" /></a> | ||
<a href="https://npmjs.org/package/redis-smq" rel="nofollow"><img src="https://img.shields.io/npm/dm/redis-smq.svg" alt="NPM downloads" /></a> | ||
</p> | ||
RedisSMQ is a Node.js library for queuing messages (aka jobs) and processing them asynchronously with consumers. Backed by Redis, it allows scaling up your typical applications with ease of use. | ||
@@ -48,4 +47,24 @@ | ||
:rocket: RedisSMQ v8 is coming soon! | ||
:rocket: RC's are now available for RedisSMQ v8! The v8 release will bring major improvements and new features. Some of them are: | ||
- [x] Message queue codebase refactoring and optimizations. | ||
- [x] Message storage and handling improvements. | ||
- [x] Message status which allows to retrieve, at any time, the status of a message by its ID. | ||
- [x] [Pub/Sub Delivery Model and Consumer Groups](docs/queue-delivery-models.md#pubsub-delivery-model). | ||
- [x] Message handlers sandboxing and message processing performance improvement with [Message Handler Worker Threads](docs/message-handler-worker-threads.md). | ||
- [x] Cross-system event propagation based on [EventBus](docs/event-bus.md). | ||
- [x] Better error handling aiming at reporting fatal errors to the application whenever it is possible and without crashing the main process. | ||
- [x] [ESM Modules Support](docs/esm-cjs-modules.md). | ||
Current RedisSMQ v8 RC status: | ||
- [x] RedisSMQ Common Library | ||
- [x] RedisSMQ | ||
- [ ] HTTP API (WIP) | ||
- [ ] Web UI (WIP) | ||
If you wish to get the latest updates early feel free to try RedisSMQ v8 RC. Do not hesitate to report any bug or issue if encountered. | ||
Otherwise, stay with [RedisSMQ v7](https://github.com/weyoss/redis-smq/tree/v7.2.3) if you are looking for a fully working release with an HTTP API and a Web UI. | ||
## Installation | ||
@@ -52,0 +71,0 @@ |
Sorry, the diff of this file is not supported yet
143
842899
729
15400