pp-command-bus 1.5.0 → 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 +400 -1219
- package/dist/command-bus/command-bus.spec.js +138 -359
- package/dist/command-bus/command-bus.spec.js.map +1 -1
- package/dist/command-bus/command.d.ts +3 -4
- package/dist/command-bus/command.js +3 -32
- package/dist/command-bus/command.js.map +1 -1
- package/dist/command-bus/config/command-bus-config.d.ts +75 -21
- package/dist/command-bus/config/command-bus-config.js +99 -58
- package/dist/command-bus/config/command-bus-config.js.map +1 -1
- package/dist/command-bus/config/command-bus-config.spec.js +174 -100
- package/dist/command-bus/config/command-bus-config.spec.js.map +1 -1
- package/dist/command-bus/index.d.ts +39 -52
- package/dist/command-bus/index.js +133 -126
- package/dist/command-bus/index.js.map +1 -1
- package/dist/command-bus/logging/command-logger.d.ts +2 -0
- package/dist/command-bus/logging/command-logger.js +7 -0
- package/dist/command-bus/logging/command-logger.js.map +1 -1
- package/dist/command-bus/logging/command-logger.spec.js +36 -0
- package/dist/command-bus/logging/command-logger.spec.js.map +1 -1
- package/dist/command-bus/serialization/index.d.ts +6 -0
- package/dist/command-bus/serialization/index.js +9 -0
- package/dist/command-bus/serialization/index.js.map +1 -0
- package/dist/command-bus/serialization/msgpack-serializer.d.ts +26 -0
- package/dist/command-bus/serialization/msgpack-serializer.js +70 -0
- package/dist/command-bus/serialization/msgpack-serializer.js.map +1 -0
- package/dist/command-bus/serialization/msgpack-serializer.spec.js +223 -0
- package/dist/command-bus/serialization/msgpack-serializer.spec.js.map +1 -0
- package/dist/command-bus/serialization/serializer.interface.d.ts +21 -0
- package/dist/command-bus/serialization/serializer.interface.js +3 -0
- package/dist/command-bus/serialization/serializer.interface.js.map +1 -0
- package/dist/command-bus/transport/consumer-loop.d.ts +45 -0
- package/dist/command-bus/transport/consumer-loop.js +90 -0
- package/dist/command-bus/transport/consumer-loop.js.map +1 -0
- package/dist/command-bus/transport/consumer-loop.spec.js +216 -0
- package/dist/command-bus/transport/consumer-loop.spec.js.map +1 -0
- package/dist/command-bus/transport/index.d.ts +21 -0
- package/dist/command-bus/transport/index.js +23 -0
- package/dist/command-bus/transport/index.js.map +1 -0
- package/dist/command-bus/transport/message-processor.d.ts +59 -0
- package/dist/command-bus/transport/message-processor.js +111 -0
- package/dist/command-bus/transport/message-processor.js.map +1 -0
- package/dist/command-bus/transport/message-processor.spec.js +185 -0
- package/dist/command-bus/transport/message-processor.spec.js.map +1 -0
- package/dist/command-bus/transport/pending-recovery.d.ts +54 -0
- package/dist/command-bus/transport/pending-recovery.js +139 -0
- package/dist/command-bus/transport/pending-recovery.js.map +1 -0
- package/dist/command-bus/transport/pending-recovery.spec.js +176 -0
- package/dist/command-bus/transport/pending-recovery.spec.js.map +1 -0
- package/dist/command-bus/transport/redis-codec.d.ts +24 -0
- package/dist/command-bus/transport/redis-codec.js +33 -0
- package/dist/command-bus/transport/redis-codec.js.map +1 -0
- package/dist/command-bus/transport/redis-codec.spec.js +53 -0
- package/dist/command-bus/transport/redis-codec.spec.js.map +1 -0
- package/dist/command-bus/transport/redis-streams-transport.d.ts +91 -0
- package/dist/command-bus/transport/redis-streams-transport.js +134 -0
- package/dist/command-bus/transport/redis-streams-transport.js.map +1 -0
- package/dist/command-bus/transport/redis-streams-transport.spec.js +420 -0
- package/dist/command-bus/transport/redis-streams-transport.spec.js.map +1 -0
- package/dist/command-bus/transport/rpc-handler.d.ts +39 -0
- package/dist/command-bus/transport/rpc-handler.js +87 -0
- package/dist/command-bus/transport/rpc-handler.js.map +1 -0
- package/dist/command-bus/transport/rpc-handler.spec.js +157 -0
- package/dist/command-bus/transport/rpc-handler.spec.js.map +1 -0
- package/dist/command-bus/transport/stream-consumer.d.ts +89 -0
- package/dist/command-bus/transport/stream-consumer.js +181 -0
- package/dist/command-bus/transport/stream-consumer.js.map +1 -0
- package/dist/command-bus/transport/stream-consumer.spec.js +284 -0
- package/dist/command-bus/transport/stream-consumer.spec.js.map +1 -0
- package/dist/command-bus/transport/stream-producer.d.ts +23 -0
- package/dist/command-bus/transport/stream-producer.js +70 -0
- package/dist/command-bus/transport/stream-producer.js.map +1 -0
- package/dist/command-bus/transport/stream-producer.spec.js +125 -0
- package/dist/command-bus/transport/stream-producer.spec.js.map +1 -0
- package/dist/command-bus/transport/transport.interface.d.ts +87 -0
- package/dist/command-bus/transport/transport.interface.js +3 -0
- package/dist/command-bus/transport/transport.interface.js.map +1 -0
- package/dist/command-bus/types/index.d.ts +0 -84
- package/dist/examples/rpc.demo.js +1 -1
- package/dist/examples/rpc.demo.js.map +1 -1
- package/dist/index.d.ts +8 -5
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/dist/pp-command-bus-2.0.0.tgz +0 -0
- package/dist/shared/redis/connection-pool.d.ts +54 -0
- package/dist/shared/redis/connection-pool.js +117 -0
- package/dist/shared/redis/connection-pool.js.map +1 -0
- package/dist/shared/redis/connection-pool.spec.js +114 -0
- package/dist/shared/redis/connection-pool.spec.js.map +1 -0
- package/dist/shared/redis/index.d.ts +5 -3
- package/dist/shared/redis/index.js +6 -4
- package/dist/shared/redis/index.js.map +1 -1
- package/dist/shared/redis/rpc-connection-pool.d.ts +61 -0
- package/dist/shared/redis/rpc-connection-pool.js +154 -0
- package/dist/shared/redis/rpc-connection-pool.js.map +1 -0
- package/dist/shared/redis/rpc-connection-pool.spec.d.ts +1 -0
- package/dist/shared/redis/rpc-connection-pool.spec.js +173 -0
- package/dist/shared/redis/rpc-connection-pool.spec.js.map +1 -0
- package/dist/shared/types.d.ts +0 -4
- package/dist/shared/utils/error-utils.d.ts +8 -0
- package/dist/shared/utils/error-utils.js +14 -0
- package/dist/shared/utils/error-utils.js.map +1 -0
- package/package.json +12 -12
- package/dist/command-bus/config/auto-config-optimizer.d.ts +0 -35
- package/dist/command-bus/config/auto-config-optimizer.js +0 -52
- package/dist/command-bus/config/auto-config-optimizer.js.map +0 -1
- package/dist/command-bus/config/auto-config-optimizer.spec.js +0 -42
- package/dist/command-bus/config/auto-config-optimizer.spec.js.map +0 -1
- package/dist/command-bus/job/index.d.ts +0 -6
- package/dist/command-bus/job/index.js +0 -15
- package/dist/command-bus/job/index.js.map +0 -1
- package/dist/command-bus/job/job-options-builder.d.ts +0 -21
- package/dist/command-bus/job/job-options-builder.js +0 -58
- package/dist/command-bus/job/job-options-builder.js.map +0 -1
- package/dist/command-bus/job/job-options-builder.spec.js +0 -156
- package/dist/command-bus/job/job-options-builder.spec.js.map +0 -1
- package/dist/command-bus/job/job-processor.d.ts +0 -39
- package/dist/command-bus/job/job-processor.js +0 -203
- package/dist/command-bus/job/job-processor.js.map +0 -1
- package/dist/command-bus/job/job-processor.spec.js +0 -436
- package/dist/command-bus/job/job-processor.spec.js.map +0 -1
- package/dist/command-bus/queue/index.d.ts +0 -5
- package/dist/command-bus/queue/index.js +0 -13
- package/dist/command-bus/queue/index.js.map +0 -1
- package/dist/command-bus/queue/queue-manager.d.ts +0 -56
- package/dist/command-bus/queue/queue-manager.js +0 -163
- package/dist/command-bus/queue/queue-manager.js.map +0 -1
- package/dist/command-bus/queue/queue-manager.spec.js +0 -371
- package/dist/command-bus/queue/queue-manager.spec.js.map +0 -1
- package/dist/command-bus/rpc/index.d.ts +0 -11
- package/dist/command-bus/rpc/index.js +0 -19
- package/dist/command-bus/rpc/index.js.map +0 -1
- package/dist/command-bus/rpc/payload-compression.service.d.ts +0 -50
- package/dist/command-bus/rpc/payload-compression.service.js +0 -215
- package/dist/command-bus/rpc/payload-compression.service.js.map +0 -1
- package/dist/command-bus/rpc/payload-compression.service.spec.js +0 -376
- package/dist/command-bus/rpc/payload-compression.service.spec.js.map +0 -1
- package/dist/command-bus/rpc/rpc-coordinator.d.ts +0 -96
- package/dist/command-bus/rpc/rpc-coordinator.js +0 -500
- package/dist/command-bus/rpc/rpc-coordinator.js.map +0 -1
- package/dist/command-bus/rpc/rpc-coordinator.spec.js +0 -621
- package/dist/command-bus/rpc/rpc-coordinator.spec.js.map +0 -1
- package/dist/command-bus/rpc/rpc-job-cancellation.service.d.ts +0 -82
- package/dist/command-bus/rpc/rpc-job-cancellation.service.js +0 -180
- package/dist/command-bus/rpc/rpc-job-cancellation.service.js.map +0 -1
- package/dist/command-bus/rpc/rpc-job-cancellation.service.spec.js +0 -286
- package/dist/command-bus/rpc/rpc-job-cancellation.service.spec.js.map +0 -1
- package/dist/command-bus/worker/index.d.ts +0 -10
- package/dist/command-bus/worker/index.js +0 -19
- package/dist/command-bus/worker/index.js.map +0 -1
- package/dist/command-bus/worker/worker-benchmark.d.ts +0 -71
- package/dist/command-bus/worker/worker-benchmark.js +0 -202
- package/dist/command-bus/worker/worker-benchmark.js.map +0 -1
- package/dist/command-bus/worker/worker-benchmark.spec.js +0 -310
- package/dist/command-bus/worker/worker-benchmark.spec.js.map +0 -1
- package/dist/command-bus/worker/worker-metrics-collector.d.ts +0 -98
- package/dist/command-bus/worker/worker-metrics-collector.js +0 -242
- package/dist/command-bus/worker/worker-metrics-collector.js.map +0 -1
- package/dist/command-bus/worker/worker-orchestrator.d.ts +0 -70
- package/dist/command-bus/worker/worker-orchestrator.js +0 -339
- package/dist/command-bus/worker/worker-orchestrator.js.map +0 -1
- package/dist/command-bus/worker/worker-orchestrator.spec.js +0 -712
- package/dist/command-bus/worker/worker-orchestrator.spec.js.map +0 -1
- package/dist/examples/auto-config.demo.d.ts +0 -9
- package/dist/examples/auto-config.demo.js +0 -106
- package/dist/examples/auto-config.demo.js.map +0 -1
- package/dist/examples/rpc-compression.demo.d.ts +0 -5
- package/dist/examples/rpc-compression.demo.js +0 -358
- package/dist/examples/rpc-compression.demo.js.map +0 -1
- package/dist/examples/rpc-resilience.demo.d.ts +0 -15
- package/dist/examples/rpc-resilience.demo.js +0 -233
- package/dist/examples/rpc-resilience.demo.js.map +0 -1
- package/dist/pp-command-bus-1.5.0.tgz +0 -0
- package/dist/shared/config/base-config.d.ts +0 -54
- package/dist/shared/config/base-config.js +0 -114
- package/dist/shared/config/base-config.js.map +0 -1
- package/dist/shared/config/base-config.spec.js +0 -204
- package/dist/shared/config/base-config.spec.js.map +0 -1
- package/dist/shared/config/index.d.ts +0 -1
- package/dist/shared/config/index.js +0 -9
- package/dist/shared/config/index.js.map +0 -1
- package/dist/shared/redis/redis-connection-factory.d.ts +0 -66
- package/dist/shared/redis/redis-connection-factory.js +0 -113
- package/dist/shared/redis/redis-connection-factory.js.map +0 -1
- /package/dist/command-bus/{config/auto-config-optimizer.spec.d.ts → serialization/msgpack-serializer.spec.d.ts} +0 -0
- /package/dist/command-bus/{job/job-options-builder.spec.d.ts → transport/consumer-loop.spec.d.ts} +0 -0
- /package/dist/command-bus/{job/job-processor.spec.d.ts → transport/message-processor.spec.d.ts} +0 -0
- /package/dist/command-bus/{queue/queue-manager.spec.d.ts → transport/pending-recovery.spec.d.ts} +0 -0
- /package/dist/command-bus/{rpc/payload-compression.service.spec.d.ts → transport/redis-codec.spec.d.ts} +0 -0
- /package/dist/command-bus/{rpc/rpc-coordinator.spec.d.ts → transport/redis-streams-transport.spec.d.ts} +0 -0
- /package/dist/command-bus/{rpc/rpc-job-cancellation.service.spec.d.ts → transport/rpc-handler.spec.d.ts} +0 -0
- /package/dist/command-bus/{worker/worker-benchmark.spec.d.ts → transport/stream-consumer.spec.d.ts} +0 -0
- /package/dist/command-bus/{worker/worker-orchestrator.spec.d.ts → transport/stream-producer.spec.d.ts} +0 -0
- /package/dist/shared/{config/base-config.spec.d.ts → redis/connection-pool.spec.d.ts} +0 -0
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import type { Redis } from 'ioredis';
|
|
2
|
-
import type { ILogger } from '../../shared/types';
|
|
3
|
-
import type { RpcMetadata, CompressibleCommand } from '../types';
|
|
4
|
-
import type Command from '../command';
|
|
5
|
-
import type PayloadCompressionService from './payload-compression.service';
|
|
6
|
-
import type RpcJobCancellationService from './rpc-job-cancellation.service';
|
|
7
|
-
import type { RemoveJobCallback } from './rpc-job-cancellation.service';
|
|
8
|
-
/**
|
|
9
|
-
* Zarządza lifecycle wywołań RPC przez Redis Pub/Sub
|
|
10
|
-
* Używa shared subscriber z pattern matching dla multiplexingu odpowiedzi
|
|
11
|
-
*/
|
|
12
|
-
export default class RpcCoordinator {
|
|
13
|
-
private readonly logger;
|
|
14
|
-
private readonly redisConnection;
|
|
15
|
-
private readonly compressionService;
|
|
16
|
-
private readonly cancellationService?;
|
|
17
|
-
private readonly removeJobCallback?;
|
|
18
|
-
/**
|
|
19
|
-
* UUID procesu Node.js (współdzielony przez wszystkie instancje w procesie)
|
|
20
|
-
*/
|
|
21
|
-
private readonly processInstanceId;
|
|
22
|
-
/**
|
|
23
|
-
* Shared subscriber dla wszystkich RPC calls w tym procesie
|
|
24
|
-
*/
|
|
25
|
-
private sharedSubscriber;
|
|
26
|
-
/**
|
|
27
|
-
* Mapa pending RPC calls - routing odpowiedzi do promises
|
|
28
|
-
*/
|
|
29
|
-
private pendingCalls;
|
|
30
|
-
/**
|
|
31
|
-
* Promise dla oczekiwania na gotowość subscribera
|
|
32
|
-
*/
|
|
33
|
-
private subscriberReadyPromise;
|
|
34
|
-
constructor(logger: ILogger, redisConnection: Redis, compressionService: PayloadCompressionService, cancellationService?: RpcJobCancellationService | undefined, removeJobCallback?: RemoveJobCallback | undefined);
|
|
35
|
-
/**
|
|
36
|
-
* Konfiguruje shared subscriber dla wszystkich RPC calls
|
|
37
|
-
*/
|
|
38
|
-
private setupSharedSubscriber;
|
|
39
|
-
/**
|
|
40
|
-
* Oczekuje na gotowość subscribera z timeoutem
|
|
41
|
-
* @param timeout - Timeout w milisekundach
|
|
42
|
-
* @throws Error gdy subscriber nie jest gotowy w czasie
|
|
43
|
-
*/
|
|
44
|
-
private waitForSubscriberReady;
|
|
45
|
-
/**
|
|
46
|
-
* Przygotowuje komendę RPC z odpowiednimi metadanymi
|
|
47
|
-
* ResponseChannel jest konstruowany automatycznie z processInstanceId dla izolacji między procesami
|
|
48
|
-
* Akceptuje zarówno Command jak i CompressibleCommand
|
|
49
|
-
* @param command - Komenda do wysłania (może być skompresowana)
|
|
50
|
-
* @returns Komenda z metadanymi RPC
|
|
51
|
-
*/
|
|
52
|
-
prepareRpcCommand<T extends Command | CompressibleCommand>(command: T): T & {
|
|
53
|
-
__rpcMetadata: RpcMetadata;
|
|
54
|
-
};
|
|
55
|
-
/**
|
|
56
|
-
* Rejestruje nowe wywołanie RPC z timeoutem
|
|
57
|
-
* @param correlationId - Unikalny ID wywołania
|
|
58
|
-
* @param commandName - Nazwa komendy
|
|
59
|
-
* @param timeout - Timeout w milisekundach
|
|
60
|
-
* @returns Promise odpowiedzi RPC
|
|
61
|
-
*/
|
|
62
|
-
registerCall<T>(correlationId: string, commandName: string, timeout: number): Promise<Promise<T>>;
|
|
63
|
-
/**
|
|
64
|
-
* Obsługuje wiadomość RPC z Redis Pub/Sub
|
|
65
|
-
* @param channel - Kanał: rpc:response:{processId}:{correlationId}
|
|
66
|
-
* @param message - Odpowiedź RPC (JSON)
|
|
67
|
-
*/
|
|
68
|
-
private handleRpcMessage;
|
|
69
|
-
/**
|
|
70
|
-
* Ustawia jobId i queueName dla istniejącego pending call
|
|
71
|
-
* Wywoływane przez CommandBus po dodaniu joba do kolejki
|
|
72
|
-
*
|
|
73
|
-
* Umożliwia usunięcie joba przy timeout (jeśli jeszcze nie został podjęty)
|
|
74
|
-
*
|
|
75
|
-
* @param correlationId - ID korelacji RPC (command.__id)
|
|
76
|
-
* @param jobId - ID joba w BullMQ
|
|
77
|
-
* @param queueName - Nazwa kolejki (commandName)
|
|
78
|
-
*/
|
|
79
|
-
setJobId(correlationId: string, jobId: string, queueName: string): void;
|
|
80
|
-
/**
|
|
81
|
-
* Obsługuje timeout RPC - próbuje usunąć job z kolejki
|
|
82
|
-
*
|
|
83
|
-
* Wywoływana asynchronicznie przy timeout - NIE blokuje reject promise.
|
|
84
|
-
* Jest to optymalizacja zasobów, nie kluczowa operacja.
|
|
85
|
-
*
|
|
86
|
-
* @param correlationId - ID korelacji RPC
|
|
87
|
-
* @param pendingCall - Dane pending call (już usunięte z mapy)
|
|
88
|
-
* @param commandName - Nazwa komendy (do logowania)
|
|
89
|
-
*/
|
|
90
|
-
private handleTimeout;
|
|
91
|
-
/**
|
|
92
|
-
* Zamyka RpcCoordinator i czyści zasoby
|
|
93
|
-
* Reject wszystkie pending calls i zamknij shared subscriber
|
|
94
|
-
*/
|
|
95
|
-
close(): Promise<void>;
|
|
96
|
-
}
|
|
@@ -1,500 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
const crypto_1 = require("crypto");
|
|
13
|
-
const redis_1 = require("../../shared/redis");
|
|
14
|
-
/**
|
|
15
|
-
* UUID per proces Node.js - współdzielony przez wszystkie instancje CommandBus
|
|
16
|
-
* Zapewnia izolację odpowiedzi RPC między różnymi procesami
|
|
17
|
-
*/
|
|
18
|
-
const PROCESS_INSTANCE_ID = (0, crypto_1.randomUUID)();
|
|
19
|
-
/**
|
|
20
|
-
* Zarządza lifecycle wywołań RPC przez Redis Pub/Sub
|
|
21
|
-
* Używa shared subscriber z pattern matching dla multiplexingu odpowiedzi
|
|
22
|
-
*/
|
|
23
|
-
class RpcCoordinator {
|
|
24
|
-
constructor(logger, redisConnection, compressionService, cancellationService, removeJobCallback) {
|
|
25
|
-
this.logger = logger;
|
|
26
|
-
this.redisConnection = redisConnection;
|
|
27
|
-
this.compressionService = compressionService;
|
|
28
|
-
this.cancellationService = cancellationService;
|
|
29
|
-
this.removeJobCallback = removeJobCallback;
|
|
30
|
-
/**
|
|
31
|
-
* UUID procesu Node.js (współdzielony przez wszystkie instancje w procesie)
|
|
32
|
-
*/
|
|
33
|
-
this.processInstanceId = PROCESS_INSTANCE_ID;
|
|
34
|
-
/**
|
|
35
|
-
* Mapa pending RPC calls - routing odpowiedzi do promises
|
|
36
|
-
*/
|
|
37
|
-
this.pendingCalls = new Map();
|
|
38
|
-
this.logger.debug('Inicjalizacja RpcCoordinator', {
|
|
39
|
-
processInstanceId: this.processInstanceId,
|
|
40
|
-
timestamp: new Date().toISOString(),
|
|
41
|
-
});
|
|
42
|
-
// Setup shared subscriber z pattern matching
|
|
43
|
-
this.setupSharedSubscriber();
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Konfiguruje shared subscriber dla wszystkich RPC calls
|
|
47
|
-
*/
|
|
48
|
-
setupSharedSubscriber() {
|
|
49
|
-
this.sharedSubscriber = this.redisConnection.duplicate();
|
|
50
|
-
// Pattern subscribe z processInstanceId - tylko dla tego procesu!
|
|
51
|
-
const pattern = `rpc:response:${this.processInstanceId}:*`;
|
|
52
|
-
// Flaga do śledzenia czy to reconnect (dla logowania na poziomie INFO)
|
|
53
|
-
let isReconnecting = false;
|
|
54
|
-
this.logger.debug('Tworzenie shared subscriber dla RPC', {
|
|
55
|
-
processInstanceId: this.processInstanceId,
|
|
56
|
-
pattern,
|
|
57
|
-
timestamp: new Date().toISOString(),
|
|
58
|
-
});
|
|
59
|
-
// Promise dla oczekiwania na psubscribe
|
|
60
|
-
// Łączy się z ready event zamiast psubscribe (bardziej niezawodne)
|
|
61
|
-
this.subscriberReadyPromise = new Promise((resolve) => {
|
|
62
|
-
// Czekaj na 'ready' event gdy połączenie jest gotowe
|
|
63
|
-
this.sharedSubscriber.once('ready', () => {
|
|
64
|
-
this.logger.debug('Shared subscriber połączony z Redis', {
|
|
65
|
-
processInstanceId: this.processInstanceId,
|
|
66
|
-
timestamp: new Date().toISOString(),
|
|
67
|
-
});
|
|
68
|
-
// Teraz subskrybuj pattern
|
|
69
|
-
void this.sharedSubscriber.psubscribe(pattern, (err) => {
|
|
70
|
-
if (err) {
|
|
71
|
-
this.logger.error('Błąd psubscribe', {
|
|
72
|
-
processInstanceId: this.processInstanceId,
|
|
73
|
-
pattern,
|
|
74
|
-
error: err.message,
|
|
75
|
-
timestamp: new Date().toISOString(),
|
|
76
|
-
});
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
this.logger.debug('Shared subscriber gotowy', {
|
|
80
|
-
processInstanceId: this.processInstanceId,
|
|
81
|
-
pattern,
|
|
82
|
-
timestamp: new Date().toISOString(),
|
|
83
|
-
});
|
|
84
|
-
resolve();
|
|
85
|
-
});
|
|
86
|
-
});
|
|
87
|
-
});
|
|
88
|
-
// Handler dla odpowiedzi RPC - multiplexing do pending calls
|
|
89
|
-
this.sharedSubscriber.on('pmessage', (_pattern, channel, message) => {
|
|
90
|
-
this.handleRpcMessage(channel, message);
|
|
91
|
-
});
|
|
92
|
-
// Handler błędów Redis subscriber
|
|
93
|
-
this.sharedSubscriber.on('error', (error) => {
|
|
94
|
-
this.logger.error('Błąd shared subscriber RPC', {
|
|
95
|
-
processInstanceId: this.processInstanceId,
|
|
96
|
-
error: (0, redis_1.formatRedisError)(error),
|
|
97
|
-
errorCode: (0, redis_1.getErrorCode)(error),
|
|
98
|
-
timestamp: new Date().toISOString(),
|
|
99
|
-
});
|
|
100
|
-
});
|
|
101
|
-
// Handler zamknięcia połączenia
|
|
102
|
-
this.sharedSubscriber.on('close', () => {
|
|
103
|
-
this.logger.warn('Shared subscriber RPC zamknięty', {
|
|
104
|
-
processInstanceId: this.processInstanceId,
|
|
105
|
-
timestamp: new Date().toISOString(),
|
|
106
|
-
});
|
|
107
|
-
});
|
|
108
|
-
// Handler reconnect - ustawia flagę dla logu INFO przy ready
|
|
109
|
-
this.sharedSubscriber.on('reconnecting', () => {
|
|
110
|
-
isReconnecting = true;
|
|
111
|
-
this.logger.log('Shared subscriber RPC - ponowne łączenie', {
|
|
112
|
-
processInstanceId: this.processInstanceId,
|
|
113
|
-
timestamp: new Date().toISOString(),
|
|
114
|
-
});
|
|
115
|
-
});
|
|
116
|
-
// Handler ready po reconnect - loguje INFO tylko po reconnect
|
|
117
|
-
this.sharedSubscriber.on('ready', () => {
|
|
118
|
-
if (isReconnecting) {
|
|
119
|
-
this.logger.log('Shared subscriber RPC - ponownie połączony', {
|
|
120
|
-
processInstanceId: this.processInstanceId,
|
|
121
|
-
reconnected: true,
|
|
122
|
-
timestamp: new Date().toISOString(),
|
|
123
|
-
});
|
|
124
|
-
isReconnecting = false;
|
|
125
|
-
}
|
|
126
|
-
});
|
|
127
|
-
this.logger.debug('Subskrybowanie pattern dla RPC - oczekiwanie na ready', {
|
|
128
|
-
processInstanceId: this.processInstanceId,
|
|
129
|
-
pattern,
|
|
130
|
-
timestamp: new Date().toISOString(),
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Oczekuje na gotowość subscribera z timeoutem
|
|
135
|
-
* @param timeout - Timeout w milisekundach
|
|
136
|
-
* @throws Error gdy subscriber nie jest gotowy w czasie
|
|
137
|
-
*/
|
|
138
|
-
waitForSubscriberReady(timeout) {
|
|
139
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
140
|
-
let timeoutId;
|
|
141
|
-
const timeoutPromise = new Promise((_, reject) => {
|
|
142
|
-
timeoutId = setTimeout(() => {
|
|
143
|
-
reject(new Error(`Subscriber timeout: nie udało się nawiązać połączenia w ciągu ${timeout}ms`));
|
|
144
|
-
}, timeout);
|
|
145
|
-
});
|
|
146
|
-
try {
|
|
147
|
-
yield Promise.race([this.subscriberReadyPromise, timeoutPromise]);
|
|
148
|
-
}
|
|
149
|
-
catch (error) {
|
|
150
|
-
this.logger.error('Timeout oczekiwania na gotowość subscribera', {
|
|
151
|
-
processInstanceId: this.processInstanceId,
|
|
152
|
-
timeout: `${timeout}ms`,
|
|
153
|
-
error: error instanceof Error ? error.message : String(error),
|
|
154
|
-
timestamp: new Date().toISOString(),
|
|
155
|
-
});
|
|
156
|
-
throw error;
|
|
157
|
-
}
|
|
158
|
-
finally {
|
|
159
|
-
// Zawsze wyczyść timeout aby uniknąć memory leak
|
|
160
|
-
if (timeoutId !== undefined) {
|
|
161
|
-
clearTimeout(timeoutId);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Przygotowuje komendę RPC z odpowiednimi metadanymi
|
|
168
|
-
* ResponseChannel jest konstruowany automatycznie z processInstanceId dla izolacji między procesami
|
|
169
|
-
* Akceptuje zarówno Command jak i CompressibleCommand
|
|
170
|
-
* @param command - Komenda do wysłania (może być skompresowana)
|
|
171
|
-
* @returns Komenda z metadanymi RPC
|
|
172
|
-
*/
|
|
173
|
-
prepareRpcCommand(command) {
|
|
174
|
-
const responseChannel = `rpc:response:${this.processInstanceId}:${command.__id}`;
|
|
175
|
-
return Object.assign(Object.assign({}, command), { __rpcMetadata: {
|
|
176
|
-
correlationId: command.__id,
|
|
177
|
-
responseChannel,
|
|
178
|
-
timestamp: Date.now(),
|
|
179
|
-
compressed: true, // Zawsze próbujemy kompresji (zależy od threshold)
|
|
180
|
-
} });
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* Rejestruje nowe wywołanie RPC z timeoutem
|
|
184
|
-
* @param correlationId - Unikalny ID wywołania
|
|
185
|
-
* @param commandName - Nazwa komendy
|
|
186
|
-
* @param timeout - Timeout w milisekundach
|
|
187
|
-
* @returns Promise odpowiedzi RPC
|
|
188
|
-
*/
|
|
189
|
-
registerCall(correlationId, commandName, timeout) {
|
|
190
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
191
|
-
// Poczekaj na gotowość subscribera z timeoutem 5s
|
|
192
|
-
yield this.waitForSubscriberReady(5000);
|
|
193
|
-
const responseChannel = `rpc:response:${this.processInstanceId}:${correlationId}`;
|
|
194
|
-
this.logger.debug('Rejestrowanie wywołania RPC przez shared subscriber', {
|
|
195
|
-
processInstanceId: this.processInstanceId,
|
|
196
|
-
correlationId,
|
|
197
|
-
responseChannel,
|
|
198
|
-
commandName,
|
|
199
|
-
timeout: `${timeout}ms`,
|
|
200
|
-
timestamp: new Date().toISOString(),
|
|
201
|
-
});
|
|
202
|
-
// Utwórz promise odpowiedzi i dodaj do pending calls SYNCHRONICZNIE
|
|
203
|
-
// Teraz subscriber jest gotowy, więc możemy bezpiecznie dodać pending call
|
|
204
|
-
const responsePromise = new Promise((resolve, reject) => {
|
|
205
|
-
const startTime = Date.now();
|
|
206
|
-
// Timeout handler - wywołuje cancellation async (nie blokuje reject)
|
|
207
|
-
const timeoutId = setTimeout(() => {
|
|
208
|
-
const pendingCall = this.pendingCalls.get(correlationId);
|
|
209
|
-
if (!pendingCall) {
|
|
210
|
-
// Pending call już obsłużony (np. odpowiedź przyszła)
|
|
211
|
-
return;
|
|
212
|
-
}
|
|
213
|
-
// Usuń z mapy PRZED reject (zapobiega podwójnemu przetwarzaniu)
|
|
214
|
-
this.pendingCalls.delete(correlationId);
|
|
215
|
-
this.logger.error('RPC timeout', {
|
|
216
|
-
processInstanceId: this.processInstanceId,
|
|
217
|
-
commandName,
|
|
218
|
-
correlationId,
|
|
219
|
-
responseChannel,
|
|
220
|
-
timeout: `${timeout}ms`,
|
|
221
|
-
pendingCallsCount: this.pendingCalls.size,
|
|
222
|
-
jobId: pendingCall.jobId,
|
|
223
|
-
queueName: pendingCall.queueName,
|
|
224
|
-
timestamp: new Date().toISOString(),
|
|
225
|
-
});
|
|
226
|
-
// Obsłuż cancellation async - nie blokuje reject
|
|
227
|
-
// Używa void aby nie czekać - to optymalizacja, nie kluczowa operacja
|
|
228
|
-
void this.handleTimeout(correlationId, pendingCall, commandName);
|
|
229
|
-
reject(new Error(`RPC timeout for command ${commandName}`));
|
|
230
|
-
}, timeout);
|
|
231
|
-
// Zapisz pending call w Map SYNCHRONICZNIE
|
|
232
|
-
this.pendingCalls.set(correlationId, {
|
|
233
|
-
resolve: resolve,
|
|
234
|
-
reject,
|
|
235
|
-
timeoutId,
|
|
236
|
-
commandName,
|
|
237
|
-
startTime,
|
|
238
|
-
});
|
|
239
|
-
this.logger.debug('Pending RPC call zarejestrowany', {
|
|
240
|
-
processInstanceId: this.processInstanceId,
|
|
241
|
-
correlationId,
|
|
242
|
-
responseChannel,
|
|
243
|
-
pendingCallsCount: this.pendingCalls.size,
|
|
244
|
-
timestamp: new Date().toISOString(),
|
|
245
|
-
});
|
|
246
|
-
});
|
|
247
|
-
// Zwróć responsePromise natychmiast - caller może kontynuować (dodać job do kolejki)
|
|
248
|
-
return responsePromise;
|
|
249
|
-
});
|
|
250
|
-
}
|
|
251
|
-
/**
|
|
252
|
-
* Obsługuje wiadomość RPC z Redis Pub/Sub
|
|
253
|
-
* @param channel - Kanał: rpc:response:{processId}:{correlationId}
|
|
254
|
-
* @param message - Odpowiedź RPC (JSON)
|
|
255
|
-
*/
|
|
256
|
-
handleRpcMessage(channel, message) {
|
|
257
|
-
// Ekstraktuj correlationId z channel: rpc:response:{processId}:{correlationId}
|
|
258
|
-
const parts = channel.split(':');
|
|
259
|
-
if (parts.length !== 4 || parts[0] !== 'rpc' || parts[1] !== 'response') {
|
|
260
|
-
this.logger.warn('Nieprawidłowy format kanału RPC', {
|
|
261
|
-
processInstanceId: this.processInstanceId,
|
|
262
|
-
channel,
|
|
263
|
-
timestamp: new Date().toISOString(),
|
|
264
|
-
});
|
|
265
|
-
return;
|
|
266
|
-
}
|
|
267
|
-
const receivedProcessId = parts[2];
|
|
268
|
-
const correlationId = parts[3];
|
|
269
|
-
// Weryfikacja processInstanceId (dodatkowe bezpieczeństwo)
|
|
270
|
-
if (receivedProcessId !== this.processInstanceId) {
|
|
271
|
-
this.logger.warn('Otrzymano wiadomość dla innego procesu', {
|
|
272
|
-
processInstanceId: this.processInstanceId,
|
|
273
|
-
receivedProcessId,
|
|
274
|
-
correlationId,
|
|
275
|
-
channel,
|
|
276
|
-
timestamp: new Date().toISOString(),
|
|
277
|
-
});
|
|
278
|
-
return;
|
|
279
|
-
}
|
|
280
|
-
// Znajdź pending call w Map
|
|
281
|
-
const pendingCall = this.pendingCalls.get(correlationId);
|
|
282
|
-
if (!pendingCall) {
|
|
283
|
-
this.logger.warn('Otrzymano odpowiedź dla nieistniejącego RPC call', {
|
|
284
|
-
processInstanceId: this.processInstanceId,
|
|
285
|
-
correlationId,
|
|
286
|
-
channel,
|
|
287
|
-
pendingCallsCount: this.pendingCalls.size,
|
|
288
|
-
timestamp: new Date().toISOString(),
|
|
289
|
-
});
|
|
290
|
-
return;
|
|
291
|
-
}
|
|
292
|
-
// Dekompresuj i parsuj odpowiedź (async)
|
|
293
|
-
// Message zawiera wrapper: {data: string, compressed: boolean}
|
|
294
|
-
let wrapper;
|
|
295
|
-
try {
|
|
296
|
-
wrapper = JSON.parse(message);
|
|
297
|
-
}
|
|
298
|
-
catch (parseError) {
|
|
299
|
-
this.logger.error('Błąd parsowania wrapper odpowiedzi RPC', {
|
|
300
|
-
processInstanceId: this.processInstanceId,
|
|
301
|
-
correlationId,
|
|
302
|
-
commandName: pendingCall.commandName,
|
|
303
|
-
error: parseError instanceof Error ? parseError.message : String(parseError),
|
|
304
|
-
timestamp: new Date().toISOString(),
|
|
305
|
-
});
|
|
306
|
-
clearTimeout(pendingCall.timeoutId);
|
|
307
|
-
this.pendingCalls.delete(correlationId);
|
|
308
|
-
pendingCall.reject(new Error('Failed to parse RPC response wrapper'));
|
|
309
|
-
return;
|
|
310
|
-
}
|
|
311
|
-
this.compressionService
|
|
312
|
-
.decompress(wrapper.data, wrapper.compressed)
|
|
313
|
-
.then((decompressed) => {
|
|
314
|
-
const { correlationId: responseCorrelationId, result, error, } = decompressed;
|
|
315
|
-
const duration = Date.now() - pendingCall.startTime;
|
|
316
|
-
this.logger.debug('Otrzymano odpowiedź RPC przez shared subscriber', {
|
|
317
|
-
processInstanceId: this.processInstanceId,
|
|
318
|
-
correlationId: responseCorrelationId,
|
|
319
|
-
commandName: pendingCall.commandName,
|
|
320
|
-
duration: `${duration}ms`,
|
|
321
|
-
hasResult: result !== null && result !== undefined,
|
|
322
|
-
hasError: error !== null,
|
|
323
|
-
pendingCallsCount: this.pendingCalls.size - 1,
|
|
324
|
-
timestamp: new Date().toISOString(),
|
|
325
|
-
});
|
|
326
|
-
// Resolve/reject promise
|
|
327
|
-
if (error) {
|
|
328
|
-
this.logger.error('Wywołanie RPC odrzucone', {
|
|
329
|
-
processInstanceId: this.processInstanceId,
|
|
330
|
-
correlationId: responseCorrelationId,
|
|
331
|
-
commandName: pendingCall.commandName,
|
|
332
|
-
error,
|
|
333
|
-
timestamp: new Date().toISOString(),
|
|
334
|
-
});
|
|
335
|
-
pendingCall.reject(new Error(error));
|
|
336
|
-
}
|
|
337
|
-
else {
|
|
338
|
-
this.logger.debug('Wywołanie RPC rozwiązane', {
|
|
339
|
-
processInstanceId: this.processInstanceId,
|
|
340
|
-
correlationId: responseCorrelationId,
|
|
341
|
-
commandName: pendingCall.commandName,
|
|
342
|
-
duration: `${duration}ms`,
|
|
343
|
-
timestamp: new Date().toISOString(),
|
|
344
|
-
});
|
|
345
|
-
pendingCall.resolve(result);
|
|
346
|
-
}
|
|
347
|
-
})
|
|
348
|
-
.catch((decompressError) => {
|
|
349
|
-
this.logger.error('Błąd dekompresji/parsowania odpowiedzi RPC', {
|
|
350
|
-
processInstanceId: this.processInstanceId,
|
|
351
|
-
correlationId,
|
|
352
|
-
commandName: pendingCall.commandName,
|
|
353
|
-
error: decompressError instanceof Error ? decompressError.message : String(decompressError),
|
|
354
|
-
timestamp: new Date().toISOString(),
|
|
355
|
-
});
|
|
356
|
-
pendingCall.reject(new Error('Failed to decompress/parse RPC response'));
|
|
357
|
-
})
|
|
358
|
-
.finally(() => {
|
|
359
|
-
// Cleanup - zawsze wyczyść timeout i usuń z pending calls (zapobiega memory leak)
|
|
360
|
-
clearTimeout(pendingCall.timeoutId);
|
|
361
|
-
this.pendingCalls.delete(correlationId);
|
|
362
|
-
});
|
|
363
|
-
}
|
|
364
|
-
/**
|
|
365
|
-
* Ustawia jobId i queueName dla istniejącego pending call
|
|
366
|
-
* Wywoływane przez CommandBus po dodaniu joba do kolejki
|
|
367
|
-
*
|
|
368
|
-
* Umożliwia usunięcie joba przy timeout (jeśli jeszcze nie został podjęty)
|
|
369
|
-
*
|
|
370
|
-
* @param correlationId - ID korelacji RPC (command.__id)
|
|
371
|
-
* @param jobId - ID joba w BullMQ
|
|
372
|
-
* @param queueName - Nazwa kolejki (commandName)
|
|
373
|
-
*/
|
|
374
|
-
setJobId(correlationId, jobId, queueName) {
|
|
375
|
-
const pendingCall = this.pendingCalls.get(correlationId);
|
|
376
|
-
if (!pendingCall) {
|
|
377
|
-
// Pending call już nie istnieje (timeout lub odpowiedź przyszła wcześniej)
|
|
378
|
-
this.logger.debug('Próba ustawienia jobId dla nieistniejącego pending call', {
|
|
379
|
-
processInstanceId: this.processInstanceId,
|
|
380
|
-
correlationId,
|
|
381
|
-
jobId,
|
|
382
|
-
queueName,
|
|
383
|
-
timestamp: new Date().toISOString(),
|
|
384
|
-
});
|
|
385
|
-
return;
|
|
386
|
-
}
|
|
387
|
-
// Ustaw jobId i queueName dla późniejszego usunięcia przy timeout
|
|
388
|
-
pendingCall.jobId = jobId;
|
|
389
|
-
pendingCall.queueName = queueName;
|
|
390
|
-
this.logger.debug('Ustawiono jobId dla pending RPC call', {
|
|
391
|
-
processInstanceId: this.processInstanceId,
|
|
392
|
-
correlationId,
|
|
393
|
-
jobId,
|
|
394
|
-
queueName,
|
|
395
|
-
timestamp: new Date().toISOString(),
|
|
396
|
-
});
|
|
397
|
-
}
|
|
398
|
-
/**
|
|
399
|
-
* Obsługuje timeout RPC - próbuje usunąć job z kolejki
|
|
400
|
-
*
|
|
401
|
-
* Wywoływana asynchronicznie przy timeout - NIE blokuje reject promise.
|
|
402
|
-
* Jest to optymalizacja zasobów, nie kluczowa operacja.
|
|
403
|
-
*
|
|
404
|
-
* @param correlationId - ID korelacji RPC
|
|
405
|
-
* @param pendingCall - Dane pending call (już usunięte z mapy)
|
|
406
|
-
* @param commandName - Nazwa komendy (do logowania)
|
|
407
|
-
*/
|
|
408
|
-
handleTimeout(correlationId, pendingCall, commandName) {
|
|
409
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
410
|
-
// Jeśli brak cancellation service - nic nie rób
|
|
411
|
-
if (!this.cancellationService) {
|
|
412
|
-
return;
|
|
413
|
-
}
|
|
414
|
-
try {
|
|
415
|
-
// Oznacz jako cancelled (nie rzuca wyjątków)
|
|
416
|
-
yield this.cancellationService.markAsCancelled(correlationId);
|
|
417
|
-
// Spróbuj usunąć job jeśli mamy dane i callback
|
|
418
|
-
if (pendingCall.jobId && pendingCall.queueName && this.removeJobCallback) {
|
|
419
|
-
const removed = yield this.cancellationService.tryRemoveJob(pendingCall.jobId, pendingCall.queueName, this.removeJobCallback);
|
|
420
|
-
if (removed) {
|
|
421
|
-
// Jeśli usunięto, wyczyść flagę cancellation (nie jest już potrzebna)
|
|
422
|
-
yield this.cancellationService.clearCancellation(correlationId);
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
this.logger.debug('RPC timeout obsłużony - cancellation wykonane', {
|
|
426
|
-
processInstanceId: this.processInstanceId,
|
|
427
|
-
correlationId,
|
|
428
|
-
commandName,
|
|
429
|
-
jobId: pendingCall.jobId,
|
|
430
|
-
queueName: pendingCall.queueName,
|
|
431
|
-
timestamp: new Date().toISOString(),
|
|
432
|
-
});
|
|
433
|
-
}
|
|
434
|
-
catch (error) {
|
|
435
|
-
// Błędy cancellation są logowane, ale nie propagowane
|
|
436
|
-
// Jest to optymalizacja, nie kluczowa operacja
|
|
437
|
-
this.logger.warn('Błąd podczas obsługi timeout RPC - cancellation', {
|
|
438
|
-
processInstanceId: this.processInstanceId,
|
|
439
|
-
correlationId,
|
|
440
|
-
commandName,
|
|
441
|
-
error: error instanceof Error ? error.message : String(error),
|
|
442
|
-
timestamp: new Date().toISOString(),
|
|
443
|
-
});
|
|
444
|
-
}
|
|
445
|
-
});
|
|
446
|
-
}
|
|
447
|
-
/**
|
|
448
|
-
* Zamyka RpcCoordinator i czyści zasoby
|
|
449
|
-
* Reject wszystkie pending calls i zamknij shared subscriber
|
|
450
|
-
*/
|
|
451
|
-
close() {
|
|
452
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
453
|
-
this.logger.debug('Zamykanie RpcCoordinator', {
|
|
454
|
-
processInstanceId: this.processInstanceId,
|
|
455
|
-
pendingCallsCount: this.pendingCalls.size,
|
|
456
|
-
timestamp: new Date().toISOString(),
|
|
457
|
-
});
|
|
458
|
-
// Reject wszystkie pending calls
|
|
459
|
-
for (const [correlationId, pendingCall] of this.pendingCalls.entries()) {
|
|
460
|
-
clearTimeout(pendingCall.timeoutId);
|
|
461
|
-
pendingCall.reject(new Error('RpcCoordinator is closing'));
|
|
462
|
-
this.logger.debug('Odrzucono pending RPC call przy zamykaniu', {
|
|
463
|
-
processInstanceId: this.processInstanceId,
|
|
464
|
-
correlationId,
|
|
465
|
-
commandName: pendingCall.commandName,
|
|
466
|
-
timestamp: new Date().toISOString(),
|
|
467
|
-
});
|
|
468
|
-
}
|
|
469
|
-
this.pendingCalls.clear();
|
|
470
|
-
// Zamknij shared subscriber
|
|
471
|
-
try {
|
|
472
|
-
const pattern = `rpc:response:${this.processInstanceId}:*`;
|
|
473
|
-
yield this.sharedSubscriber.punsubscribe(pattern);
|
|
474
|
-
this.sharedSubscriber.removeAllListeners('pmessage');
|
|
475
|
-
this.sharedSubscriber.removeAllListeners('psubscribe');
|
|
476
|
-
this.sharedSubscriber.removeAllListeners('error');
|
|
477
|
-
this.sharedSubscriber.removeAllListeners('close');
|
|
478
|
-
this.sharedSubscriber.removeAllListeners('reconnecting');
|
|
479
|
-
yield this.sharedSubscriber.quit();
|
|
480
|
-
this.logger.debug('Shared subscriber zamknięty', {
|
|
481
|
-
processInstanceId: this.processInstanceId,
|
|
482
|
-
timestamp: new Date().toISOString(),
|
|
483
|
-
});
|
|
484
|
-
}
|
|
485
|
-
catch (error) {
|
|
486
|
-
this.logger.warn('Błąd podczas zamykania shared subscriber', {
|
|
487
|
-
processInstanceId: this.processInstanceId,
|
|
488
|
-
error: error instanceof Error ? error.message : String(error),
|
|
489
|
-
timestamp: new Date().toISOString(),
|
|
490
|
-
});
|
|
491
|
-
}
|
|
492
|
-
this.logger.debug('RpcCoordinator zamknięty', {
|
|
493
|
-
processInstanceId: this.processInstanceId,
|
|
494
|
-
timestamp: new Date().toISOString(),
|
|
495
|
-
});
|
|
496
|
-
});
|
|
497
|
-
}
|
|
498
|
-
}
|
|
499
|
-
exports.default = RpcCoordinator;
|
|
500
|
-
//# sourceMappingURL=rpc-coordinator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-coordinator.js","sourceRoot":"","sources":["../../../src/command-bus/rpc/rpc-coordinator.ts"],"names":[],"mappings":"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"}
|