redis-smq 7.0.0-rc.7 → 7.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/README.md +8 -11
- package/dist/index.d.ts +0 -1
- package/dist/index.js +1 -4
- package/dist/src/common/event-listeners/event-provider.d.ts +8 -0
- package/dist/src/common/event-listeners/event-provider.js +13 -0
- package/dist/src/config/configuration.js +2 -0
- package/dist/src/config/event-listeners/event-listeners.d.ts +2 -0
- package/dist/src/config/event-listeners/event-listeners.js +14 -0
- package/dist/src/lib/base.js +0 -2
- package/dist/src/lib/consumer/consumer-message-handler/dequeue-message.d.ts +1 -1
- package/dist/src/lib/consumer/consumer-message-handler/message-handler.d.ts +4 -4
- package/dist/src/lib/consumer/consumer-message-handler/message-handler.js +11 -11
- package/dist/src/lib/consumer/consumer-message-handler/multiplexed-message-handler/multiplexed-message-handler.js +1 -1
- package/dist/src/lib/producer/producer.d.ts +3 -3
- package/dist/src/lib/producer/producer.js +7 -7
- package/dist/types/index.d.ts +15 -7
- package/package.json +2 -2
- package/dist/src/plugins/errors/plugin-registration-not-allowed-error.d.ts +0 -4
- package/dist/src/plugins/errors/plugin-registration-not-allowed-error.js +0 -11
- package/dist/src/plugins/plugins.d.ts +0 -6
- package/dist/src/plugins/plugins.js +0 -35
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
2
|
|
|
3
|
+
## 7.0.1 (2022-06-18)
|
|
4
|
+
|
|
5
|
+
* Update migrating.md (9065d5f)
|
|
6
|
+
* Update README.md (4cfb653)
|
|
7
|
+
|
|
8
|
+
## 7.0.0 (2022-06-18)
|
|
9
|
+
|
|
10
|
+
* Fix typing issue (cd8bf6a)
|
|
11
|
+
* Bump up redis-smq-common to v1.0.0 (02c353d)
|
|
12
|
+
* Update callback vs promise vs async/await benchmarks (6fca49c)
|
|
13
|
+
* Update README.md (7fbdcbf)
|
|
14
|
+
|
|
15
|
+
## 7.0.0-rc.8 (2022-06-09)
|
|
16
|
+
|
|
17
|
+
* Update docs (96a45e7)
|
|
18
|
+
* Test consumers/producers event listeners (856e12d)
|
|
19
|
+
* Implement consumers/producers event listeners (6f5d603)
|
|
20
|
+
|
|
3
21
|
## 7.0.0-rc.7 (2022-06-07)
|
|
4
22
|
|
|
5
23
|
* Update redis keys prefix (a6ca852)
|
package/README.md
CHANGED
|
@@ -15,13 +15,11 @@
|
|
|
15
15
|
|
|
16
16
|
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 application with ease of use.
|
|
17
17
|
|
|
18
|
-
> ☝ The master branch reflects the latest changes and updates. It is currently going under heavy development. To view the release documentation see [v6.4.2 docs](https://github.com/weyoss/redis-smq/tree/v6.4.2).
|
|
19
|
-
|
|
20
18
|
## Features
|
|
21
19
|
|
|
22
|
-
* **[High-performance message processing](/docs/performance.md)
|
|
23
|
-
* **[Multi-Queue Producers](#producer-class) & [Multi-Queue Consumers](#consumer-class)**: Offering
|
|
24
|
-
* **[
|
|
20
|
+
* **[High-performance message processing](/docs/performance.md)**.
|
|
21
|
+
* **[Multi-Queue Producers](#producer-class) & [Multi-Queue Consumers](#consumer-class)**: Offering flexible Producer/Consumer models, with focus on simplicity and without tons of features. This can make RedisSMQ an ideal message broker for your microservices.
|
|
22
|
+
* **[Supports both at-least-once/at-most-once delivery](/docs/api/message.md#messageprototypesetretrythreshold)**: In case of failures, while delivering or processing a message, RedisSMQ can guaranty that the message will be not lost and redelivered again. When configured to do so, RedisSMQ can also ensure that the message is delivered at-most-once.
|
|
25
23
|
* **[Message Expiration](/docs/api/message.md#messageprototypesetttl)**: A message will not be delivered if it has been in a queue for longer than a given amount of time, called TTL (time-to-live).
|
|
26
24
|
* **[Message Consumption Timeout](/docs/api/message.md#messageprototypesetconsumetimeout)**: Timeout for consuming messages.
|
|
27
25
|
* **[Queue Rate Limiting](/docs/queue-rate-limiting.md)**: Allowing you to control the rate at which the messages are consumed from a given queue.
|
|
@@ -30,11 +28,10 @@ RedisSMQ is a Node.js library for queuing messages (aka jobs) and processing the
|
|
|
30
28
|
* **[Multiplexing](/docs/multiplexing.md)**: A feature which allows message handlers to use a single redis connection to dequeue and consume messages.
|
|
31
29
|
* **[HTTP API](https://github.com/weyoss/redis-smq-monitor)**: an HTTP interface is provided to interact with the MQ.
|
|
32
30
|
* **[Web UI](https://github.com/weyoss/redis-smq-monitor-client)**: RedisSMQ can be managed also from your web browser.
|
|
33
|
-
* **[Logging](https://github.com/weyoss/redis-smq-common/blob/master/docs/logs.md)**:
|
|
31
|
+
* **[Logging](https://github.com/weyoss/redis-smq-common/blob/master/docs/logs.md)**: RedisSMQ comes with a built-in JSON logger, but can also use your application logger.
|
|
34
32
|
* **[Configurable](/docs/configuration.md)**: Many options and features can be configured.
|
|
35
|
-
* **
|
|
36
|
-
* **
|
|
37
|
-
* **Highly optimized**: Strongly-typed and implemented using pure callbacks, with small memory footprint and no memory leaks. See [callbacks vs promises vs async/await benchmarks](http://bluebirdjs.com/docs/benchmarks.html).
|
|
33
|
+
* **[Supports Multiple Redis clients](/docs/configuration.md)**: Depending on your preferences, RedisSMQ can use either [node-redis v3](https://github.com/redis/node-redis/tree/v3.1.2), [node-redis v4](https://github.com/redis/node-redis), or [ioredis](https://github.com/luin/ioredis).
|
|
34
|
+
* **[Highly optimized](https://lgtm.com/projects/g/weyoss/redis-smq/context:javascript)**: Strongly-typed and implemented using pure callbacks, with small memory footprint and no memory leaks. See [Callback vs Promise vs Async/Await benchmarks](https://gist.github.com/weyoss/24f9ecbda175d943a48cb7ec38bde821).
|
|
38
35
|
|
|
39
36
|
|
|
40
37
|
### RedisSMQ Use Case: Multi-Queue Producers & Multi-Queue Consumers
|
|
@@ -71,9 +68,9 @@ RedisSMQ is a Node.js library for queuing messages (aka jobs) and processing the
|
|
|
71
68
|
|
|
72
69
|
## What's new?
|
|
73
70
|
|
|
74
|
-
**2022.
|
|
71
|
+
**2022.06.18**
|
|
75
72
|
|
|
76
|
-
:rocket: Release v7 is
|
|
73
|
+
:rocket: Release v7 is finally ready! The RedisSMQ v7 is a refinement release with many improvements toward making
|
|
77
74
|
things more simple to use and removing any confusions that can occur while working with the message queue.
|
|
78
75
|
|
|
79
76
|
## Installation
|
package/dist/index.d.ts
CHANGED
|
@@ -4,4 +4,3 @@ export { Producer } from './src/lib/producer/producer';
|
|
|
4
4
|
export { Message } from './src/lib/message/message';
|
|
5
5
|
export { MessageManager } from './src/lib/message-manager/message-manager';
|
|
6
6
|
export { QueueManager } from './src/lib/queue-manager/queue-manager';
|
|
7
|
-
export { registerProducerPlugin, registerConsumerPlugin, } from './src/plugins/plugins';
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.QueueManager = exports.MessageManager = exports.Message = exports.Producer = exports.Consumer = exports.events = void 0;
|
|
4
4
|
var events_1 = require("./src/common/events/events");
|
|
5
5
|
Object.defineProperty(exports, "events", { enumerable: true, get: function () { return events_1.events; } });
|
|
6
6
|
var consumer_1 = require("./src/lib/consumer/consumer");
|
|
@@ -13,7 +13,4 @@ var message_manager_1 = require("./src/lib/message-manager/message-manager");
|
|
|
13
13
|
Object.defineProperty(exports, "MessageManager", { enumerable: true, get: function () { return message_manager_1.MessageManager; } });
|
|
14
14
|
var queue_manager_1 = require("./src/lib/queue-manager/queue-manager");
|
|
15
15
|
Object.defineProperty(exports, "QueueManager", { enumerable: true, get: function () { return queue_manager_1.QueueManager; } });
|
|
16
|
-
var plugins_1 = require("./src/plugins/plugins");
|
|
17
|
-
Object.defineProperty(exports, "registerProducerPlugin", { enumerable: true, get: function () { return plugins_1.registerProducerPlugin; } });
|
|
18
|
-
Object.defineProperty(exports, "registerConsumerPlugin", { enumerable: true, get: function () { return plugins_1.registerConsumerPlugin; } });
|
|
19
16
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { IEventProvider } from '../../../types';
|
|
3
|
+
import { EventEmitter } from 'events';
|
|
4
|
+
export declare class EventProvider implements IEventProvider {
|
|
5
|
+
protected eventEmitter: EventEmitter;
|
|
6
|
+
constructor(eventEmitter: EventEmitter);
|
|
7
|
+
on(event: string, listener: (...args: any[]) => void): void;
|
|
8
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EventProvider = void 0;
|
|
4
|
+
class EventProvider {
|
|
5
|
+
constructor(eventEmitter) {
|
|
6
|
+
this.eventEmitter = eventEmitter;
|
|
7
|
+
}
|
|
8
|
+
on(event, listener) {
|
|
9
|
+
this.eventEmitter.on(event, listener);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.EventProvider = EventProvider;
|
|
13
|
+
//# sourceMappingURL=event-provider.js.map
|
|
@@ -5,12 +5,14 @@ const namespace_1 = require("./namespace");
|
|
|
5
5
|
const redis_1 = require("./redis");
|
|
6
6
|
const logger_1 = require("./logger");
|
|
7
7
|
const messages_1 = require("./messages/messages");
|
|
8
|
+
const event_listeners_1 = require("./event-listeners/event-listeners");
|
|
8
9
|
function getConfiguration(config = {}) {
|
|
9
10
|
return {
|
|
10
11
|
namespace: (0, namespace_1.default)(config),
|
|
11
12
|
redis: (0, redis_1.default)(config),
|
|
12
13
|
logger: (0, logger_1.default)(config),
|
|
13
14
|
messages: (0, messages_1.default)(config),
|
|
15
|
+
eventListeners: (0, event_listeners_1.EventListeners)(config),
|
|
14
16
|
};
|
|
15
17
|
}
|
|
16
18
|
exports.getConfiguration = getConfiguration;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EventListeners = void 0;
|
|
4
|
+
const lodash_1 = require("lodash");
|
|
5
|
+
const defaultConfig = {
|
|
6
|
+
consumerEventListeners: [],
|
|
7
|
+
producerEventListeners: [],
|
|
8
|
+
};
|
|
9
|
+
function EventListeners(userConfig) {
|
|
10
|
+
const { eventListeners = {} } = userConfig;
|
|
11
|
+
return (0, lodash_1.merge)({}, defaultConfig, eventListeners);
|
|
12
|
+
}
|
|
13
|
+
exports.EventListeners = EventListeners;
|
|
14
|
+
//# sourceMappingURL=event-listeners.js.map
|
package/dist/src/lib/base.js
CHANGED
|
@@ -6,7 +6,6 @@ const events_1 = require("events");
|
|
|
6
6
|
const events_2 = require("../common/events/events");
|
|
7
7
|
const configuration_1 = require("../config/configuration");
|
|
8
8
|
const redis_smq_common_1 = require("redis-smq-common");
|
|
9
|
-
const plugins_1 = require("../plugins/plugins");
|
|
10
9
|
class Base extends events_1.EventEmitter {
|
|
11
10
|
constructor(config) {
|
|
12
11
|
super();
|
|
@@ -38,7 +37,6 @@ class Base extends events_1.EventEmitter {
|
|
|
38
37
|
this.config = (0, configuration_1.getConfiguration)(config);
|
|
39
38
|
this.logger = redis_smq_common_1.logger.getNamespacedLogger(this.config.logger, `${this.constructor.name.toLowerCase()}:${this.id}`);
|
|
40
39
|
this.registerEventsHandlers();
|
|
41
|
-
(0, plugins_1.disablePluginRegistration)();
|
|
42
40
|
}
|
|
43
41
|
registerEventsHandlers() {
|
|
44
42
|
this.on(events_2.events.GOING_UP, () => this.logger.info(`Going up...`));
|
|
@@ -13,7 +13,7 @@ export declare class DequeueMessage {
|
|
|
13
13
|
protected messageHandler: MessageHandler;
|
|
14
14
|
protected priorityQueuing: boolean;
|
|
15
15
|
constructor(messageHandler: MessageHandler, redisClient: RedisClient);
|
|
16
|
-
protected dequeueMessageWithPriority(cb: ICallback<string>): void;
|
|
16
|
+
protected dequeueMessageWithPriority(cb: ICallback<string | null>): void;
|
|
17
17
|
protected waitForMessage(cb: ICallback<string | null>): void;
|
|
18
18
|
protected dequeueMessage(cb: ICallback<string | null>): void;
|
|
19
19
|
dequeue(): void;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
import {
|
|
2
|
+
import { IEventListener, IRequiredConfig, TConsumerMessageHandler, TQueueParams } from '../../../../types';
|
|
3
3
|
import { EventEmitter } from 'events';
|
|
4
4
|
import { TCleanUpStatus } from './processing-queue';
|
|
5
5
|
import { DequeueMessage } from './dequeue-message';
|
|
@@ -19,12 +19,12 @@ export declare class MessageHandler extends EventEmitter {
|
|
|
19
19
|
protected dequeueMessage: DequeueMessage;
|
|
20
20
|
protected consumeMessage: ConsumeMessage;
|
|
21
21
|
protected handler: TConsumerMessageHandler;
|
|
22
|
-
protected
|
|
22
|
+
protected eventListeners: IEventListener[];
|
|
23
23
|
constructor(consumer: Consumer, queue: TQueueParams, handler: TConsumerMessageHandler, dequeueRedisClient: RedisClient, sharedRedisClient: RedisClient, logger: ICompatibleLogger);
|
|
24
24
|
protected registerEventsHandlers(): void;
|
|
25
|
-
protected
|
|
25
|
+
protected initEventListeners(): void;
|
|
26
26
|
protected cleanUp(cb: ICallback<void>): void;
|
|
27
|
-
protected
|
|
27
|
+
protected tearDownEventListeners(cb: ICallback<void>): void;
|
|
28
28
|
handleError(err: Error): void;
|
|
29
29
|
dequeue(): void;
|
|
30
30
|
run(cb: ICallback<void>): void;
|
|
@@ -8,13 +8,13 @@ const consumer_queues_1 = require("../consumer-queues");
|
|
|
8
8
|
const processing_queue_1 = require("./processing-queue");
|
|
9
9
|
const dequeue_message_1 = require("./dequeue-message");
|
|
10
10
|
const consume_message_1 = require("./consume-message");
|
|
11
|
-
const plugins_1 = require("../../../plugins/plugins");
|
|
12
11
|
const redis_smq_common_1 = require("redis-smq-common");
|
|
13
12
|
const retry_message_1 = require("./retry-message");
|
|
13
|
+
const event_provider_1 = require("../../../common/event-listeners/event-provider");
|
|
14
14
|
class MessageHandler extends events_2.EventEmitter {
|
|
15
15
|
constructor(consumer, queue, handler, dequeueRedisClient, sharedRedisClient, logger) {
|
|
16
16
|
super();
|
|
17
|
-
this.
|
|
17
|
+
this.eventListeners = [];
|
|
18
18
|
this.id = (0, uuid_1.v4)();
|
|
19
19
|
this.consumer = consumer;
|
|
20
20
|
this.consumerId = consumer.getId();
|
|
@@ -27,7 +27,7 @@ class MessageHandler extends events_2.EventEmitter {
|
|
|
27
27
|
this.dequeueMessage = new dequeue_message_1.DequeueMessage(this, dequeueRedisClient);
|
|
28
28
|
this.consumeMessage = new consume_message_1.ConsumeMessage(this, dequeueRedisClient, logger);
|
|
29
29
|
this.registerEventsHandlers();
|
|
30
|
-
this.
|
|
30
|
+
this.initEventListeners();
|
|
31
31
|
}
|
|
32
32
|
registerEventsHandlers() {
|
|
33
33
|
this.on(events_1.events.UP, () => {
|
|
@@ -58,10 +58,10 @@ class MessageHandler extends events_2.EventEmitter {
|
|
|
58
58
|
});
|
|
59
59
|
this.on(events_1.events.DOWN, () => this.logger.info('Down.'));
|
|
60
60
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
const plugin = new ctor(this.sharedRedisClient, this.queue, this
|
|
64
|
-
this.
|
|
61
|
+
initEventListeners() {
|
|
62
|
+
this.getConfig().eventListeners.consumerEventListeners.forEach((ctor) => {
|
|
63
|
+
const plugin = new ctor(this.sharedRedisClient, this.consumerId, this.queue, new event_provider_1.EventProvider(this));
|
|
64
|
+
this.eventListeners.push(plugin);
|
|
65
65
|
});
|
|
66
66
|
}
|
|
67
67
|
cleanUp(cb) {
|
|
@@ -78,12 +78,12 @@ class MessageHandler extends events_2.EventEmitter {
|
|
|
78
78
|
cb();
|
|
79
79
|
});
|
|
80
80
|
}
|
|
81
|
-
|
|
82
|
-
redis_smq_common_1.async.each(this.
|
|
81
|
+
tearDownEventListeners(cb) {
|
|
82
|
+
redis_smq_common_1.async.each(this.eventListeners, (listener, index, done) => listener.quit(done), (err) => {
|
|
83
83
|
if (err)
|
|
84
84
|
cb(err);
|
|
85
85
|
else {
|
|
86
|
-
this.
|
|
86
|
+
this.eventListeners = [];
|
|
87
87
|
cb();
|
|
88
88
|
}
|
|
89
89
|
});
|
|
@@ -113,7 +113,7 @@ class MessageHandler extends events_2.EventEmitter {
|
|
|
113
113
|
this.powerManager.goingDown();
|
|
114
114
|
redis_smq_common_1.async.waterfall([
|
|
115
115
|
(cb) => this.dequeueMessage.quit(cb),
|
|
116
|
-
(cb) => this.
|
|
116
|
+
(cb) => this.tearDownEventListeners(cb),
|
|
117
117
|
(cb) => this.cleanUp(cb),
|
|
118
118
|
(cb) => this.dequeueRedisClient.halt(cb),
|
|
119
119
|
], (err) => {
|
|
@@ -23,7 +23,7 @@ class MultiplexedMessageHandler extends message_handler_1.MessageHandler {
|
|
|
23
23
|
this.powerManager.goingDown();
|
|
24
24
|
redis_smq_common_1.async.waterfall([
|
|
25
25
|
(cb) => this.dequeueMessage.quit(cb),
|
|
26
|
-
(cb) => this.
|
|
26
|
+
(cb) => this.tearDownEventListeners(cb),
|
|
27
27
|
(cb) => this.cleanUp(cb),
|
|
28
28
|
], (err) => {
|
|
29
29
|
if (err)
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { IConfig,
|
|
1
|
+
import { IConfig, IEventListener } from '../../../types';
|
|
2
2
|
import { Message } from '../message/message';
|
|
3
3
|
import { Base } from '../base';
|
|
4
4
|
import { RedisClient } from 'redis-smq-common';
|
|
5
5
|
import { ICallback, TUnaryFunction } from 'redis-smq-common/dist/types';
|
|
6
6
|
export declare class Producer extends Base {
|
|
7
|
-
protected
|
|
7
|
+
protected eventListeners: IEventListener[];
|
|
8
8
|
constructor(config?: IConfig);
|
|
9
|
-
protected
|
|
9
|
+
protected initEventListeners: (cb: ICallback<void>) => void;
|
|
10
10
|
protected goingUp(): TUnaryFunction<ICallback<void>>[];
|
|
11
11
|
protected goingDown(): TUnaryFunction<ICallback<void>>[];
|
|
12
12
|
protected enqueue(redisClient: RedisClient, message: Message, cb: ICallback<void>): void;
|
|
@@ -6,33 +6,33 @@ const base_1 = require("../base");
|
|
|
6
6
|
const redis_smq_common_1 = require("redis-smq-common");
|
|
7
7
|
const redis_keys_1 = require("../../common/redis-keys/redis-keys");
|
|
8
8
|
const message_not_published_error_1 = require("./errors/message-not-published.error");
|
|
9
|
-
const plugins_1 = require("../../plugins/plugins");
|
|
10
9
|
const message_queue_required_error_1 = require("./errors/message-queue-required.error");
|
|
11
10
|
const message_already_published_error_1 = require("./errors/message-already-published.error");
|
|
12
11
|
const redis_client_1 = require("../../common/redis-client/redis-client");
|
|
13
12
|
const schedule_message_1 = require("./schedule-message");
|
|
14
13
|
const queue_1 = require("../queue-manager/queue");
|
|
14
|
+
const event_provider_1 = require("../../common/event-listeners/event-provider");
|
|
15
15
|
class Producer extends base_1.Base {
|
|
16
16
|
constructor(config = {}) {
|
|
17
17
|
super(config);
|
|
18
|
-
this.
|
|
19
|
-
this.
|
|
18
|
+
this.eventListeners = [];
|
|
19
|
+
this.initEventListeners = (cb) => {
|
|
20
20
|
const sharedRedisClient = this.getSharedRedisClient();
|
|
21
|
-
|
|
21
|
+
this.config.eventListeners.producerEventListeners.forEach((ctor) => this.eventListeners.push(new ctor(sharedRedisClient, this.id, new event_provider_1.EventProvider(this))));
|
|
22
22
|
cb();
|
|
23
23
|
};
|
|
24
24
|
this.run();
|
|
25
25
|
}
|
|
26
26
|
goingUp() {
|
|
27
|
-
return super.goingUp().concat([this.
|
|
27
|
+
return super.goingUp().concat([this.initEventListeners]);
|
|
28
28
|
}
|
|
29
29
|
goingDown() {
|
|
30
30
|
return [
|
|
31
|
-
(cb) => redis_smq_common_1.async.each(this.
|
|
31
|
+
(cb) => redis_smq_common_1.async.each(this.eventListeners, (listener, idx, done) => listener.quit(done), (err) => {
|
|
32
32
|
if (err)
|
|
33
33
|
cb(err);
|
|
34
34
|
else {
|
|
35
|
-
this.
|
|
35
|
+
this.eventListeners = [];
|
|
36
36
|
cb();
|
|
37
37
|
}
|
|
38
38
|
}),
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { Message } from '../src/lib/message/message';
|
|
3
3
|
import { redisKeys } from '../src/common/redis-keys/redis-keys';
|
|
4
|
-
import { Consumer } from '../src/lib/consumer/consumer';
|
|
5
|
-
import { Producer } from '../src/lib/producer/producer';
|
|
6
4
|
import { ICallback, TLoggerConfig, TRedisConfig } from 'redis-smq-common/dist/types';
|
|
7
5
|
import { RedisClient } from 'redis-smq-common';
|
|
6
|
+
export interface IEventProvider {
|
|
7
|
+
on(event: string, listener: (...args: any[]) => void): void;
|
|
8
|
+
}
|
|
9
|
+
export interface IEventListener {
|
|
10
|
+
quit(cb: ICallback<void>): void;
|
|
11
|
+
}
|
|
12
|
+
export declare type TConsumerEventListenerConstructor = new (redisClient: RedisClient, consumerId: string, queue: TQueueParams, eventProvider: IEventProvider) => IEventListener;
|
|
13
|
+
export declare type TProducerEventListenerConstructor = new (redisClient: RedisClient, producerId: string, eventProvider: IEventProvider) => IEventListener;
|
|
8
14
|
export interface IMessagesConfig {
|
|
9
15
|
store?: boolean | IMessagesConfigStore;
|
|
10
16
|
}
|
|
@@ -16,11 +22,16 @@ export interface IMessagesConfigStore {
|
|
|
16
22
|
acknowledged?: boolean | IMessagesConfigStoreOptions;
|
|
17
23
|
deadLettered?: boolean | IMessagesConfigStoreOptions;
|
|
18
24
|
}
|
|
25
|
+
export interface IEventListenersConfig {
|
|
26
|
+
consumerEventListeners?: TConsumerEventListenerConstructor[];
|
|
27
|
+
producerEventListeners?: TProducerEventListenerConstructor[];
|
|
28
|
+
}
|
|
19
29
|
export interface IConfig {
|
|
20
30
|
redis?: TRedisConfig;
|
|
21
31
|
namespace?: string;
|
|
22
32
|
logger?: TLoggerConfig;
|
|
23
33
|
messages?: IMessagesConfig;
|
|
34
|
+
eventListeners?: IEventListenersConfig;
|
|
24
35
|
}
|
|
25
36
|
export interface IRequiredStoreMessagesParams extends Required<IMessagesConfigStoreOptions> {
|
|
26
37
|
store: boolean;
|
|
@@ -29,10 +40,12 @@ export interface IRequiredMessagesConfigStore {
|
|
|
29
40
|
acknowledged: IRequiredStoreMessagesParams;
|
|
30
41
|
deadLettered: IRequiredStoreMessagesParams;
|
|
31
42
|
}
|
|
43
|
+
export declare type TRequiredEventListenersConfig = Required<IEventListenersConfig>;
|
|
32
44
|
export interface IRequiredConfig extends Required<IConfig> {
|
|
33
45
|
messages: {
|
|
34
46
|
store: IRequiredMessagesConfigStore;
|
|
35
47
|
};
|
|
48
|
+
eventListeners: TRequiredEventListenersConfig;
|
|
36
49
|
}
|
|
37
50
|
export declare type TPaginatedResponse<T> = {
|
|
38
51
|
total: number;
|
|
@@ -126,11 +139,6 @@ export declare type TMessageMetadataJSON = {
|
|
|
126
139
|
nextScheduledDelay: number;
|
|
127
140
|
nextRetryDelay: number;
|
|
128
141
|
};
|
|
129
|
-
export interface IPlugin {
|
|
130
|
-
quit(cb: ICallback<void>): void;
|
|
131
|
-
}
|
|
132
|
-
export declare type TConsumerPluginConstructor = new (redisClient: RedisClient, queue: TQueueParams, consumer: Consumer) => IPlugin;
|
|
133
|
-
export declare type TProducerPluginConstructor = new (redisClient: RedisClient, producer: Producer) => IPlugin;
|
|
134
142
|
export declare type TMessageConsumeOptions = {
|
|
135
143
|
ttl: number;
|
|
136
144
|
retryThreshold: number;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "redis-smq",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.1",
|
|
4
4
|
"description": "A simple high-performance Redis message queue for Node.js.",
|
|
5
5
|
"author": "Weyoss <weyoss@protonmail.com>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"bluebird": "3.7.2",
|
|
37
37
|
"cron-parser": "3.5.0",
|
|
38
38
|
"lodash": "4.17.21",
|
|
39
|
-
"redis-smq-common": "1.0.0
|
|
39
|
+
"redis-smq-common": "1.0.0",
|
|
40
40
|
"uuid": "8.3.2"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PluginRegistrationNotAllowedError = void 0;
|
|
4
|
-
const redis_smq_common_1 = require("redis-smq-common");
|
|
5
|
-
class PluginRegistrationNotAllowedError extends redis_smq_common_1.errors.RedisSMQError {
|
|
6
|
-
constructor(msg = 'Plugin registration is only allowed before starting a consumer or a producer') {
|
|
7
|
-
super(msg);
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
exports.PluginRegistrationNotAllowedError = PluginRegistrationNotAllowedError;
|
|
11
|
-
//# sourceMappingURL=plugin-registration-not-allowed-error.js.map
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { TConsumerPluginConstructor, TProducerPluginConstructor } from '../../types';
|
|
2
|
-
export declare function registerConsumerPlugin(PluginConstructor: TConsumerPluginConstructor): void;
|
|
3
|
-
export declare function registerProducerPlugin(PluginConstructor: TProducerPluginConstructor): void;
|
|
4
|
-
export declare function getConsumerPlugins(): TConsumerPluginConstructor[];
|
|
5
|
-
export declare function getProducerPlugins(): TProducerPluginConstructor[];
|
|
6
|
-
export declare function disablePluginRegistration(): void;
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.disablePluginRegistration = exports.getProducerPlugins = exports.getConsumerPlugins = exports.registerProducerPlugin = exports.registerConsumerPlugin = void 0;
|
|
4
|
-
const plugin_registration_not_allowed_error_1 = require("./errors/plugin-registration-not-allowed-error");
|
|
5
|
-
let disabledPluginRegistration = false;
|
|
6
|
-
const consumerPlugins = new Set();
|
|
7
|
-
const producerPlugins = new Set();
|
|
8
|
-
function registerConsumerPlugin(PluginConstructor) {
|
|
9
|
-
if (disabledPluginRegistration) {
|
|
10
|
-
throw new plugin_registration_not_allowed_error_1.PluginRegistrationNotAllowedError();
|
|
11
|
-
}
|
|
12
|
-
consumerPlugins.add(PluginConstructor);
|
|
13
|
-
}
|
|
14
|
-
exports.registerConsumerPlugin = registerConsumerPlugin;
|
|
15
|
-
function registerProducerPlugin(PluginConstructor) {
|
|
16
|
-
if (disabledPluginRegistration) {
|
|
17
|
-
throw new plugin_registration_not_allowed_error_1.PluginRegistrationNotAllowedError();
|
|
18
|
-
}
|
|
19
|
-
producerPlugins.add(PluginConstructor);
|
|
20
|
-
}
|
|
21
|
-
exports.registerProducerPlugin = registerProducerPlugin;
|
|
22
|
-
function getConsumerPlugins() {
|
|
23
|
-
return [...consumerPlugins];
|
|
24
|
-
}
|
|
25
|
-
exports.getConsumerPlugins = getConsumerPlugins;
|
|
26
|
-
function getProducerPlugins() {
|
|
27
|
-
return [...producerPlugins];
|
|
28
|
-
}
|
|
29
|
-
exports.getProducerPlugins = getProducerPlugins;
|
|
30
|
-
function disablePluginRegistration() {
|
|
31
|
-
if (!disabledPluginRegistration)
|
|
32
|
-
disabledPluginRegistration = true;
|
|
33
|
-
}
|
|
34
|
-
exports.disablePluginRegistration = disablePluginRegistration;
|
|
35
|
-
//# sourceMappingURL=plugins.js.map
|