atomic-queues 1.6.2 → 2.0.0
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/README.md +182 -411
- package/dist/cli/generators/json-schema.d.ts +3 -0
- package/dist/cli/generators/json-schema.d.ts.map +1 -0
- package/dist/cli/generators/json-schema.js +31 -0
- package/dist/cli/generators/json-schema.js.map +1 -0
- package/dist/cli/generators/typescript.d.ts +3 -0
- package/dist/cli/generators/typescript.d.ts.map +1 -0
- package/dist/cli/generators/typescript.js +62 -0
- package/dist/cli/generators/typescript.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +156 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/decorators/actor.decorators.d.ts +4 -0
- package/dist/decorators/actor.decorators.d.ts.map +1 -0
- package/dist/decorators/actor.decorators.js +32 -0
- package/dist/decorators/actor.decorators.js.map +1 -0
- package/dist/decorators/constants.d.ts +5 -12
- package/dist/decorators/constants.d.ts.map +1 -1
- package/dist/decorators/constants.js +10 -16
- package/dist/decorators/constants.js.map +1 -1
- package/dist/decorators/index.d.ts +4 -4
- package/dist/decorators/index.d.ts.map +1 -1
- package/dist/decorators/index.js +4 -4
- package/dist/decorators/index.js.map +1 -1
- package/dist/decorators/interfaces.d.ts +18 -78
- package/dist/decorators/interfaces.d.ts.map +1 -1
- package/dist/decorators/metadata-readers.d.ts +5 -26
- package/dist/decorators/metadata-readers.d.ts.map +1 -1
- package/dist/decorators/metadata-readers.js +16 -33
- package/dist/decorators/metadata-readers.js.map +1 -1
- package/dist/decorators/schema.decorators.d.ts +2 -0
- package/dist/decorators/schema.decorators.d.ts.map +1 -0
- package/dist/decorators/schema.decorators.js +13 -0
- package/dist/decorators/schema.decorators.js.map +1 -0
- package/dist/domain/interfaces/config.interfaces.d.ts +52 -153
- package/dist/domain/interfaces/config.interfaces.d.ts.map +1 -1
- package/dist/domain/interfaces/index.d.ts +0 -7
- package/dist/domain/interfaces/index.d.ts.map +1 -1
- package/dist/domain/interfaces/index.js +0 -7
- package/dist/domain/interfaces/index.js.map +1 -1
- package/dist/domain/interfaces/job.interfaces.d.ts +32 -65
- package/dist/domain/interfaces/job.interfaces.d.ts.map +1 -1
- package/dist/index.d.ts +0 -34
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -39
- package/dist/index.js.map +1 -1
- package/dist/module/atomic-queues.module.d.ts +0 -83
- package/dist/module/atomic-queues.module.d.ts.map +1 -1
- package/dist/module/atomic-queues.module.js +35 -134
- package/dist/module/atomic-queues.module.js.map +1 -1
- package/dist/services/actor-registry/actor-registry.service.d.ts +30 -0
- package/dist/services/actor-registry/actor-registry.service.d.ts.map +1 -0
- package/dist/services/actor-registry/actor-registry.service.js +186 -0
- package/dist/services/actor-registry/actor-registry.service.js.map +1 -0
- package/dist/services/actor-registry/index.d.ts +2 -0
- package/dist/services/actor-registry/index.d.ts.map +1 -0
- package/dist/services/actor-registry/index.js +18 -0
- package/dist/services/actor-registry/index.js.map +1 -0
- package/dist/services/actor-system/actor-system.service.d.ts +19 -0
- package/dist/services/actor-system/actor-system.service.d.ts.map +1 -0
- package/dist/services/actor-system/actor-system.service.js +86 -0
- package/dist/services/actor-system/actor-system.service.js.map +1 -0
- package/dist/services/actor-system/index.d.ts +2 -0
- package/dist/services/actor-system/index.d.ts.map +1 -0
- package/dist/services/{cron-manager → actor-system}/index.js +1 -1
- package/dist/services/actor-system/index.js.map +1 -0
- package/dist/services/command-discovery/command-discovery.service.d.ts +6 -53
- package/dist/services/command-discovery/command-discovery.service.d.ts.map +1 -1
- package/dist/services/command-discovery/command-discovery.service.js +0 -59
- package/dist/services/command-discovery/command-discovery.service.js.map +1 -1
- package/dist/services/constants.d.ts +2 -9
- package/dist/services/constants.d.ts.map +1 -1
- package/dist/services/constants.js +3 -10
- package/dist/services/constants.js.map +1 -1
- package/dist/services/executor-pool/executor-pool.service.d.ts +31 -0
- package/dist/services/executor-pool/executor-pool.service.d.ts.map +1 -0
- package/dist/services/executor-pool/executor-pool.service.js +147 -0
- package/dist/services/executor-pool/executor-pool.service.js.map +1 -0
- package/dist/services/executor-pool/index.d.ts +2 -0
- package/dist/services/executor-pool/index.d.ts.map +1 -0
- package/dist/services/{queue-manager → executor-pool}/index.js +1 -1
- package/dist/services/executor-pool/index.js.map +1 -0
- package/dist/services/gate/gate.service.d.ts +17 -0
- package/dist/services/gate/gate.service.d.ts.map +1 -0
- package/dist/services/gate/gate.service.js +66 -0
- package/dist/services/gate/gate.service.js.map +1 -0
- package/dist/services/gate/index.d.ts +2 -0
- package/dist/services/gate/index.d.ts.map +1 -0
- package/dist/services/{spawn-queue → gate}/index.js +1 -1
- package/dist/services/gate/index.js.map +1 -0
- package/dist/services/handler-executor/handler-executor.service.d.ts +32 -0
- package/dist/services/handler-executor/handler-executor.service.d.ts.map +1 -0
- package/dist/services/handler-executor/handler-executor.service.js +186 -0
- package/dist/services/handler-executor/handler-executor.service.js.map +1 -0
- package/dist/services/handler-executor/index.d.ts +2 -0
- package/dist/services/handler-executor/index.d.ts.map +1 -0
- package/dist/services/handler-executor/index.js +18 -0
- package/dist/services/handler-executor/index.js.map +1 -0
- package/dist/services/index.d.ts +11 -12
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +11 -12
- package/dist/services/index.js.map +1 -1
- package/dist/services/log/index.d.ts +2 -0
- package/dist/services/log/index.d.ts.map +1 -0
- package/dist/services/{index-manager → log}/index.js +1 -1
- package/dist/services/log/index.js.map +1 -0
- package/dist/services/log/log.service.d.ts +21 -0
- package/dist/services/log/log.service.d.ts.map +1 -0
- package/dist/services/log/log.service.js +92 -0
- package/dist/services/log/log.service.js.map +1 -0
- package/dist/services/queue-bus/index.d.ts +0 -4
- package/dist/services/queue-bus/index.d.ts.map +1 -1
- package/dist/services/queue-bus/index.js +0 -4
- package/dist/services/queue-bus/index.js.map +1 -1
- package/dist/services/queue-bus/queue-bus.service.d.ts +44 -198
- package/dist/services/queue-bus/queue-bus.service.d.ts.map +1 -1
- package/dist/services/queue-bus/queue-bus.service.js +103 -259
- package/dist/services/queue-bus/queue-bus.service.js.map +1 -1
- package/dist/services/queue-bus/queue-bus.utils.d.ts +0 -28
- package/dist/services/queue-bus/queue-bus.utils.d.ts.map +1 -1
- package/dist/services/queue-bus/queue-bus.utils.js +1 -41
- package/dist/services/queue-bus/queue-bus.utils.js.map +1 -1
- package/dist/services/registry/index.d.ts +4 -0
- package/dist/services/registry/index.d.ts.map +1 -0
- package/dist/services/{queue-events-manager → registry}/index.js +3 -1
- package/dist/services/registry/index.js.map +1 -0
- package/dist/services/registry/registry.service.d.ts +43 -0
- package/dist/services/registry/registry.service.d.ts.map +1 -0
- package/dist/services/registry/registry.service.js +379 -0
- package/dist/services/registry/registry.service.js.map +1 -0
- package/dist/services/registry/registry.types.d.ts +24 -0
- package/dist/services/registry/registry.types.d.ts.map +1 -0
- package/dist/{domain/interfaces/lock.interfaces.js → services/registry/registry.types.js} +1 -1
- package/dist/services/registry/registry.types.js.map +1 -0
- package/dist/services/registry/schema-converter.d.ts +2 -0
- package/dist/services/registry/schema-converter.d.ts.map +1 -0
- package/dist/services/registry/schema-converter.js +27 -0
- package/dist/services/registry/schema-converter.js.map +1 -0
- package/dist/services/result-collector/index.d.ts +2 -0
- package/dist/services/result-collector/index.d.ts.map +1 -0
- package/dist/services/result-collector/index.js +18 -0
- package/dist/services/result-collector/index.js.map +1 -0
- package/dist/services/result-collector/result-collector.service.d.ts +17 -0
- package/dist/services/result-collector/result-collector.service.d.ts.map +1 -0
- package/dist/services/result-collector/result-collector.service.js +92 -0
- package/dist/services/result-collector/result-collector.service.js.map +1 -0
- package/dist/services/scheduler/index.d.ts +2 -0
- package/dist/services/scheduler/index.d.ts.map +1 -0
- package/dist/services/{job-processor → scheduler}/index.js +1 -1
- package/dist/services/scheduler/index.js.map +1 -0
- package/dist/services/scheduler/scheduler.service.d.ts +17 -0
- package/dist/services/scheduler/scheduler.service.d.ts.map +1 -0
- package/dist/services/scheduler/scheduler.service.js +116 -0
- package/dist/services/scheduler/scheduler.service.js.map +1 -0
- package/dist/services/shutdown/index.d.ts +2 -0
- package/dist/services/shutdown/index.d.ts.map +1 -0
- package/dist/services/shutdown/index.js +18 -0
- package/dist/services/shutdown/index.js.map +1 -0
- package/dist/services/shutdown/shutdown.service.d.ts +8 -0
- package/dist/services/shutdown/shutdown.service.d.ts.map +1 -0
- package/dist/services/shutdown/shutdown.service.js +29 -0
- package/dist/services/shutdown/shutdown.service.js.map +1 -0
- package/dist/utils/index.d.ts +3 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +3 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/naming.utils.d.ts +0 -16
- package/dist/utils/naming.utils.d.ts.map +1 -1
- package/dist/utils/naming.utils.js +0 -29
- package/dist/utils/naming.utils.js.map +1 -1
- package/package.json +19 -11
- package/dist/decorators/legacy.decorators.d.ts +0 -36
- package/dist/decorators/legacy.decorators.d.ts.map +0 -1
- package/dist/decorators/legacy.decorators.js +0 -61
- package/dist/decorators/legacy.decorators.js.map +0 -1
- package/dist/decorators/scaler.decorators.d.ts +0 -65
- package/dist/decorators/scaler.decorators.d.ts.map +0 -1
- package/dist/decorators/scaler.decorators.js +0 -103
- package/dist/decorators/scaler.decorators.js.map +0 -1
- package/dist/decorators/type-guards.d.ts +0 -18
- package/dist/decorators/type-guards.d.ts.map +0 -1
- package/dist/decorators/type-guards.js +0 -32
- package/dist/decorators/type-guards.js.map +0 -1
- package/dist/decorators/worker.decorators.d.ts +0 -58
- package/dist/decorators/worker.decorators.d.ts.map +0 -1
- package/dist/decorators/worker.decorators.js +0 -92
- package/dist/decorators/worker.decorators.js.map +0 -1
- package/dist/domain/interfaces/event.interfaces.d.ts +0 -71
- package/dist/domain/interfaces/event.interfaces.d.ts.map +0 -1
- package/dist/domain/interfaces/event.interfaces.js +0 -3
- package/dist/domain/interfaces/event.interfaces.js.map +0 -1
- package/dist/domain/interfaces/index-tracking.interfaces.d.ts +0 -69
- package/dist/domain/interfaces/index-tracking.interfaces.d.ts.map +0 -1
- package/dist/domain/interfaces/index-tracking.interfaces.js +0 -3
- package/dist/domain/interfaces/index-tracking.interfaces.js.map +0 -1
- package/dist/domain/interfaces/lock.interfaces.d.ts +0 -54
- package/dist/domain/interfaces/lock.interfaces.d.ts.map +0 -1
- package/dist/domain/interfaces/lock.interfaces.js.map +0 -1
- package/dist/domain/interfaces/process.interfaces.d.ts +0 -44
- package/dist/domain/interfaces/process.interfaces.d.ts.map +0 -1
- package/dist/domain/interfaces/process.interfaces.js +0 -3
- package/dist/domain/interfaces/process.interfaces.js.map +0 -1
- package/dist/domain/interfaces/queue.interfaces.d.ts +0 -46
- package/dist/domain/interfaces/queue.interfaces.d.ts.map +0 -1
- package/dist/domain/interfaces/queue.interfaces.js +0 -3
- package/dist/domain/interfaces/queue.interfaces.js.map +0 -1
- package/dist/domain/interfaces/scaling.interfaces.d.ts +0 -62
- package/dist/domain/interfaces/scaling.interfaces.d.ts.map +0 -1
- package/dist/domain/interfaces/scaling.interfaces.js +0 -3
- package/dist/domain/interfaces/scaling.interfaces.js.map +0 -1
- package/dist/domain/interfaces/worker.interfaces.d.ts +0 -120
- package/dist/domain/interfaces/worker.interfaces.d.ts.map +0 -1
- package/dist/domain/interfaces/worker.interfaces.js +0 -3
- package/dist/domain/interfaces/worker.interfaces.js.map +0 -1
- package/dist/services/cron-manager/cron-manager.service.d.ts +0 -199
- package/dist/services/cron-manager/cron-manager.service.d.ts.map +0 -1
- package/dist/services/cron-manager/cron-manager.service.js +0 -583
- package/dist/services/cron-manager/cron-manager.service.js.map +0 -1
- package/dist/services/cron-manager/index.d.ts +0 -2
- package/dist/services/cron-manager/index.d.ts.map +0 -1
- package/dist/services/cron-manager/index.js.map +0 -1
- package/dist/services/index-manager/index-manager.service.d.ts +0 -142
- package/dist/services/index-manager/index-manager.service.d.ts.map +0 -1
- package/dist/services/index-manager/index-manager.service.js +0 -325
- package/dist/services/index-manager/index-manager.service.js.map +0 -1
- package/dist/services/index-manager/index.d.ts +0 -2
- package/dist/services/index-manager/index.d.ts.map +0 -1
- package/dist/services/index-manager/index.js.map +0 -1
- package/dist/services/job-processor/index.d.ts +0 -2
- package/dist/services/job-processor/index.d.ts.map +0 -1
- package/dist/services/job-processor/index.js.map +0 -1
- package/dist/services/job-processor/job-processor.service.d.ts +0 -156
- package/dist/services/job-processor/job-processor.service.d.ts.map +0 -1
- package/dist/services/job-processor/job-processor.service.js +0 -331
- package/dist/services/job-processor/job-processor.service.js.map +0 -1
- package/dist/services/processor-discovery/decorator-discovery.service.d.ts +0 -40
- package/dist/services/processor-discovery/decorator-discovery.service.d.ts.map +0 -1
- package/dist/services/processor-discovery/decorator-discovery.service.js +0 -191
- package/dist/services/processor-discovery/decorator-discovery.service.js.map +0 -1
- package/dist/services/processor-discovery/index.d.ts +0 -6
- package/dist/services/processor-discovery/index.d.ts.map +0 -1
- package/dist/services/processor-discovery/index.js +0 -22
- package/dist/services/processor-discovery/index.js.map +0 -1
- package/dist/services/processor-discovery/processor-discovery.service.d.ts +0 -98
- package/dist/services/processor-discovery/processor-discovery.service.d.ts.map +0 -1
- package/dist/services/processor-discovery/processor-discovery.service.js +0 -258
- package/dist/services/processor-discovery/processor-discovery.service.js.map +0 -1
- package/dist/services/processor-discovery/processor-registry.d.ts +0 -58
- package/dist/services/processor-discovery/processor-registry.d.ts.map +0 -1
- package/dist/services/processor-discovery/processor-registry.js +0 -74
- package/dist/services/processor-discovery/processor-registry.js.map +0 -1
- package/dist/services/processor-discovery/scaling-registration.service.d.ts +0 -60
- package/dist/services/processor-discovery/scaling-registration.service.d.ts.map +0 -1
- package/dist/services/processor-discovery/scaling-registration.service.js +0 -261
- package/dist/services/processor-discovery/scaling-registration.service.js.map +0 -1
- package/dist/services/processor-discovery/worker-factory.service.d.ts +0 -54
- package/dist/services/processor-discovery/worker-factory.service.d.ts.map +0 -1
- package/dist/services/processor-discovery/worker-factory.service.js +0 -185
- package/dist/services/processor-discovery/worker-factory.service.js.map +0 -1
- package/dist/services/queue-bus/entity-target.d.ts +0 -58
- package/dist/services/queue-bus/entity-target.d.ts.map +0 -1
- package/dist/services/queue-bus/entity-target.js +0 -109
- package/dist/services/queue-bus/entity-target.js.map +0 -1
- package/dist/services/queue-bus/queue-bus.types.d.ts +0 -40
- package/dist/services/queue-bus/queue-bus.types.d.ts.map +0 -1
- package/dist/services/queue-bus/queue-bus.types.js +0 -3
- package/dist/services/queue-bus/queue-bus.types.js.map +0 -1
- package/dist/services/queue-bus/queue-target.d.ts +0 -61
- package/dist/services/queue-bus/queue-target.d.ts.map +0 -1
- package/dist/services/queue-bus/queue-target.js +0 -123
- package/dist/services/queue-bus/queue-target.js.map +0 -1
- package/dist/services/queue-events-manager/index.d.ts +0 -2
- package/dist/services/queue-events-manager/index.d.ts.map +0 -1
- package/dist/services/queue-events-manager/index.js.map +0 -1
- package/dist/services/queue-events-manager/queue-events-manager.service.d.ts +0 -120
- package/dist/services/queue-events-manager/queue-events-manager.service.d.ts.map +0 -1
- package/dist/services/queue-events-manager/queue-events-manager.service.js +0 -343
- package/dist/services/queue-events-manager/queue-events-manager.service.js.map +0 -1
- package/dist/services/queue-manager/index.d.ts +0 -2
- package/dist/services/queue-manager/index.d.ts.map +0 -1
- package/dist/services/queue-manager/index.js.map +0 -1
- package/dist/services/queue-manager/queue-manager.service.d.ts +0 -148
- package/dist/services/queue-manager/queue-manager.service.d.ts.map +0 -1
- package/dist/services/queue-manager/queue-manager.service.js +0 -348
- package/dist/services/queue-manager/queue-manager.service.js.map +0 -1
- package/dist/services/resource-lock/index.d.ts +0 -2
- package/dist/services/resource-lock/index.d.ts.map +0 -1
- package/dist/services/resource-lock/index.js +0 -18
- package/dist/services/resource-lock/index.js.map +0 -1
- package/dist/services/resource-lock/resource-lock.service.d.ts +0 -120
- package/dist/services/resource-lock/resource-lock.service.d.ts.map +0 -1
- package/dist/services/resource-lock/resource-lock.service.js +0 -367
- package/dist/services/resource-lock/resource-lock.service.js.map +0 -1
- package/dist/services/service-queue/index.d.ts +0 -3
- package/dist/services/service-queue/index.d.ts.map +0 -1
- package/dist/services/service-queue/index.js +0 -19
- package/dist/services/service-queue/index.js.map +0 -1
- package/dist/services/service-queue/service-queue.service.d.ts +0 -199
- package/dist/services/service-queue/service-queue.service.d.ts.map +0 -1
- package/dist/services/service-queue/service-queue.service.js +0 -617
- package/dist/services/service-queue/service-queue.service.js.map +0 -1
- package/dist/services/service-queue/service-queue.types.d.ts +0 -32
- package/dist/services/service-queue/service-queue.types.d.ts.map +0 -1
- package/dist/services/service-queue/service-queue.types.js +0 -27
- package/dist/services/service-queue/service-queue.types.js.map +0 -1
- package/dist/services/shutdown-state/index.d.ts +0 -2
- package/dist/services/shutdown-state/index.d.ts.map +0 -1
- package/dist/services/shutdown-state/index.js +0 -18
- package/dist/services/shutdown-state/index.js.map +0 -1
- package/dist/services/shutdown-state/shutdown-state.service.d.ts +0 -69
- package/dist/services/shutdown-state/shutdown-state.service.d.ts.map +0 -1
- package/dist/services/shutdown-state/shutdown-state.service.js +0 -127
- package/dist/services/shutdown-state/shutdown-state.service.js.map +0 -1
- package/dist/services/spawn-queue/index.d.ts +0 -2
- package/dist/services/spawn-queue/index.d.ts.map +0 -1
- package/dist/services/spawn-queue/index.js.map +0 -1
- package/dist/services/spawn-queue/spawn-queue.service.d.ts +0 -119
- package/dist/services/spawn-queue/spawn-queue.service.d.ts.map +0 -1
- package/dist/services/spawn-queue/spawn-queue.service.js +0 -273
- package/dist/services/spawn-queue/spawn-queue.service.js.map +0 -1
- package/dist/services/worker-manager/index.d.ts +0 -2
- package/dist/services/worker-manager/index.d.ts.map +0 -1
- package/dist/services/worker-manager/index.js +0 -18
- package/dist/services/worker-manager/index.js.map +0 -1
- package/dist/services/worker-manager/worker-manager.service.d.ts +0 -221
- package/dist/services/worker-manager/worker-manager.service.d.ts.map +0 -1
- package/dist/services/worker-manager/worker-manager.service.js +0 -591
- package/dist/services/worker-manager/worker-manager.service.js.map +0 -1
- package/dist/utils/helpers.d.ts +0 -5
- package/dist/utils/helpers.d.ts.map +0 -1
- package/dist/utils/helpers.js +0 -21
- package/dist/utils/helpers.js.map +0 -1
- package/dist/utils/job.utils.d.ts +0 -50
- package/dist/utils/job.utils.d.ts.map +0 -1
- package/dist/utils/job.utils.js +0 -89
- package/dist/utils/job.utils.js.map +0 -1
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var ActorSystem_1;
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.ActorSystem = void 0;
|
|
17
|
+
const common_1 = require("@nestjs/common");
|
|
18
|
+
const uuid_1 = require("uuid");
|
|
19
|
+
const utils_1 = require("../../utils");
|
|
20
|
+
const log_1 = require("../log");
|
|
21
|
+
const executor_pool_1 = require("../executor-pool");
|
|
22
|
+
const result_collector_1 = require("../result-collector");
|
|
23
|
+
const registry_1 = require("../registry");
|
|
24
|
+
const constants_1 = require("../constants");
|
|
25
|
+
let ActorSystem = ActorSystem_1 = class ActorSystem {
|
|
26
|
+
constructor(config, logService, executorPool, resultCollector, registryService) {
|
|
27
|
+
this.config = config;
|
|
28
|
+
this.logService = logService;
|
|
29
|
+
this.executorPool = executorPool;
|
|
30
|
+
this.resultCollector = resultCollector;
|
|
31
|
+
this.registryService = registryService;
|
|
32
|
+
this.logger = new common_1.Logger(ActorSystem_1.name);
|
|
33
|
+
this.keyPrefix = (0, utils_1.resolveKeyPrefix)(config);
|
|
34
|
+
}
|
|
35
|
+
async send(entityType, entityId, message) {
|
|
36
|
+
const entityKey = `${entityType}:${entityId}`;
|
|
37
|
+
const serialized = this.serializeMessage(entityType, entityId, message);
|
|
38
|
+
if (this.registryService?.isEnabled()) {
|
|
39
|
+
await this.registryService.validate(entityType, message.constructor.name, serialized.data);
|
|
40
|
+
}
|
|
41
|
+
await this.logService.append(entityKey, serialized);
|
|
42
|
+
await this.executorPool.tickle();
|
|
43
|
+
return { id: serialized.id, entityKey };
|
|
44
|
+
}
|
|
45
|
+
async sendAndWait(entityType, entityId, message, timeout = 30000) {
|
|
46
|
+
const correlationId = (0, uuid_1.v4)();
|
|
47
|
+
const entityKey = `${entityType}:${entityId}`;
|
|
48
|
+
const serialized = this.serializeMessage(entityType, entityId, message, correlationId);
|
|
49
|
+
if (this.registryService?.isEnabled()) {
|
|
50
|
+
await this.registryService.validate(entityType, message.constructor.name, serialized.data);
|
|
51
|
+
}
|
|
52
|
+
const resultPromise = this.resultCollector.waitForResult(correlationId, timeout);
|
|
53
|
+
await this.logService.append(entityKey, serialized);
|
|
54
|
+
await this.executorPool.tickle();
|
|
55
|
+
return resultPromise;
|
|
56
|
+
}
|
|
57
|
+
serializeMessage(entityType, entityId, message, correlationId) {
|
|
58
|
+
const data = {};
|
|
59
|
+
for (const key of Object.keys(message)) {
|
|
60
|
+
data[key] = message[key];
|
|
61
|
+
}
|
|
62
|
+
const retryConfig = this.config.entities?.[entityType]?.retry ?? this.config.retry;
|
|
63
|
+
return {
|
|
64
|
+
id: (0, uuid_1.v4)(),
|
|
65
|
+
name: message.constructor.name,
|
|
66
|
+
data,
|
|
67
|
+
entityType,
|
|
68
|
+
entityId,
|
|
69
|
+
correlationId,
|
|
70
|
+
enqueuedAt: Date.now(),
|
|
71
|
+
attempts: 0,
|
|
72
|
+
maxAttempts: retryConfig?.maxAttempts ?? 3,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
exports.ActorSystem = ActorSystem;
|
|
77
|
+
exports.ActorSystem = ActorSystem = ActorSystem_1 = __decorate([
|
|
78
|
+
(0, common_1.Injectable)(),
|
|
79
|
+
__param(0, (0, common_1.Inject)(constants_1.ATOMIC_QUEUES_CONFIG)),
|
|
80
|
+
__param(4, (0, common_1.Optional)()),
|
|
81
|
+
__metadata("design:paramtypes", [Object, log_1.LogService,
|
|
82
|
+
executor_pool_1.ExecutorPoolService,
|
|
83
|
+
result_collector_1.ResultCollector,
|
|
84
|
+
registry_1.RegistryService])
|
|
85
|
+
], ActorSystem);
|
|
86
|
+
//# sourceMappingURL=actor-system.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actor-system.service.js","sourceRoot":"","sources":["../../../src/services/actor-system/actor-system.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/actor-system/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC"}
|
|
@@ -14,5 +14,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./
|
|
17
|
+
__exportStar(require("./actor-system.service"), exports);
|
|
18
18
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/actor-system/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yDAAuC"}
|
|
@@ -1,84 +1,37 @@
|
|
|
1
1
|
import { OnModuleInit, Type } from '@nestjs/common';
|
|
2
2
|
import { DiscoveryService, Reflector } from '@nestjs/core';
|
|
3
|
-
import { Job } from 'bullmq';
|
|
4
3
|
interface ICommandBus {
|
|
5
4
|
execute<T>(command: T): Promise<any>;
|
|
6
5
|
}
|
|
7
6
|
interface IQueryBus {
|
|
8
7
|
execute<T>(query: T): Promise<any>;
|
|
9
8
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
*
|
|
16
|
-
* This eliminates the need for @JobHandler boilerplate - commands
|
|
17
|
-
* decorated with @JobCommand are automatically routed and executed.
|
|
18
|
-
*/
|
|
9
|
+
interface IJobLike {
|
|
10
|
+
name: string;
|
|
11
|
+
data: Record<string, any>;
|
|
12
|
+
id: string;
|
|
13
|
+
}
|
|
19
14
|
export declare class CommandDiscoveryService implements OnModuleInit {
|
|
20
15
|
private readonly discoveryService;
|
|
21
16
|
private readonly reflector;
|
|
22
17
|
private readonly logger;
|
|
23
|
-
/** Map of job name -> command metadata */
|
|
24
18
|
private readonly commandMap;
|
|
25
|
-
/** Map of job name -> query metadata */
|
|
26
19
|
private readonly queryMap;
|
|
27
|
-
/** Map of entityType:jobName -> command metadata (for scoped routing) */
|
|
28
20
|
private readonly scopedCommandMap;
|
|
29
|
-
/** Map of entityType:jobName -> query metadata (for scoped routing) */
|
|
30
21
|
private readonly scopedQueryMap;
|
|
31
22
|
private commandBus;
|
|
32
23
|
private queryBus;
|
|
33
24
|
constructor(discoveryService: DiscoveryService, reflector: Reflector);
|
|
34
|
-
/**
|
|
35
|
-
* Set the CommandBus for executing commands
|
|
36
|
-
* Called by the module setup if @nestjs/cqrs is available
|
|
37
|
-
*/
|
|
38
25
|
setCommandBus(commandBus: ICommandBus): void;
|
|
39
|
-
/**
|
|
40
|
-
* Set the QueryBus for executing queries
|
|
41
|
-
* Called by the module setup if @nestjs/cqrs is available
|
|
42
|
-
*/
|
|
43
26
|
setQueryBus(queryBus: IQueryBus): void;
|
|
44
27
|
onModuleInit(): Promise<void>;
|
|
45
|
-
/**
|
|
46
|
-
* Discover all @JobCommand decorated classes
|
|
47
|
-
*/
|
|
48
28
|
private discoverCommands;
|
|
49
|
-
/**
|
|
50
|
-
* Discover all @JobQuery decorated classes
|
|
51
|
-
*/
|
|
52
29
|
private discoverQueries;
|
|
53
|
-
/**
|
|
54
|
-
* Check if a job name has a registered command or query
|
|
55
|
-
*/
|
|
56
30
|
hasHandler(jobName: string, entityType?: string): boolean;
|
|
57
|
-
/**
|
|
58
|
-
* Get command class for a job name
|
|
59
|
-
*/
|
|
60
31
|
getCommandClass(jobName: string, entityType?: string): Type<any> | undefined;
|
|
61
|
-
/**
|
|
62
|
-
* Get query class for a job name
|
|
63
|
-
*/
|
|
64
32
|
getQueryClass(jobName: string, entityType?: string): Type<any> | undefined;
|
|
65
|
-
|
|
66
|
-
* Execute a job by routing to the appropriate command or query
|
|
67
|
-
*
|
|
68
|
-
* @param job The BullMQ job
|
|
69
|
-
* @param entityId The entity ID (injected by the worker processor)
|
|
70
|
-
* @param entityType Optional entity type for scoped routing
|
|
71
|
-
* @returns The result of the command/query execution
|
|
72
|
-
* @throws Error if no handler is found
|
|
73
|
-
*/
|
|
74
|
-
executeJob(job: Job, entityId: string, entityType?: string): Promise<any>;
|
|
75
|
-
/**
|
|
76
|
-
* Instantiate a command/query class from job data
|
|
77
|
-
*/
|
|
33
|
+
executeJob(job: IJobLike, entityId: string, entityType?: string): Promise<any>;
|
|
78
34
|
private instantiateFromMetadata;
|
|
79
|
-
/**
|
|
80
|
-
* Get all registered job names (for debugging/documentation)
|
|
81
|
-
*/
|
|
82
35
|
getRegisteredJobNames(): {
|
|
83
36
|
commands: string[];
|
|
84
37
|
queries: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-discovery.service.d.ts","sourceRoot":"","sources":["../../../src/services/command-discovery/command-discovery.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,YAAY,EAAE,IAAI,EAAY,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"command-discovery.service.d.ts","sourceRoot":"","sources":["../../../src/services/command-discovery/command-discovery.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,YAAY,EAAE,IAAI,EAAY,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAQ3D,UAAU,WAAW;IACnB,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CACtC;AAED,UAAU,SAAS;IACjB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CACpC;AAED,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,qBACa,uBAAwB,YAAW,YAAY;IAY5C,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAZxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4C;IAEnE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyC;IACpE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuC;IAChE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAyC;IAC1E,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAuC;IAEtE,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,QAAQ,CAA0B;gBAGX,gBAAgB,EAAE,gBAAgB,EAClC,SAAS,EAAE,SAAS;IAGnD,aAAa,CAAC,UAAU,EAAE,WAAW,GAAG,IAAI;IAI5C,WAAW,CAAC,QAAQ,EAAE,SAAS,GAAG,IAAI;IAIhC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBnC,OAAO,CAAC,gBAAgB;IA4BxB,OAAO,CAAC,eAAe;IA4BvB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO;IAUzD,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS;IAS5E,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS;IASpE,UAAU,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAgDpF,OAAO,CAAC,uBAAuB;IA0B/B,qBAAqB,IAAI;QAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE;CAMnE"}
|
|
@@ -17,42 +17,21 @@ exports.CommandDiscoveryService = void 0;
|
|
|
17
17
|
const common_1 = require("@nestjs/common");
|
|
18
18
|
const core_1 = require("@nestjs/core");
|
|
19
19
|
const decorators_1 = require("../../decorators");
|
|
20
|
-
/**
|
|
21
|
-
* CommandDiscoveryService
|
|
22
|
-
*
|
|
23
|
-
* Discovers all classes decorated with @JobCommand and @JobQuery,
|
|
24
|
-
* builds a routing map, and provides auto-execution capabilities.
|
|
25
|
-
*
|
|
26
|
-
* This eliminates the need for @JobHandler boilerplate - commands
|
|
27
|
-
* decorated with @JobCommand are automatically routed and executed.
|
|
28
|
-
*/
|
|
29
20
|
let CommandDiscoveryService = CommandDiscoveryService_1 = class CommandDiscoveryService {
|
|
30
21
|
constructor(discoveryService, reflector) {
|
|
31
22
|
this.discoveryService = discoveryService;
|
|
32
23
|
this.reflector = reflector;
|
|
33
24
|
this.logger = new common_1.Logger(CommandDiscoveryService_1.name);
|
|
34
|
-
/** Map of job name -> command metadata */
|
|
35
25
|
this.commandMap = new Map();
|
|
36
|
-
/** Map of job name -> query metadata */
|
|
37
26
|
this.queryMap = new Map();
|
|
38
|
-
/** Map of entityType:jobName -> command metadata (for scoped routing) */
|
|
39
27
|
this.scopedCommandMap = new Map();
|
|
40
|
-
/** Map of entityType:jobName -> query metadata (for scoped routing) */
|
|
41
28
|
this.scopedQueryMap = new Map();
|
|
42
29
|
this.commandBus = null;
|
|
43
30
|
this.queryBus = null;
|
|
44
31
|
}
|
|
45
|
-
/**
|
|
46
|
-
* Set the CommandBus for executing commands
|
|
47
|
-
* Called by the module setup if @nestjs/cqrs is available
|
|
48
|
-
*/
|
|
49
32
|
setCommandBus(commandBus) {
|
|
50
33
|
this.commandBus = commandBus;
|
|
51
34
|
}
|
|
52
|
-
/**
|
|
53
|
-
* Set the QueryBus for executing queries
|
|
54
|
-
* Called by the module setup if @nestjs/cqrs is available
|
|
55
|
-
*/
|
|
56
35
|
setQueryBus(queryBus) {
|
|
57
36
|
this.queryBus = queryBus;
|
|
58
37
|
}
|
|
@@ -63,14 +42,10 @@ let CommandDiscoveryService = CommandDiscoveryService_1 = class CommandDiscovery
|
|
|
63
42
|
}
|
|
64
43
|
this.discoverCommands();
|
|
65
44
|
this.discoverQueries();
|
|
66
|
-
// Only log if any @JobCommand or @JobQuery classes were found
|
|
67
45
|
if (this.commandMap.size > 0 || this.queryMap.size > 0) {
|
|
68
46
|
this.logger.log(`Discovered ${this.commandMap.size} @JobCommand and ${this.queryMap.size} @JobQuery classes`);
|
|
69
47
|
}
|
|
70
48
|
}
|
|
71
|
-
/**
|
|
72
|
-
* Discover all @JobCommand decorated classes
|
|
73
|
-
*/
|
|
74
49
|
discoverCommands() {
|
|
75
50
|
if (!this.discoveryService)
|
|
76
51
|
return;
|
|
@@ -90,9 +65,6 @@ let CommandDiscoveryService = CommandDiscoveryService_1 = class CommandDiscovery
|
|
|
90
65
|
}
|
|
91
66
|
}
|
|
92
67
|
}
|
|
93
|
-
/**
|
|
94
|
-
* Discover all @JobQuery decorated classes
|
|
95
|
-
*/
|
|
96
68
|
discoverQueries() {
|
|
97
69
|
if (!this.discoveryService)
|
|
98
70
|
return;
|
|
@@ -112,9 +84,6 @@ let CommandDiscoveryService = CommandDiscoveryService_1 = class CommandDiscovery
|
|
|
112
84
|
}
|
|
113
85
|
}
|
|
114
86
|
}
|
|
115
|
-
/**
|
|
116
|
-
* Check if a job name has a registered command or query
|
|
117
|
-
*/
|
|
118
87
|
hasHandler(jobName, entityType) {
|
|
119
88
|
if (entityType) {
|
|
120
89
|
const scopedKey = `${entityType}:${jobName}`;
|
|
@@ -124,9 +93,6 @@ let CommandDiscoveryService = CommandDiscoveryService_1 = class CommandDiscovery
|
|
|
124
93
|
}
|
|
125
94
|
return this.commandMap.has(jobName) || this.queryMap.has(jobName);
|
|
126
95
|
}
|
|
127
|
-
/**
|
|
128
|
-
* Get command class for a job name
|
|
129
|
-
*/
|
|
130
96
|
getCommandClass(jobName, entityType) {
|
|
131
97
|
if (entityType) {
|
|
132
98
|
const scopedKey = `${entityType}:${jobName}`;
|
|
@@ -136,9 +102,6 @@ let CommandDiscoveryService = CommandDiscoveryService_1 = class CommandDiscovery
|
|
|
136
102
|
}
|
|
137
103
|
return this.commandMap.get(jobName)?.targetClass;
|
|
138
104
|
}
|
|
139
|
-
/**
|
|
140
|
-
* Get query class for a job name
|
|
141
|
-
*/
|
|
142
105
|
getQueryClass(jobName, entityType) {
|
|
143
106
|
if (entityType) {
|
|
144
107
|
const scopedKey = `${entityType}:${jobName}`;
|
|
@@ -148,18 +111,8 @@ let CommandDiscoveryService = CommandDiscoveryService_1 = class CommandDiscovery
|
|
|
148
111
|
}
|
|
149
112
|
return this.queryMap.get(jobName)?.targetClass;
|
|
150
113
|
}
|
|
151
|
-
/**
|
|
152
|
-
* Execute a job by routing to the appropriate command or query
|
|
153
|
-
*
|
|
154
|
-
* @param job The BullMQ job
|
|
155
|
-
* @param entityId The entity ID (injected by the worker processor)
|
|
156
|
-
* @param entityType Optional entity type for scoped routing
|
|
157
|
-
* @returns The result of the command/query execution
|
|
158
|
-
* @throws Error if no handler is found
|
|
159
|
-
*/
|
|
160
114
|
async executeJob(job, entityId, entityType) {
|
|
161
115
|
const jobName = job.name;
|
|
162
|
-
// Try command first (check scoped, then global)
|
|
163
116
|
let commandMeta;
|
|
164
117
|
if (entityType) {
|
|
165
118
|
commandMeta = this.scopedCommandMap.get(`${entityType}:${jobName}`);
|
|
@@ -175,7 +128,6 @@ let CommandDiscoveryService = CommandDiscoveryService_1 = class CommandDiscovery
|
|
|
175
128
|
this.logger.debug(`Executing command ${commandMeta.targetClass.name} for job ${jobName}`);
|
|
176
129
|
return this.commandBus.execute(command);
|
|
177
130
|
}
|
|
178
|
-
// Try query (check scoped, then global)
|
|
179
131
|
let queryMeta;
|
|
180
132
|
if (entityType) {
|
|
181
133
|
queryMeta = this.scopedQueryMap.get(`${entityType}:${jobName}`);
|
|
@@ -191,35 +143,24 @@ let CommandDiscoveryService = CommandDiscoveryService_1 = class CommandDiscovery
|
|
|
191
143
|
this.logger.debug(`Executing query ${queryMeta.targetClass.name} for job ${jobName}`);
|
|
192
144
|
return this.queryBus.execute(query);
|
|
193
145
|
}
|
|
194
|
-
// No handler found
|
|
195
146
|
return undefined;
|
|
196
147
|
}
|
|
197
|
-
/**
|
|
198
|
-
* Instantiate a command/query class from job data
|
|
199
|
-
*/
|
|
200
148
|
instantiateFromMetadata(metadata, entityId, jobData) {
|
|
201
149
|
const { targetClass, paramNames, entityIdParam } = metadata;
|
|
202
|
-
// Build constructor arguments
|
|
203
150
|
const args = [];
|
|
204
151
|
for (let i = 0; i < paramNames.length; i++) {
|
|
205
152
|
const paramName = paramNames[i];
|
|
206
|
-
// Check if this param is the entityId
|
|
207
153
|
const isEntityIdParam = (typeof entityIdParam === 'number' && i === entityIdParam) ||
|
|
208
154
|
(typeof entityIdParam === 'string' && paramName === entityIdParam);
|
|
209
155
|
if (isEntityIdParam) {
|
|
210
156
|
args.push(entityId);
|
|
211
157
|
}
|
|
212
158
|
else {
|
|
213
|
-
// Get from job data using param name
|
|
214
159
|
args.push(jobData[paramName]);
|
|
215
160
|
}
|
|
216
161
|
}
|
|
217
|
-
// Instantiate the class
|
|
218
162
|
return new targetClass(...args);
|
|
219
163
|
}
|
|
220
|
-
/**
|
|
221
|
-
* Get all registered job names (for debugging/documentation)
|
|
222
|
-
*/
|
|
223
164
|
getRegisteredJobNames() {
|
|
224
165
|
return {
|
|
225
166
|
commands: Array.from(this.commandMap.keys()),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-discovery.service.js","sourceRoot":"","sources":["../../../src/services/command-discovery/command-discovery.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAkF;AAClF,uCAA2D;
|
|
1
|
+
{"version":3,"file":"command-discovery.service.js","sourceRoot":"","sources":["../../../src/services/command-discovery/command-discovery.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*/
|
|
4
|
-
/** Redis client injection token */
|
|
5
|
-
export declare const ATOMIC_QUEUES_REDIS: unique symbol;
|
|
6
|
-
/** Module configuration injection token */
|
|
7
|
-
export declare const ATOMIC_QUEUES_CONFIG: unique symbol;
|
|
8
|
-
/** Async module options injection token */
|
|
9
|
-
export declare const ATOMIC_QUEUES_MODULE_OPTIONS: unique symbol;
|
|
1
|
+
export declare const ATOMIC_QUEUES_REDIS = "ATOMIC_QUEUES_REDIS";
|
|
2
|
+
export declare const ATOMIC_QUEUES_CONFIG = "ATOMIC_QUEUES_CONFIG";
|
|
10
3
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/services/constants.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/services/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AACzD,eAAO,MAAM,oBAAoB,yBAAyB,CAAC"}
|
|
@@ -1,13 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Injection tokens for AtomicQueues module
|
|
4
|
-
*/
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
7
|
-
|
|
8
|
-
exports.
|
|
9
|
-
/** Module configuration injection token */
|
|
10
|
-
exports.ATOMIC_QUEUES_CONFIG = Symbol('ATOMIC_QUEUES_CONFIG');
|
|
11
|
-
/** Async module options injection token */
|
|
12
|
-
exports.ATOMIC_QUEUES_MODULE_OPTIONS = Symbol('ATOMIC_QUEUES_MODULE_OPTIONS');
|
|
3
|
+
exports.ATOMIC_QUEUES_CONFIG = exports.ATOMIC_QUEUES_REDIS = void 0;
|
|
4
|
+
exports.ATOMIC_QUEUES_REDIS = 'ATOMIC_QUEUES_REDIS';
|
|
5
|
+
exports.ATOMIC_QUEUES_CONFIG = 'ATOMIC_QUEUES_CONFIG';
|
|
13
6
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/services/constants.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/services/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,mBAAmB,GAAG,qBAAqB,CAAC;AAC5C,QAAA,oBAAoB,GAAG,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { OnModuleInit, OnApplicationShutdown } from '@nestjs/common';
|
|
2
|
+
import Redis from 'ioredis';
|
|
3
|
+
import { IAtomicQueuesModuleConfig } from '../../domain';
|
|
4
|
+
import { SchedulerService } from '../scheduler';
|
|
5
|
+
import { GateService } from '../gate';
|
|
6
|
+
import { LogService } from '../log';
|
|
7
|
+
import { HandlerExecutor } from '../handler-executor';
|
|
8
|
+
import { ActorRegistry } from '../actor-registry';
|
|
9
|
+
export declare class ExecutorPoolService implements OnModuleInit, OnApplicationShutdown {
|
|
10
|
+
private readonly redis;
|
|
11
|
+
private readonly config;
|
|
12
|
+
private readonly scheduler;
|
|
13
|
+
private readonly gateService;
|
|
14
|
+
private readonly logService;
|
|
15
|
+
private readonly handlerExecutor;
|
|
16
|
+
private readonly actorRegistry;
|
|
17
|
+
private readonly logger;
|
|
18
|
+
private readonly keyPrefix;
|
|
19
|
+
private readonly poolSize;
|
|
20
|
+
private activeExecutors;
|
|
21
|
+
private running;
|
|
22
|
+
private subscriberClient;
|
|
23
|
+
constructor(redis: Redis, config: IAtomicQueuesModuleConfig, scheduler: SchedulerService, gateService: GateService, logService: LogService, handlerExecutor: HandlerExecutor, actorRegistry: ActorRegistry);
|
|
24
|
+
onModuleInit(): Promise<void>;
|
|
25
|
+
onApplicationShutdown(): Promise<void>;
|
|
26
|
+
tickle(): Promise<void>;
|
|
27
|
+
private tryDispatch;
|
|
28
|
+
private executeMessage;
|
|
29
|
+
private publishResult;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=executor-pool.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor-pool.service.d.ts","sourceRoot":"","sources":["../../../src/services/executor-pool/executor-pool.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,YAAY,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACjG,OAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAEzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,qBACa,mBAAoB,YAAW,YAAY,EAAE,qBAAqB;IAS9C,OAAO,CAAC,QAAQ,CAAC,KAAK;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACrD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAdhC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwC;IAC/D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,gBAAgB,CAAsB;gBAGE,KAAK,EAAE,KAAK,EACX,MAAM,EAAE,yBAAyB,EAC/D,SAAS,EAAE,gBAAgB,EAC3B,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,aAAa;IAMzC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAe7B,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBtC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;YAKf,WAAW;YAgBX,cAAc;YAyCd,aAAa;CAQ5B"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
15
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
16
|
+
};
|
|
17
|
+
var ExecutorPoolService_1;
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.ExecutorPoolService = void 0;
|
|
20
|
+
const common_1 = require("@nestjs/common");
|
|
21
|
+
const ioredis_1 = __importDefault(require("ioredis"));
|
|
22
|
+
const utils_1 = require("../../utils");
|
|
23
|
+
const scheduler_1 = require("../scheduler");
|
|
24
|
+
const gate_1 = require("../gate");
|
|
25
|
+
const log_1 = require("../log");
|
|
26
|
+
const handler_executor_1 = require("../handler-executor");
|
|
27
|
+
const actor_registry_1 = require("../actor-registry");
|
|
28
|
+
const constants_1 = require("../constants");
|
|
29
|
+
let ExecutorPoolService = ExecutorPoolService_1 = class ExecutorPoolService {
|
|
30
|
+
constructor(redis, config, scheduler, gateService, logService, handlerExecutor, actorRegistry) {
|
|
31
|
+
this.redis = redis;
|
|
32
|
+
this.config = config;
|
|
33
|
+
this.scheduler = scheduler;
|
|
34
|
+
this.gateService = gateService;
|
|
35
|
+
this.logService = logService;
|
|
36
|
+
this.handlerExecutor = handlerExecutor;
|
|
37
|
+
this.actorRegistry = actorRegistry;
|
|
38
|
+
this.logger = new common_1.Logger(ExecutorPoolService_1.name);
|
|
39
|
+
this.activeExecutors = 0;
|
|
40
|
+
this.running = false;
|
|
41
|
+
this.subscriberClient = null;
|
|
42
|
+
this.keyPrefix = (0, utils_1.resolveKeyPrefix)(config);
|
|
43
|
+
this.poolSize = config.executor?.poolSize ?? 1;
|
|
44
|
+
}
|
|
45
|
+
async onModuleInit() {
|
|
46
|
+
this.running = true;
|
|
47
|
+
this.subscriberClient = this.redis.duplicate();
|
|
48
|
+
const tickleChannel = `${this.keyPrefix}:tickle`;
|
|
49
|
+
await this.subscriberClient.subscribe(tickleChannel);
|
|
50
|
+
this.subscriberClient.on('message', (_channel, _msg) => {
|
|
51
|
+
this.tryDispatch();
|
|
52
|
+
});
|
|
53
|
+
this.logger.log(`Executor pool started with poolSize=${this.poolSize}`);
|
|
54
|
+
this.tryDispatch();
|
|
55
|
+
}
|
|
56
|
+
async onApplicationShutdown() {
|
|
57
|
+
this.running = false;
|
|
58
|
+
if (this.subscriberClient) {
|
|
59
|
+
await this.subscriberClient.unsubscribe();
|
|
60
|
+
await this.subscriberClient.quit();
|
|
61
|
+
}
|
|
62
|
+
const maxWait = 30000;
|
|
63
|
+
const start = Date.now();
|
|
64
|
+
while (this.activeExecutors > 0 && Date.now() - start < maxWait) {
|
|
65
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
66
|
+
}
|
|
67
|
+
if (this.activeExecutors > 0) {
|
|
68
|
+
this.logger.warn(`Shutdown with ${this.activeExecutors} active executors still running`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async tickle() {
|
|
72
|
+
const tickleChannel = `${this.keyPrefix}:tickle`;
|
|
73
|
+
await this.redis.publish(tickleChannel, '1');
|
|
74
|
+
}
|
|
75
|
+
async tryDispatch() {
|
|
76
|
+
while (this.running && this.activeExecutors < this.poolSize) {
|
|
77
|
+
const result = await this.scheduler.pickNext();
|
|
78
|
+
if (!result)
|
|
79
|
+
break;
|
|
80
|
+
this.activeExecutors++;
|
|
81
|
+
this.executeMessage(result.entityKey, result.message, result.ownerToken)
|
|
82
|
+
.finally(() => {
|
|
83
|
+
this.activeExecutors--;
|
|
84
|
+
if (this.running) {
|
|
85
|
+
this.tryDispatch();
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
async executeMessage(entityKey, message, ownerToken) {
|
|
91
|
+
const entityType = message.entityType;
|
|
92
|
+
const entityId = message.entityId;
|
|
93
|
+
const ttl = this.gateService.getTTLForEntity(entityType);
|
|
94
|
+
const refreshInterval = this.config.executor?.gateRefreshInterval ?? (ttl * 500);
|
|
95
|
+
const refresher = setInterval(async () => {
|
|
96
|
+
try {
|
|
97
|
+
await this.gateService.extend(entityKey, ttl);
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
this.logger.error(`Gate refresh failed for ${entityKey}: ${err.message}`);
|
|
101
|
+
}
|
|
102
|
+
}, refreshInterval);
|
|
103
|
+
try {
|
|
104
|
+
if (this.actorRegistry.hasActor(entityType)) {
|
|
105
|
+
const actor = await this.actorRegistry.getOrCreateInstance(entityType, entityId);
|
|
106
|
+
const methodName = this.actorRegistry.getHandlerMethod(entityType, message.name);
|
|
107
|
+
if (actor && methodName) {
|
|
108
|
+
const result = await actor[methodName]({ ...message.data });
|
|
109
|
+
await this.publishResult(message, result);
|
|
110
|
+
await this.scheduler.complete(entityKey);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
const result = await this.handlerExecutor.execute(message, entityKey);
|
|
115
|
+
await this.publishResult(message, result);
|
|
116
|
+
await this.scheduler.complete(entityKey);
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
await this.scheduler.fail(entityKey, message, err);
|
|
120
|
+
await this.publishResult(message, undefined, err);
|
|
121
|
+
}
|
|
122
|
+
finally {
|
|
123
|
+
clearInterval(refresher);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
async publishResult(message, result, error) {
|
|
127
|
+
if (!message.correlationId)
|
|
128
|
+
return;
|
|
129
|
+
const channel = `${this.keyPrefix}:results:${message.correlationId}`;
|
|
130
|
+
const payload = error
|
|
131
|
+
? JSON.stringify({ error: error.message })
|
|
132
|
+
: JSON.stringify({ result });
|
|
133
|
+
await this.redis.publish(channel, payload);
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
exports.ExecutorPoolService = ExecutorPoolService;
|
|
137
|
+
exports.ExecutorPoolService = ExecutorPoolService = ExecutorPoolService_1 = __decorate([
|
|
138
|
+
(0, common_1.Injectable)(),
|
|
139
|
+
__param(0, (0, common_1.Inject)(constants_1.ATOMIC_QUEUES_REDIS)),
|
|
140
|
+
__param(1, (0, common_1.Inject)(constants_1.ATOMIC_QUEUES_CONFIG)),
|
|
141
|
+
__metadata("design:paramtypes", [ioredis_1.default, Object, scheduler_1.SchedulerService,
|
|
142
|
+
gate_1.GateService,
|
|
143
|
+
log_1.LogService,
|
|
144
|
+
handler_executor_1.HandlerExecutor,
|
|
145
|
+
actor_registry_1.ActorRegistry])
|
|
146
|
+
], ExecutorPoolService);
|
|
147
|
+
//# sourceMappingURL=executor-pool.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor-pool.service.js","sourceRoot":"","sources":["../../../src/services/executor-pool/executor-pool.service.ts"],"names":[],"mappings":"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"}
|