redis-smq 8.0.0-rc.11 → 8.0.0-rc.13
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 +28 -0
- package/README.md +1 -1
- package/dist/index.cjs +54 -51
- package/dist/index.d.cts +11 -20
- package/dist/index.d.ts +11 -20
- package/dist/index.js +54 -51
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,33 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
|
+
## [8.0.0-rc.13](https://github.com/weyoss/redis-smq/compare/v8.0.0-rc.12...v8.0.0-rc.13) (2023-12-23)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### ⚠ BREAKING CHANGES
|
|
7
|
+
|
|
8
|
+
* **event-listeners:** unify consumer/producer event listeners
|
|
9
|
+
|
|
10
|
+
### Documentation
|
|
11
|
+
|
|
12
|
+
* **event-listeners:** update documentation ([71100d3](https://github.com/weyoss/redis-smq/commit/71100d3aa94a61fb8ece86e439f0b120b66a6cab))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Codebase Refactoring
|
|
16
|
+
|
|
17
|
+
* **event-listeners:** unify consumer/producer event listeners ([9e1a181](https://github.com/weyoss/redis-smq/commit/9e1a1811dd841d4329f0ee14e979d2770a7a6358))
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Tests
|
|
21
|
+
|
|
22
|
+
* **event-listeners:** unify consumer/producer event listeners ([2d14a07](https://github.com/weyoss/redis-smq/commit/2d14a077feda98933fb6c038bea5a33ad8d5f610))
|
|
23
|
+
|
|
24
|
+
## [8.0.0-rc.12](https://github.com/weyoss/redis-smq/compare/v8.0.0-rc.11...v8.0.0-rc.12) (2023-12-18)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
### Misc
|
|
28
|
+
|
|
29
|
+
* update logo ([9bd373e](https://github.com/weyoss/redis-smq/commit/9bd373e693c57c8e18dddb5b0899c710e6de9492))
|
|
30
|
+
|
|
3
31
|
## [8.0.0-rc.11](https://github.com/weyoss/redis-smq/compare/v8.0.0-rc.10...v8.0.0-rc.11) (2023-12-18)
|
|
4
32
|
|
|
5
33
|
|
package/README.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<div align="center" style="text-align: center">
|
|
2
|
-
<p><a href="https://github.com/weyoss/redis-smq"><img alt="RedisSMQ" src="./logo.png" /></a></p>
|
|
2
|
+
<p><a href="https://github.com/weyoss/redis-smq"><img alt="RedisSMQ" src="./logo.png?v=202312182134" /></a></p>
|
|
3
3
|
<p>A simple high-performance Redis message queue for Node.js.</p>
|
|
4
4
|
</div>
|
|
5
5
|
|
package/dist/index.cjs
CHANGED
|
@@ -339,14 +339,10 @@ function Messages(userConfig) {
|
|
|
339
339
|
}
|
|
340
340
|
|
|
341
341
|
// src/config/event-listeners/event-listeners.ts
|
|
342
|
-
var
|
|
343
|
-
var defaultConfig4 = {
|
|
344
|
-
consumerEventListeners: [],
|
|
345
|
-
producerEventListeners: []
|
|
346
|
-
};
|
|
342
|
+
var defaultConfig4 = [];
|
|
347
343
|
function EventListeners(userConfig) {
|
|
348
|
-
const { eventListeners =
|
|
349
|
-
return
|
|
344
|
+
const { eventListeners = [] } = userConfig;
|
|
345
|
+
return [...defaultConfig4, ...eventListeners];
|
|
350
346
|
}
|
|
351
347
|
|
|
352
348
|
// src/config/configuration.ts
|
|
@@ -408,11 +404,11 @@ function _destroyCommonRedisClient(cb) {
|
|
|
408
404
|
}
|
|
409
405
|
|
|
410
406
|
// types/consumer/consume-message.ts
|
|
411
|
-
var EConsumeMessageDeadLetterCause = /* @__PURE__ */ ((
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
return
|
|
407
|
+
var EConsumeMessageDeadLetterCause = /* @__PURE__ */ ((EConsumeMessageDeadLetterCause2) => {
|
|
408
|
+
EConsumeMessageDeadLetterCause2[EConsumeMessageDeadLetterCause2["TTL_EXPIRED"] = 0] = "TTL_EXPIRED";
|
|
409
|
+
EConsumeMessageDeadLetterCause2[EConsumeMessageDeadLetterCause2["RETRY_THRESHOLD_EXCEEDED"] = 1] = "RETRY_THRESHOLD_EXCEEDED";
|
|
410
|
+
EConsumeMessageDeadLetterCause2[EConsumeMessageDeadLetterCause2["PERIODIC_MESSAGE"] = 2] = "PERIODIC_MESSAGE";
|
|
411
|
+
return EConsumeMessageDeadLetterCause2;
|
|
416
412
|
})(EConsumeMessageDeadLetterCause || {});
|
|
417
413
|
var EConsumeMessageUnacknowledgedCause = /* @__PURE__ */ ((EConsumeMessageUnacknowledgedCause3) => {
|
|
418
414
|
EConsumeMessageUnacknowledgedCause3[EConsumeMessageUnacknowledgedCause3["TIMEOUT"] = 0] = "TIMEOUT";
|
|
@@ -788,6 +784,10 @@ var Base = class extends import_redis_smq_common11.EventEmitter {
|
|
|
788
784
|
} else
|
|
789
785
|
cb();
|
|
790
786
|
};
|
|
787
|
+
this.initEventListeners = (cb) => {
|
|
788
|
+
const { eventListeners } = Configuration.getSetConfig();
|
|
789
|
+
this.registerEventListeners(eventListeners, cb);
|
|
790
|
+
};
|
|
791
791
|
this.tearDownEventListeners = (cb) => {
|
|
792
792
|
import_redis_smq_common11.async.each(
|
|
793
793
|
this.eventListeners,
|
|
@@ -818,7 +818,7 @@ var Base = class extends import_redis_smq_common11.EventEmitter {
|
|
|
818
818
|
this.on("error", (err) => this.handleError(err));
|
|
819
819
|
}
|
|
820
820
|
goingUp() {
|
|
821
|
-
return [this.setUpSharedRedisClient];
|
|
821
|
+
return [this.setUpSharedRedisClient, this.initEventListeners];
|
|
822
822
|
}
|
|
823
823
|
up(cb) {
|
|
824
824
|
this.powerSwitch.commit();
|
|
@@ -843,20 +843,14 @@ var Base = class extends import_redis_smq_common11.EventEmitter {
|
|
|
843
843
|
Ctors,
|
|
844
844
|
(ctor, key, done) => {
|
|
845
845
|
const instance = new ctor();
|
|
846
|
-
instance.init(
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
if (err)
|
|
853
|
-
done(err);
|
|
854
|
-
else {
|
|
855
|
-
this.eventListeners.push(instance);
|
|
856
|
-
done();
|
|
857
|
-
}
|
|
846
|
+
instance.init((err) => {
|
|
847
|
+
if (err)
|
|
848
|
+
done(err);
|
|
849
|
+
else {
|
|
850
|
+
this.eventListeners.push(instance);
|
|
851
|
+
done();
|
|
858
852
|
}
|
|
859
|
-
);
|
|
853
|
+
});
|
|
860
854
|
},
|
|
861
855
|
cb
|
|
862
856
|
);
|
|
@@ -2931,20 +2925,20 @@ var ConsumeMessage = class {
|
|
|
2931
2925
|
const consumerId = this.messageHandler.getConsumerId();
|
|
2932
2926
|
this.messageHandler.emit(
|
|
2933
2927
|
"messageUnacknowledged",
|
|
2934
|
-
cause,
|
|
2935
2928
|
messageId,
|
|
2936
2929
|
queue,
|
|
2937
2930
|
messageHandlerId,
|
|
2938
|
-
consumerId
|
|
2931
|
+
consumerId,
|
|
2932
|
+
cause
|
|
2939
2933
|
);
|
|
2940
2934
|
if (reply.action === 0 /* DEAD_LETTER */) {
|
|
2941
2935
|
this.messageHandler.emit(
|
|
2942
2936
|
"messageDeadLettered",
|
|
2943
|
-
reply.deadLetterCause,
|
|
2944
2937
|
messageId,
|
|
2945
2938
|
queue,
|
|
2946
2939
|
messageHandlerId,
|
|
2947
|
-
consumerId
|
|
2940
|
+
consumerId,
|
|
2941
|
+
reply.deadLetterCause
|
|
2948
2942
|
);
|
|
2949
2943
|
} else if (reply.action === 2 /* DELAY */) {
|
|
2950
2944
|
this.messageHandler.emit(
|
|
@@ -3065,7 +3059,7 @@ var MessageHandler = class extends import_redis_smq_common27.EventEmitter {
|
|
|
3065
3059
|
});
|
|
3066
3060
|
this.on(
|
|
3067
3061
|
"messageDeadLettered",
|
|
3068
|
-
(
|
|
3062
|
+
(messageId, queue, messageHandlerId, consumerId, cause) => {
|
|
3069
3063
|
this.logger.info(
|
|
3070
3064
|
`Message (ID ${messageId}) dead-lettered (cause ${cause})`
|
|
3071
3065
|
);
|
|
@@ -3073,7 +3067,7 @@ var MessageHandler = class extends import_redis_smq_common27.EventEmitter {
|
|
|
3073
3067
|
);
|
|
3074
3068
|
this.on(
|
|
3075
3069
|
"messageUnacknowledged",
|
|
3076
|
-
(
|
|
3070
|
+
(messageId, queue, messageHandlerId, consumerId, cause) => {
|
|
3077
3071
|
this.logger.info(
|
|
3078
3072
|
`Message (ID ${messageId}) unacknowledged (cause ${cause})`
|
|
3079
3073
|
);
|
|
@@ -3940,12 +3934,6 @@ var Consumer = class extends Base {
|
|
|
3940
3934
|
this.workerRunner.addWorker(new publish_scheduled_worker_default(redisClient2, true));
|
|
3941
3935
|
this.workerRunner.run();
|
|
3942
3936
|
};
|
|
3943
|
-
this.initConsumerEventListeners = (cb) => {
|
|
3944
|
-
this.registerEventListeners(
|
|
3945
|
-
Configuration.getSetConfig().eventListeners.consumerEventListeners,
|
|
3946
|
-
cb
|
|
3947
|
-
);
|
|
3948
|
-
};
|
|
3949
3937
|
this.tearDownConsumerWorkers = (cb) => {
|
|
3950
3938
|
if (this.workerRunner) {
|
|
3951
3939
|
this.workerRunner.quit(() => {
|
|
@@ -3972,10 +3960,30 @@ var Consumer = class extends Base {
|
|
|
3972
3960
|
this.messageHandlerRunner = useMultiplexing ? new MultiplexedMessageHandlerRunner(this, nsLogger) : new MessageHandlerRunner(this, nsLogger);
|
|
3973
3961
|
this.redisKeys = redisKeys.getConsumerKeys(this.getId());
|
|
3974
3962
|
}
|
|
3963
|
+
registerSystemEventListeners() {
|
|
3964
|
+
super.registerSystemEventListeners();
|
|
3965
|
+
this.on("messageAcknowledged", (...args) => {
|
|
3966
|
+
if (this.eventListeners.length)
|
|
3967
|
+
this.eventListeners.forEach(
|
|
3968
|
+
(i) => i.emit("messageAcknowledged", ...args)
|
|
3969
|
+
);
|
|
3970
|
+
});
|
|
3971
|
+
this.on("messageUnacknowledged", (...args) => {
|
|
3972
|
+
if (this.eventListeners.length)
|
|
3973
|
+
this.eventListeners.forEach(
|
|
3974
|
+
(i) => i.emit("messageUnacknowledged", ...args)
|
|
3975
|
+
);
|
|
3976
|
+
});
|
|
3977
|
+
this.on("messageDeadLettered", (...args) => {
|
|
3978
|
+
if (this.eventListeners.length)
|
|
3979
|
+
this.eventListeners.forEach(
|
|
3980
|
+
(i) => i.emit("messageDeadLettered", ...args)
|
|
3981
|
+
);
|
|
3982
|
+
});
|
|
3983
|
+
}
|
|
3975
3984
|
goingUp() {
|
|
3976
3985
|
return super.goingUp().concat([
|
|
3977
3986
|
this.setUpHeartbeat,
|
|
3978
|
-
this.initConsumerEventListeners,
|
|
3979
3987
|
this.runMessageHandlers,
|
|
3980
3988
|
this.setUpConsumerWorkers
|
|
3981
3989
|
]);
|
|
@@ -4061,17 +4069,12 @@ function _scheduleMessage(mixed, message, cb) {
|
|
|
4061
4069
|
|
|
4062
4070
|
// src/lib/producer/producer.ts
|
|
4063
4071
|
var Producer = class extends Base {
|
|
4064
|
-
|
|
4065
|
-
super(
|
|
4066
|
-
this.
|
|
4067
|
-
this.
|
|
4068
|
-
|
|
4069
|
-
|
|
4070
|
-
);
|
|
4071
|
-
};
|
|
4072
|
-
}
|
|
4073
|
-
goingUp() {
|
|
4074
|
-
return super.goingUp().concat([this.initProducerEventListeners]);
|
|
4072
|
+
registerSystemEventListeners() {
|
|
4073
|
+
super.registerSystemEventListeners();
|
|
4074
|
+
this.on("messagePublished", (...args) => {
|
|
4075
|
+
if (this.eventListeners.length)
|
|
4076
|
+
this.eventListeners.forEach((i) => i.emit("messagePublished", ...args));
|
|
4077
|
+
});
|
|
4075
4078
|
}
|
|
4076
4079
|
enqueue(redisClient2, queue, message, cb) {
|
|
4077
4080
|
var _a;
|
|
@@ -4141,7 +4144,7 @@ var Producer = class extends Base {
|
|
|
4141
4144
|
cb(err);
|
|
4142
4145
|
else {
|
|
4143
4146
|
this.logger.info(`Message (ID ${messageId}) has been published.`);
|
|
4144
|
-
this.emit("messagePublished", messageId, queue);
|
|
4147
|
+
this.emit("messagePublished", messageId, queue, this.id);
|
|
4145
4148
|
cb(null, messageId);
|
|
4146
4149
|
}
|
|
4147
4150
|
});
|
package/dist/index.d.cts
CHANGED
|
@@ -387,29 +387,21 @@ declare enum EConsumeMessageUnacknowledgedCause {
|
|
|
387
387
|
|
|
388
388
|
type TRedisSMQEvent = TEvent & {
|
|
389
389
|
heartbeatTick: (timestamp: number, consumerId: string, heartbeatPayload: IConsumerHeartbeat) => void;
|
|
390
|
-
messagePublished: (messageId: string, queue: IQueueParams) => void;
|
|
390
|
+
messagePublished: (messageId: string, queue: IQueueParams, producerId: string) => void;
|
|
391
391
|
messageAcknowledged: (messageId: string, queue: IQueueParams, messageHandlerId: string, consumerId: string) => void;
|
|
392
|
-
messageUnacknowledged: (
|
|
393
|
-
messageDeadLettered: (
|
|
392
|
+
messageUnacknowledged: (messageId: string, queue: IQueueParams, messageHandlerId: string, consumerId: string, cause: EConsumeMessageUnacknowledgedCause) => void;
|
|
393
|
+
messageDeadLettered: (messageId: string, queue: IQueueParams, messageHandlerId: string, consumerId: string, cause: EConsumeMessageDeadLetterCause) => void;
|
|
394
394
|
messageReceived: (messageId: string, queue: IQueueParams, consumerId: string) => void;
|
|
395
395
|
messageRequeued: (messageId: string, queue: IQueueParams, messageHandlerId: string, consumerId: string) => void;
|
|
396
396
|
messageDelayed: (messageId: string, queue: IQueueParams, messageHandlerId: string, consumerId: string) => void;
|
|
397
397
|
};
|
|
398
398
|
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
instanceId: string;
|
|
402
|
-
};
|
|
403
|
-
interface IEventListener {
|
|
404
|
-
init(args: TEventListenerInitArgs, cb: ICallback<void>): void;
|
|
399
|
+
interface IEventListener extends EventEmitter<TRedisSMQEvent> {
|
|
400
|
+
init(cb: ICallback<void>): void;
|
|
405
401
|
quit(cb: ICallback<void>): void;
|
|
406
402
|
}
|
|
407
403
|
|
|
408
|
-
|
|
409
|
-
consumerEventListeners?: (new () => IEventListener)[];
|
|
410
|
-
producerEventListeners?: (new () => IEventListener)[];
|
|
411
|
-
}
|
|
412
|
-
type IEventListenersConfigRequired = Required<IEventListenersConfig>;
|
|
404
|
+
type TEventListenersConfig = (new () => IEventListener)[];
|
|
413
405
|
|
|
414
406
|
type TTopicParams = {
|
|
415
407
|
topic: string;
|
|
@@ -470,13 +462,12 @@ interface IRedisSMQConfig {
|
|
|
470
462
|
namespace?: string;
|
|
471
463
|
logger?: ILoggerConfig;
|
|
472
464
|
messages?: IMessagesConfig;
|
|
473
|
-
eventListeners?:
|
|
465
|
+
eventListeners?: TEventListenersConfig;
|
|
474
466
|
}
|
|
475
467
|
interface IRedisSMQConfigRequired extends Required<IRedisSMQConfig> {
|
|
476
468
|
messages: {
|
|
477
469
|
store: IMessagesConfigStorageRequired;
|
|
478
470
|
};
|
|
479
|
-
eventListeners: IEventListenersConfigRequired;
|
|
480
471
|
}
|
|
481
472
|
|
|
482
473
|
declare class ConsumerError extends RedisSMQError {
|
|
@@ -587,6 +578,7 @@ declare abstract class Base extends EventEmitter<TRedisSMQEvent> {
|
|
|
587
578
|
constructor();
|
|
588
579
|
protected setUpSharedRedisClient: (cb: ICallback<void>) => void;
|
|
589
580
|
protected tearDownSharedRedisClient: (cb: ICallback<void>) => void;
|
|
581
|
+
protected initEventListeners: (cb: ICallback<void>) => void;
|
|
590
582
|
protected registerSystemEventListeners(): void;
|
|
591
583
|
protected goingUp(): TFunction[];
|
|
592
584
|
protected up(cb?: ICallback<boolean>): void;
|
|
@@ -696,10 +688,10 @@ declare class Consumer extends Base {
|
|
|
696
688
|
protected heartbeat: ConsumerHeartbeat | null;
|
|
697
689
|
protected workerRunner: WorkerRunner | null;
|
|
698
690
|
constructor(useMultiplexing?: boolean);
|
|
691
|
+
protected registerSystemEventListeners(): void;
|
|
699
692
|
protected setUpHeartbeat: (cb: ICallback<void>) => void;
|
|
700
693
|
protected tearDownHeartbeat: (cb: ICallback<void>) => void;
|
|
701
694
|
protected setUpConsumerWorkers: (cb: ICallback<void>) => void;
|
|
702
|
-
protected initConsumerEventListeners: (cb: ICallback<void>) => void;
|
|
703
695
|
protected tearDownConsumerWorkers: (cb: ICallback<void>) => void;
|
|
704
696
|
protected runMessageHandlers: (cb: ICallback<void>) => void;
|
|
705
697
|
protected shutdownMessageHandlers: (cb: ICallback<void>) => void;
|
|
@@ -711,8 +703,7 @@ declare class Consumer extends Base {
|
|
|
711
703
|
}
|
|
712
704
|
|
|
713
705
|
declare class Producer extends Base {
|
|
714
|
-
protected
|
|
715
|
-
protected goingUp(): TUnaryFunction<ICallback<void>>[];
|
|
706
|
+
protected registerSystemEventListeners(): void;
|
|
716
707
|
protected enqueue(redisClient: RedisClient, queue: IQueueParams, message: MessageEnvelope, cb: ICallback<void>): void;
|
|
717
708
|
protected produceMessage(redisClient: RedisClient, message: MessageEnvelope, queue: IQueueParams, cb: ICallback<string>): void;
|
|
718
709
|
produce(msg: ProducibleMessage, cb: ICallback<string[]>): void;
|
|
@@ -864,4 +855,4 @@ declare class Configuration {
|
|
|
864
855
|
|
|
865
856
|
declare function disconnect(cb: ICallback<void>): void;
|
|
866
857
|
|
|
867
|
-
export { Configuration, Consumer, ConsumerError, ConsumerMessageHandlerAlreadyExistsError, EConsumeMessageDeadLetterCause, EConsumeMessageUnacknowledgedCause, EExchangeType, EMessagePriority, EMessageProperty, EMessagePropertyStatus, EQueueProperty, EQueueType, ExchangeDirect, ExchangeError, ExchangeFanOut, ExchangeFanOutError, ExchangeInvalidDataError, ExchangeTopic, type IConsumableMessage, type IConsumerHeartbeat, type IConsumerHeartbeatPayload, type IConsumerMessageHandlerArgs, type IEventListener, type
|
|
858
|
+
export { Configuration, Consumer, ConsumerError, ConsumerMessageHandlerAlreadyExistsError, EConsumeMessageDeadLetterCause, EConsumeMessageUnacknowledgedCause, EExchangeType, EMessagePriority, EMessageProperty, EMessagePropertyStatus, EQueueProperty, EQueueType, ExchangeDirect, ExchangeError, ExchangeFanOut, ExchangeFanOutError, ExchangeInvalidDataError, ExchangeTopic, type IConsumableMessage, type IConsumerHeartbeat, type IConsumerHeartbeatPayload, type IConsumerMessageHandlerArgs, type IEventListener, type IExchange, type IExchangeSerialized, type IMessageSerialized, type IMessageStateSerialized, type IMessagesConfig, type IMessagesConfigStorage, type IMessagesConfigStorageOptions, type IMessagesConfigStorageOptionsRequired, type IMessagesConfigStorageRequired, type IQueueMessages, type IQueueMessagesCount, type IQueueMessagesPage, type IQueueMessagesPageParams, type IQueueParams, type IQueueProperties, type IQueueRateLimit, type IRedisSMQConfig, type IRedisSMQConfigRequired, Message, MessageDeleteError, MessageDestinationQueueAlreadySetError, MessageDestinationQueueRequiredError, MessageError, MessageExchangeRequiredError, MessageNotFoundError, Namespace, Producer, ProducerError, ProducerInstanceNotRunningError, ProducerMessageNotPublishedError, ProducerMessageNotScheduledError, ProducibleMessage, Queue, QueueAcknowledgedMessages, QueueDeadLetteredMessages, QueueError, QueueExistsError, QueueHasRunningConsumersError, QueueMessageRequeueError, QueueMessages, QueueNamespaceNotFoundError, QueueNotEmptyError, QueueNotFoundError, QueuePendingMessages, QueueRateLimit, QueueRateLimitError, QueueScheduledMessages, type TConsumerMessageHandler, type TConsumerRedisKeys, type TEventListenersConfig, type TExchange, type TExchangeDirect, type TExchangeDirectBindingParams, type TExchangeDirectSerialized, type TExchangeFanOut, type TExchangeFanOutBindingParams, type TExchangeFanOutSerialized, type TExchangeSerialized, type TExchangeTopic, type TExchangeTopicBindingParams, type TExchangeTopicSerialized, type TMessageConsumeOptions, type TQueueConsumer, type TRedisSMQEvent, type TTopicParams, disconnect };
|
package/dist/index.d.ts
CHANGED
|
@@ -387,29 +387,21 @@ declare enum EConsumeMessageUnacknowledgedCause {
|
|
|
387
387
|
|
|
388
388
|
type TRedisSMQEvent = TEvent & {
|
|
389
389
|
heartbeatTick: (timestamp: number, consumerId: string, heartbeatPayload: IConsumerHeartbeat) => void;
|
|
390
|
-
messagePublished: (messageId: string, queue: IQueueParams) => void;
|
|
390
|
+
messagePublished: (messageId: string, queue: IQueueParams, producerId: string) => void;
|
|
391
391
|
messageAcknowledged: (messageId: string, queue: IQueueParams, messageHandlerId: string, consumerId: string) => void;
|
|
392
|
-
messageUnacknowledged: (
|
|
393
|
-
messageDeadLettered: (
|
|
392
|
+
messageUnacknowledged: (messageId: string, queue: IQueueParams, messageHandlerId: string, consumerId: string, cause: EConsumeMessageUnacknowledgedCause) => void;
|
|
393
|
+
messageDeadLettered: (messageId: string, queue: IQueueParams, messageHandlerId: string, consumerId: string, cause: EConsumeMessageDeadLetterCause) => void;
|
|
394
394
|
messageReceived: (messageId: string, queue: IQueueParams, consumerId: string) => void;
|
|
395
395
|
messageRequeued: (messageId: string, queue: IQueueParams, messageHandlerId: string, consumerId: string) => void;
|
|
396
396
|
messageDelayed: (messageId: string, queue: IQueueParams, messageHandlerId: string, consumerId: string) => void;
|
|
397
397
|
};
|
|
398
398
|
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
instanceId: string;
|
|
402
|
-
};
|
|
403
|
-
interface IEventListener {
|
|
404
|
-
init(args: TEventListenerInitArgs, cb: ICallback<void>): void;
|
|
399
|
+
interface IEventListener extends EventEmitter<TRedisSMQEvent> {
|
|
400
|
+
init(cb: ICallback<void>): void;
|
|
405
401
|
quit(cb: ICallback<void>): void;
|
|
406
402
|
}
|
|
407
403
|
|
|
408
|
-
|
|
409
|
-
consumerEventListeners?: (new () => IEventListener)[];
|
|
410
|
-
producerEventListeners?: (new () => IEventListener)[];
|
|
411
|
-
}
|
|
412
|
-
type IEventListenersConfigRequired = Required<IEventListenersConfig>;
|
|
404
|
+
type TEventListenersConfig = (new () => IEventListener)[];
|
|
413
405
|
|
|
414
406
|
type TTopicParams = {
|
|
415
407
|
topic: string;
|
|
@@ -470,13 +462,12 @@ interface IRedisSMQConfig {
|
|
|
470
462
|
namespace?: string;
|
|
471
463
|
logger?: ILoggerConfig;
|
|
472
464
|
messages?: IMessagesConfig;
|
|
473
|
-
eventListeners?:
|
|
465
|
+
eventListeners?: TEventListenersConfig;
|
|
474
466
|
}
|
|
475
467
|
interface IRedisSMQConfigRequired extends Required<IRedisSMQConfig> {
|
|
476
468
|
messages: {
|
|
477
469
|
store: IMessagesConfigStorageRequired;
|
|
478
470
|
};
|
|
479
|
-
eventListeners: IEventListenersConfigRequired;
|
|
480
471
|
}
|
|
481
472
|
|
|
482
473
|
declare class ConsumerError extends RedisSMQError {
|
|
@@ -587,6 +578,7 @@ declare abstract class Base extends EventEmitter<TRedisSMQEvent> {
|
|
|
587
578
|
constructor();
|
|
588
579
|
protected setUpSharedRedisClient: (cb: ICallback<void>) => void;
|
|
589
580
|
protected tearDownSharedRedisClient: (cb: ICallback<void>) => void;
|
|
581
|
+
protected initEventListeners: (cb: ICallback<void>) => void;
|
|
590
582
|
protected registerSystemEventListeners(): void;
|
|
591
583
|
protected goingUp(): TFunction[];
|
|
592
584
|
protected up(cb?: ICallback<boolean>): void;
|
|
@@ -696,10 +688,10 @@ declare class Consumer extends Base {
|
|
|
696
688
|
protected heartbeat: ConsumerHeartbeat | null;
|
|
697
689
|
protected workerRunner: WorkerRunner | null;
|
|
698
690
|
constructor(useMultiplexing?: boolean);
|
|
691
|
+
protected registerSystemEventListeners(): void;
|
|
699
692
|
protected setUpHeartbeat: (cb: ICallback<void>) => void;
|
|
700
693
|
protected tearDownHeartbeat: (cb: ICallback<void>) => void;
|
|
701
694
|
protected setUpConsumerWorkers: (cb: ICallback<void>) => void;
|
|
702
|
-
protected initConsumerEventListeners: (cb: ICallback<void>) => void;
|
|
703
695
|
protected tearDownConsumerWorkers: (cb: ICallback<void>) => void;
|
|
704
696
|
protected runMessageHandlers: (cb: ICallback<void>) => void;
|
|
705
697
|
protected shutdownMessageHandlers: (cb: ICallback<void>) => void;
|
|
@@ -711,8 +703,7 @@ declare class Consumer extends Base {
|
|
|
711
703
|
}
|
|
712
704
|
|
|
713
705
|
declare class Producer extends Base {
|
|
714
|
-
protected
|
|
715
|
-
protected goingUp(): TUnaryFunction<ICallback<void>>[];
|
|
706
|
+
protected registerSystemEventListeners(): void;
|
|
716
707
|
protected enqueue(redisClient: RedisClient, queue: IQueueParams, message: MessageEnvelope, cb: ICallback<void>): void;
|
|
717
708
|
protected produceMessage(redisClient: RedisClient, message: MessageEnvelope, queue: IQueueParams, cb: ICallback<string>): void;
|
|
718
709
|
produce(msg: ProducibleMessage, cb: ICallback<string[]>): void;
|
|
@@ -864,4 +855,4 @@ declare class Configuration {
|
|
|
864
855
|
|
|
865
856
|
declare function disconnect(cb: ICallback<void>): void;
|
|
866
857
|
|
|
867
|
-
export { Configuration, Consumer, ConsumerError, ConsumerMessageHandlerAlreadyExistsError, EConsumeMessageDeadLetterCause, EConsumeMessageUnacknowledgedCause, EExchangeType, EMessagePriority, EMessageProperty, EMessagePropertyStatus, EQueueProperty, EQueueType, ExchangeDirect, ExchangeError, ExchangeFanOut, ExchangeFanOutError, ExchangeInvalidDataError, ExchangeTopic, type IConsumableMessage, type IConsumerHeartbeat, type IConsumerHeartbeatPayload, type IConsumerMessageHandlerArgs, type IEventListener, type
|
|
858
|
+
export { Configuration, Consumer, ConsumerError, ConsumerMessageHandlerAlreadyExistsError, EConsumeMessageDeadLetterCause, EConsumeMessageUnacknowledgedCause, EExchangeType, EMessagePriority, EMessageProperty, EMessagePropertyStatus, EQueueProperty, EQueueType, ExchangeDirect, ExchangeError, ExchangeFanOut, ExchangeFanOutError, ExchangeInvalidDataError, ExchangeTopic, type IConsumableMessage, type IConsumerHeartbeat, type IConsumerHeartbeatPayload, type IConsumerMessageHandlerArgs, type IEventListener, type IExchange, type IExchangeSerialized, type IMessageSerialized, type IMessageStateSerialized, type IMessagesConfig, type IMessagesConfigStorage, type IMessagesConfigStorageOptions, type IMessagesConfigStorageOptionsRequired, type IMessagesConfigStorageRequired, type IQueueMessages, type IQueueMessagesCount, type IQueueMessagesPage, type IQueueMessagesPageParams, type IQueueParams, type IQueueProperties, type IQueueRateLimit, type IRedisSMQConfig, type IRedisSMQConfigRequired, Message, MessageDeleteError, MessageDestinationQueueAlreadySetError, MessageDestinationQueueRequiredError, MessageError, MessageExchangeRequiredError, MessageNotFoundError, Namespace, Producer, ProducerError, ProducerInstanceNotRunningError, ProducerMessageNotPublishedError, ProducerMessageNotScheduledError, ProducibleMessage, Queue, QueueAcknowledgedMessages, QueueDeadLetteredMessages, QueueError, QueueExistsError, QueueHasRunningConsumersError, QueueMessageRequeueError, QueueMessages, QueueNamespaceNotFoundError, QueueNotEmptyError, QueueNotFoundError, QueuePendingMessages, QueueRateLimit, QueueRateLimitError, QueueScheduledMessages, type TConsumerMessageHandler, type TConsumerRedisKeys, type TEventListenersConfig, type TExchange, type TExchangeDirect, type TExchangeDirectBindingParams, type TExchangeDirectSerialized, type TExchangeFanOut, type TExchangeFanOutBindingParams, type TExchangeFanOutSerialized, type TExchangeSerialized, type TExchangeTopic, type TExchangeTopicBindingParams, type TExchangeTopicSerialized, type TMessageConsumeOptions, type TQueueConsumer, type TRedisSMQEvent, type TTopicParams, disconnect };
|
package/dist/index.js
CHANGED
|
@@ -262,14 +262,10 @@ function Messages(userConfig) {
|
|
|
262
262
|
}
|
|
263
263
|
|
|
264
264
|
// src/config/event-listeners/event-listeners.ts
|
|
265
|
-
|
|
266
|
-
var defaultConfig4 = {
|
|
267
|
-
consumerEventListeners: [],
|
|
268
|
-
producerEventListeners: []
|
|
269
|
-
};
|
|
265
|
+
var defaultConfig4 = [];
|
|
270
266
|
function EventListeners(userConfig) {
|
|
271
|
-
const { eventListeners =
|
|
272
|
-
return
|
|
267
|
+
const { eventListeners = [] } = userConfig;
|
|
268
|
+
return [...defaultConfig4, ...eventListeners];
|
|
273
269
|
}
|
|
274
270
|
|
|
275
271
|
// src/config/configuration.ts
|
|
@@ -331,11 +327,11 @@ function _destroyCommonRedisClient(cb) {
|
|
|
331
327
|
}
|
|
332
328
|
|
|
333
329
|
// types/consumer/consume-message.ts
|
|
334
|
-
var EConsumeMessageDeadLetterCause = /* @__PURE__ */ ((
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
return
|
|
330
|
+
var EConsumeMessageDeadLetterCause = /* @__PURE__ */ ((EConsumeMessageDeadLetterCause2) => {
|
|
331
|
+
EConsumeMessageDeadLetterCause2[EConsumeMessageDeadLetterCause2["TTL_EXPIRED"] = 0] = "TTL_EXPIRED";
|
|
332
|
+
EConsumeMessageDeadLetterCause2[EConsumeMessageDeadLetterCause2["RETRY_THRESHOLD_EXCEEDED"] = 1] = "RETRY_THRESHOLD_EXCEEDED";
|
|
333
|
+
EConsumeMessageDeadLetterCause2[EConsumeMessageDeadLetterCause2["PERIODIC_MESSAGE"] = 2] = "PERIODIC_MESSAGE";
|
|
334
|
+
return EConsumeMessageDeadLetterCause2;
|
|
339
335
|
})(EConsumeMessageDeadLetterCause || {});
|
|
340
336
|
var EConsumeMessageUnacknowledgedCause = /* @__PURE__ */ ((EConsumeMessageUnacknowledgedCause3) => {
|
|
341
337
|
EConsumeMessageUnacknowledgedCause3[EConsumeMessageUnacknowledgedCause3["TIMEOUT"] = 0] = "TIMEOUT";
|
|
@@ -724,6 +720,10 @@ var Base = class extends EventEmitter2 {
|
|
|
724
720
|
} else
|
|
725
721
|
cb();
|
|
726
722
|
};
|
|
723
|
+
this.initEventListeners = (cb) => {
|
|
724
|
+
const { eventListeners } = Configuration.getSetConfig();
|
|
725
|
+
this.registerEventListeners(eventListeners, cb);
|
|
726
|
+
};
|
|
727
727
|
this.tearDownEventListeners = (cb) => {
|
|
728
728
|
async2.each(
|
|
729
729
|
this.eventListeners,
|
|
@@ -754,7 +754,7 @@ var Base = class extends EventEmitter2 {
|
|
|
754
754
|
this.on("error", (err) => this.handleError(err));
|
|
755
755
|
}
|
|
756
756
|
goingUp() {
|
|
757
|
-
return [this.setUpSharedRedisClient];
|
|
757
|
+
return [this.setUpSharedRedisClient, this.initEventListeners];
|
|
758
758
|
}
|
|
759
759
|
up(cb) {
|
|
760
760
|
this.powerSwitch.commit();
|
|
@@ -779,20 +779,14 @@ var Base = class extends EventEmitter2 {
|
|
|
779
779
|
Ctors,
|
|
780
780
|
(ctor, key, done) => {
|
|
781
781
|
const instance = new ctor();
|
|
782
|
-
instance.init(
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
if (err)
|
|
789
|
-
done(err);
|
|
790
|
-
else {
|
|
791
|
-
this.eventListeners.push(instance);
|
|
792
|
-
done();
|
|
793
|
-
}
|
|
782
|
+
instance.init((err) => {
|
|
783
|
+
if (err)
|
|
784
|
+
done(err);
|
|
785
|
+
else {
|
|
786
|
+
this.eventListeners.push(instance);
|
|
787
|
+
done();
|
|
794
788
|
}
|
|
795
|
-
);
|
|
789
|
+
});
|
|
796
790
|
},
|
|
797
791
|
cb
|
|
798
792
|
);
|
|
@@ -2888,20 +2882,20 @@ var ConsumeMessage = class {
|
|
|
2888
2882
|
const consumerId = this.messageHandler.getConsumerId();
|
|
2889
2883
|
this.messageHandler.emit(
|
|
2890
2884
|
"messageUnacknowledged",
|
|
2891
|
-
cause,
|
|
2892
2885
|
messageId,
|
|
2893
2886
|
queue,
|
|
2894
2887
|
messageHandlerId,
|
|
2895
|
-
consumerId
|
|
2888
|
+
consumerId,
|
|
2889
|
+
cause
|
|
2896
2890
|
);
|
|
2897
2891
|
if (reply.action === 0 /* DEAD_LETTER */) {
|
|
2898
2892
|
this.messageHandler.emit(
|
|
2899
2893
|
"messageDeadLettered",
|
|
2900
|
-
reply.deadLetterCause,
|
|
2901
2894
|
messageId,
|
|
2902
2895
|
queue,
|
|
2903
2896
|
messageHandlerId,
|
|
2904
|
-
consumerId
|
|
2897
|
+
consumerId,
|
|
2898
|
+
reply.deadLetterCause
|
|
2905
2899
|
);
|
|
2906
2900
|
} else if (reply.action === 2 /* DELAY */) {
|
|
2907
2901
|
this.messageHandler.emit(
|
|
@@ -3028,7 +3022,7 @@ var MessageHandler = class extends EventEmitter3 {
|
|
|
3028
3022
|
});
|
|
3029
3023
|
this.on(
|
|
3030
3024
|
"messageDeadLettered",
|
|
3031
|
-
(
|
|
3025
|
+
(messageId, queue, messageHandlerId, consumerId, cause) => {
|
|
3032
3026
|
this.logger.info(
|
|
3033
3027
|
`Message (ID ${messageId}) dead-lettered (cause ${cause})`
|
|
3034
3028
|
);
|
|
@@ -3036,7 +3030,7 @@ var MessageHandler = class extends EventEmitter3 {
|
|
|
3036
3030
|
);
|
|
3037
3031
|
this.on(
|
|
3038
3032
|
"messageUnacknowledged",
|
|
3039
|
-
(
|
|
3033
|
+
(messageId, queue, messageHandlerId, consumerId, cause) => {
|
|
3040
3034
|
this.logger.info(
|
|
3041
3035
|
`Message (ID ${messageId}) unacknowledged (cause ${cause})`
|
|
3042
3036
|
);
|
|
@@ -3929,12 +3923,6 @@ var Consumer = class extends Base {
|
|
|
3929
3923
|
this.workerRunner.addWorker(new publish_scheduled_worker_default(redisClient2, true));
|
|
3930
3924
|
this.workerRunner.run();
|
|
3931
3925
|
};
|
|
3932
|
-
this.initConsumerEventListeners = (cb) => {
|
|
3933
|
-
this.registerEventListeners(
|
|
3934
|
-
Configuration.getSetConfig().eventListeners.consumerEventListeners,
|
|
3935
|
-
cb
|
|
3936
|
-
);
|
|
3937
|
-
};
|
|
3938
3926
|
this.tearDownConsumerWorkers = (cb) => {
|
|
3939
3927
|
if (this.workerRunner) {
|
|
3940
3928
|
this.workerRunner.quit(() => {
|
|
@@ -3961,10 +3949,30 @@ var Consumer = class extends Base {
|
|
|
3961
3949
|
this.messageHandlerRunner = useMultiplexing ? new MultiplexedMessageHandlerRunner(this, nsLogger) : new MessageHandlerRunner(this, nsLogger);
|
|
3962
3950
|
this.redisKeys = redisKeys.getConsumerKeys(this.getId());
|
|
3963
3951
|
}
|
|
3952
|
+
registerSystemEventListeners() {
|
|
3953
|
+
super.registerSystemEventListeners();
|
|
3954
|
+
this.on("messageAcknowledged", (...args) => {
|
|
3955
|
+
if (this.eventListeners.length)
|
|
3956
|
+
this.eventListeners.forEach(
|
|
3957
|
+
(i) => i.emit("messageAcknowledged", ...args)
|
|
3958
|
+
);
|
|
3959
|
+
});
|
|
3960
|
+
this.on("messageUnacknowledged", (...args) => {
|
|
3961
|
+
if (this.eventListeners.length)
|
|
3962
|
+
this.eventListeners.forEach(
|
|
3963
|
+
(i) => i.emit("messageUnacknowledged", ...args)
|
|
3964
|
+
);
|
|
3965
|
+
});
|
|
3966
|
+
this.on("messageDeadLettered", (...args) => {
|
|
3967
|
+
if (this.eventListeners.length)
|
|
3968
|
+
this.eventListeners.forEach(
|
|
3969
|
+
(i) => i.emit("messageDeadLettered", ...args)
|
|
3970
|
+
);
|
|
3971
|
+
});
|
|
3972
|
+
}
|
|
3964
3973
|
goingUp() {
|
|
3965
3974
|
return super.goingUp().concat([
|
|
3966
3975
|
this.setUpHeartbeat,
|
|
3967
|
-
this.initConsumerEventListeners,
|
|
3968
3976
|
this.runMessageHandlers,
|
|
3969
3977
|
this.setUpConsumerWorkers
|
|
3970
3978
|
]);
|
|
@@ -4053,17 +4061,12 @@ function _scheduleMessage(mixed, message, cb) {
|
|
|
4053
4061
|
|
|
4054
4062
|
// src/lib/producer/producer.ts
|
|
4055
4063
|
var Producer = class extends Base {
|
|
4056
|
-
|
|
4057
|
-
super(
|
|
4058
|
-
this.
|
|
4059
|
-
this.
|
|
4060
|
-
|
|
4061
|
-
|
|
4062
|
-
);
|
|
4063
|
-
};
|
|
4064
|
-
}
|
|
4065
|
-
goingUp() {
|
|
4066
|
-
return super.goingUp().concat([this.initProducerEventListeners]);
|
|
4064
|
+
registerSystemEventListeners() {
|
|
4065
|
+
super.registerSystemEventListeners();
|
|
4066
|
+
this.on("messagePublished", (...args) => {
|
|
4067
|
+
if (this.eventListeners.length)
|
|
4068
|
+
this.eventListeners.forEach((i) => i.emit("messagePublished", ...args));
|
|
4069
|
+
});
|
|
4067
4070
|
}
|
|
4068
4071
|
enqueue(redisClient2, queue, message, cb) {
|
|
4069
4072
|
var _a;
|
|
@@ -4133,7 +4136,7 @@ var Producer = class extends Base {
|
|
|
4133
4136
|
cb(err);
|
|
4134
4137
|
else {
|
|
4135
4138
|
this.logger.info(`Message (ID ${messageId}) has been published.`);
|
|
4136
|
-
this.emit("messagePublished", messageId, queue);
|
|
4139
|
+
this.emit("messagePublished", messageId, queue, this.id);
|
|
4137
4140
|
cb(null, messageId);
|
|
4138
4141
|
}
|
|
4139
4142
|
});
|