pp-command-bus 1.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 +522 -0
- package/dist/command-bus/command-bus.spec.d.ts +1 -0
- package/dist/command-bus/command-bus.spec.js +398 -0
- package/dist/command-bus/command-bus.spec.js.map +1 -0
- package/dist/command-bus/command.d.ts +24 -0
- package/dist/command-bus/command.js +53 -0
- package/dist/command-bus/command.js.map +1 -0
- package/dist/command-bus/config/command-bus-config.d.ts +40 -0
- package/dist/command-bus/config/command-bus-config.js +59 -0
- package/dist/command-bus/config/command-bus-config.js.map +1 -0
- package/dist/command-bus/config/command-bus-config.spec.d.ts +1 -0
- package/dist/command-bus/config/command-bus-config.spec.js +162 -0
- package/dist/command-bus/config/command-bus-config.spec.js.map +1 -0
- package/dist/command-bus/config/index.d.ts +1 -0
- package/dist/command-bus/config/index.js +9 -0
- package/dist/command-bus/config/index.js.map +1 -0
- package/dist/command-bus/index.d.ts +79 -0
- package/dist/command-bus/index.js +169 -0
- package/dist/command-bus/index.js.map +1 -0
- package/dist/command-bus/job/index.d.ts +6 -0
- package/dist/command-bus/job/index.js +15 -0
- package/dist/command-bus/job/index.js.map +1 -0
- package/dist/command-bus/job/job-options-builder.d.ts +24 -0
- package/dist/command-bus/job/job-options-builder.js +68 -0
- package/dist/command-bus/job/job-options-builder.js.map +1 -0
- package/dist/command-bus/job/job-options-builder.spec.d.ts +1 -0
- package/dist/command-bus/job/job-options-builder.spec.js +163 -0
- package/dist/command-bus/job/job-options-builder.spec.js.map +1 -0
- package/dist/command-bus/job/job-processor.d.ts +33 -0
- package/dist/command-bus/job/job-processor.js +195 -0
- package/dist/command-bus/job/job-processor.js.map +1 -0
- package/dist/command-bus/job/job-processor.spec.d.ts +1 -0
- package/dist/command-bus/job/job-processor.spec.js +352 -0
- package/dist/command-bus/job/job-processor.spec.js.map +1 -0
- package/dist/command-bus/logging/command-logger.d.ts +21 -0
- package/dist/command-bus/logging/command-logger.js +79 -0
- package/dist/command-bus/logging/command-logger.js.map +1 -0
- package/dist/command-bus/logging/command-logger.spec.d.ts +1 -0
- package/dist/command-bus/logging/command-logger.spec.js +245 -0
- package/dist/command-bus/logging/command-logger.spec.js.map +1 -0
- package/dist/command-bus/logging/index.d.ts +5 -0
- package/dist/command-bus/logging/index.js +13 -0
- package/dist/command-bus/logging/index.js.map +1 -0
- package/dist/command-bus/queue/index.d.ts +5 -0
- package/dist/command-bus/queue/index.js +13 -0
- package/dist/command-bus/queue/index.js.map +1 -0
- package/dist/command-bus/queue/queue-manager.d.ts +24 -0
- package/dist/command-bus/queue/queue-manager.js +60 -0
- package/dist/command-bus/queue/queue-manager.js.map +1 -0
- package/dist/command-bus/queue/queue-manager.spec.d.ts +1 -0
- package/dist/command-bus/queue/queue-manager.spec.js +219 -0
- package/dist/command-bus/queue/queue-manager.spec.js.map +1 -0
- package/dist/command-bus/rpc/index.d.ts +5 -0
- package/dist/command-bus/rpc/index.js +13 -0
- package/dist/command-bus/rpc/index.js.map +1 -0
- package/dist/command-bus/rpc/rpc-coordinator.d.ts +45 -0
- package/dist/command-bus/rpc/rpc-coordinator.js +189 -0
- package/dist/command-bus/rpc/rpc-coordinator.js.map +1 -0
- package/dist/command-bus/rpc/rpc-coordinator.spec.d.ts +1 -0
- package/dist/command-bus/rpc/rpc-coordinator.spec.js +286 -0
- package/dist/command-bus/rpc/rpc-coordinator.spec.js.map +1 -0
- package/dist/command-bus/types/index.d.ts +57 -0
- package/dist/command-bus/types/index.js +3 -0
- package/dist/command-bus/types/index.js.map +1 -0
- package/dist/command-bus/worker/index.d.ts +5 -0
- package/dist/command-bus/worker/index.js +13 -0
- package/dist/command-bus/worker/index.js.map +1 -0
- package/dist/command-bus/worker/worker-orchestrator.d.ts +46 -0
- package/dist/command-bus/worker/worker-orchestrator.js +160 -0
- package/dist/command-bus/worker/worker-orchestrator.js.map +1 -0
- package/dist/command-bus/worker/worker-orchestrator.spec.d.ts +1 -0
- package/dist/command-bus/worker/worker-orchestrator.spec.js +293 -0
- package/dist/command-bus/worker/worker-orchestrator.spec.js.map +1 -0
- package/dist/examples/rpc.demo.d.ts +2 -0
- package/dist/examples/rpc.demo.js +235 -0
- package/dist/examples/rpc.demo.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/pp-command-bus-1.0.0.tgz +0 -0
- package/dist/shared/config/base-config.d.ts +43 -0
- package/dist/shared/config/base-config.js +100 -0
- package/dist/shared/config/base-config.js.map +1 -0
- package/dist/shared/config/base-config.spec.d.ts +1 -0
- package/dist/shared/config/base-config.spec.js +118 -0
- package/dist/shared/config/base-config.spec.js.map +1 -0
- package/dist/shared/config/index.d.ts +1 -0
- package/dist/shared/config/index.js +9 -0
- package/dist/shared/config/index.js.map +1 -0
- package/dist/shared/logging/index.d.ts +2 -0
- package/dist/shared/logging/index.js +8 -0
- package/dist/shared/logging/index.js.map +1 -0
- package/dist/shared/logging/log-level.d.ts +36 -0
- package/dist/shared/logging/log-level.js +53 -0
- package/dist/shared/logging/log-level.js.map +1 -0
- package/dist/shared/logging/logger.d.ts +42 -0
- package/dist/shared/logging/logger.js +63 -0
- package/dist/shared/logging/logger.js.map +1 -0
- package/dist/shared/logging/logger.spec.d.ts +1 -0
- package/dist/shared/logging/logger.spec.js +89 -0
- package/dist/shared/logging/logger.spec.js.map +1 -0
- package/dist/shared/types.d.ts +26 -0
- package/dist/shared/types.js +6 -0
- package/dist/shared/types.js.map +1 -0
- package/package.json +93 -0
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const job_options_builder_1 = __importDefault(require("./job-options-builder"));
|
|
7
|
+
const command_bus_config_1 = __importDefault(require("../config/command-bus-config"));
|
|
8
|
+
describe('JobOptionsBuilder', () => {
|
|
9
|
+
describe('buildStandardOptions', () => {
|
|
10
|
+
it('powinien zwrócić standardowe opcje z domyślną konfiguracją', () => {
|
|
11
|
+
const config = new command_bus_config_1.default({
|
|
12
|
+
redisUrl: 'redis://localhost:6379',
|
|
13
|
+
maxAttempts: 3,
|
|
14
|
+
backoffDelay: 2000,
|
|
15
|
+
queueMode: 'fifo',
|
|
16
|
+
});
|
|
17
|
+
const builder = new job_options_builder_1.default(config);
|
|
18
|
+
const options = builder.buildStandardOptions();
|
|
19
|
+
expect(options).toEqual({
|
|
20
|
+
removeOnComplete: {
|
|
21
|
+
count: 100,
|
|
22
|
+
age: 60, // Memory optimization: 60s
|
|
23
|
+
},
|
|
24
|
+
removeOnFail: {
|
|
25
|
+
count: 500, // Memory optimization: więcej dla debugging
|
|
26
|
+
age: 3600, // Memory optimization: 1h
|
|
27
|
+
},
|
|
28
|
+
attempts: 3,
|
|
29
|
+
backoff: {
|
|
30
|
+
type: 'exponential',
|
|
31
|
+
delay: 2000,
|
|
32
|
+
},
|
|
33
|
+
lifo: false,
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
it('powinien zwrócić opcje z LIFO gdy queueMode = "lifo"', () => {
|
|
37
|
+
const config = new command_bus_config_1.default({
|
|
38
|
+
redisUrl: 'redis://localhost:6379',
|
|
39
|
+
maxAttempts: 5,
|
|
40
|
+
backoffDelay: 1000,
|
|
41
|
+
queueMode: 'lifo',
|
|
42
|
+
});
|
|
43
|
+
const builder = new job_options_builder_1.default(config);
|
|
44
|
+
const options = builder.buildStandardOptions();
|
|
45
|
+
expect(options.lifo).toBe(true);
|
|
46
|
+
expect(options.attempts).toBe(5);
|
|
47
|
+
expect(options.backoff.delay).toBe(1000);
|
|
48
|
+
});
|
|
49
|
+
it('powinien używać wartości z konfiguracji dla attempts i backoff', () => {
|
|
50
|
+
const config = new command_bus_config_1.default({
|
|
51
|
+
redisUrl: 'redis://localhost:6379',
|
|
52
|
+
maxAttempts: 10,
|
|
53
|
+
backoffDelay: 5000,
|
|
54
|
+
queueMode: 'fifo',
|
|
55
|
+
});
|
|
56
|
+
const builder = new job_options_builder_1.default(config);
|
|
57
|
+
const options = builder.buildStandardOptions();
|
|
58
|
+
expect(options.attempts).toBe(10);
|
|
59
|
+
expect(options.backoff).toEqual({
|
|
60
|
+
type: 'exponential',
|
|
61
|
+
delay: 5000,
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
describe('buildRpcReplyOptions', () => {
|
|
66
|
+
it('powinien zwrócić opcje RPC reply z domyślnym TTL', () => {
|
|
67
|
+
const config = new command_bus_config_1.default({
|
|
68
|
+
redisUrl: 'redis://localhost:6379',
|
|
69
|
+
maxAttempts: 3,
|
|
70
|
+
backoffDelay: 2000,
|
|
71
|
+
rpcReplyTtl: 60000, // 1 minuta
|
|
72
|
+
});
|
|
73
|
+
const builder = new job_options_builder_1.default(config);
|
|
74
|
+
const options = builder.buildRpcReplyOptions();
|
|
75
|
+
expect(options).toEqual({
|
|
76
|
+
removeOnComplete: {
|
|
77
|
+
age: 30, // Memory optimization: agresywne usuwanie reply jobs
|
|
78
|
+
count: 10, // Memory optimization: tylko ostatnie 10
|
|
79
|
+
},
|
|
80
|
+
removeOnFail: {
|
|
81
|
+
age: 300, // Memory optimization: 5 minut
|
|
82
|
+
count: 50, // Memory optimization: mniej failed jobs
|
|
83
|
+
},
|
|
84
|
+
attempts: 3,
|
|
85
|
+
backoff: {
|
|
86
|
+
type: 'exponential',
|
|
87
|
+
delay: 2000,
|
|
88
|
+
},
|
|
89
|
+
lifo: false,
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
it('powinien używać custom rpcReplyTtl z konfiguracji', () => {
|
|
93
|
+
const config = new command_bus_config_1.default({
|
|
94
|
+
redisUrl: 'redis://localhost:6379',
|
|
95
|
+
maxAttempts: 5,
|
|
96
|
+
backoffDelay: 1000,
|
|
97
|
+
rpcReplyTtl: 120000, // 2 minuty
|
|
98
|
+
});
|
|
99
|
+
const builder = new job_options_builder_1.default(config);
|
|
100
|
+
const options = builder.buildRpcReplyOptions();
|
|
101
|
+
// Memory optimization: rpcReplyTtl nie jest już używany
|
|
102
|
+
// Zawsze używamy 30s dla agresywnego cleanup
|
|
103
|
+
expect(options.removeOnComplete).toEqual({
|
|
104
|
+
age: 30, // Memory optimization: stałe 30s niezależnie od config
|
|
105
|
+
count: 10, // Memory optimization: tylko ostatnie 10
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
it('powinien zawsze zwracać lifo = false dla RPC reply', () => {
|
|
109
|
+
const config = new command_bus_config_1.default({
|
|
110
|
+
redisUrl: 'redis://localhost:6379',
|
|
111
|
+
queueMode: 'lifo', // LIFO dla standardowych jobów
|
|
112
|
+
rpcReplyTtl: 60000,
|
|
113
|
+
});
|
|
114
|
+
const builder = new job_options_builder_1.default(config);
|
|
115
|
+
const options = builder.buildRpcReplyOptions();
|
|
116
|
+
// RPC reply zawsze używa FIFO (lifo = false)
|
|
117
|
+
expect(options.lifo).toBe(false);
|
|
118
|
+
});
|
|
119
|
+
it('powinien używać wartości z konfiguracji dla attempts i backoff', () => {
|
|
120
|
+
const config = new command_bus_config_1.default({
|
|
121
|
+
redisUrl: 'redis://localhost:6379',
|
|
122
|
+
maxAttempts: 7,
|
|
123
|
+
backoffDelay: 3000,
|
|
124
|
+
rpcReplyTtl: 90000,
|
|
125
|
+
});
|
|
126
|
+
const builder = new job_options_builder_1.default(config);
|
|
127
|
+
const options = builder.buildRpcReplyOptions();
|
|
128
|
+
expect(options.attempts).toBe(7);
|
|
129
|
+
expect(options.backoff).toEqual({
|
|
130
|
+
type: 'exponential',
|
|
131
|
+
delay: 3000,
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
describe('edge cases', () => {
|
|
136
|
+
it('powinien działać z minimalną konfiguracją', () => {
|
|
137
|
+
const config = new command_bus_config_1.default({
|
|
138
|
+
redisUrl: 'redis://localhost:6379',
|
|
139
|
+
});
|
|
140
|
+
const builder = new job_options_builder_1.default(config);
|
|
141
|
+
const standardOptions = builder.buildStandardOptions();
|
|
142
|
+
const rpcOptions = builder.buildRpcReplyOptions();
|
|
143
|
+
expect(standardOptions.attempts).toBeGreaterThanOrEqual(1);
|
|
144
|
+
expect(standardOptions.backoff.delay).toBeGreaterThanOrEqual(100);
|
|
145
|
+
expect(rpcOptions.attempts).toBeGreaterThanOrEqual(1);
|
|
146
|
+
});
|
|
147
|
+
it('powinien konwertować rpcReplyTtl z ms na sekundy dla BullMQ', () => {
|
|
148
|
+
const config = new command_bus_config_1.default({
|
|
149
|
+
redisUrl: 'redis://localhost:6379',
|
|
150
|
+
rpcReplyTtl: 5000, // 5 sekund w ms
|
|
151
|
+
});
|
|
152
|
+
const builder = new job_options_builder_1.default(config);
|
|
153
|
+
const options = builder.buildRpcReplyOptions();
|
|
154
|
+
// Memory optimization: rpcReplyTtl już nie wpływa na removeOnComplete
|
|
155
|
+
// Zawsze używamy stałego 30s niezależnie od config
|
|
156
|
+
expect(options.removeOnComplete).toEqual({
|
|
157
|
+
age: 30, // Memory optimization: stałe 30s
|
|
158
|
+
count: 10, // Memory optimization: tylko ostatnie 10
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
//# sourceMappingURL=job-options-builder.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job-options-builder.spec.js","sourceRoot":"","sources":["../../../src/command-bus/job/job-options-builder.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Job } from 'bullmq';
|
|
2
|
+
import type { TDict, ILogger } from '../../shared/types';
|
|
3
|
+
import type QueueManager from '../queue/queue-manager';
|
|
4
|
+
import type JobOptionsBuilder from './job-options-builder';
|
|
5
|
+
import type CommandLogger from '../logging/command-logger';
|
|
6
|
+
/**
|
|
7
|
+
* Przetwarza joby z kolejek BullMQ
|
|
8
|
+
* Odpowiada za wykonanie handlerów komend i obsługę odpowiedzi RPC
|
|
9
|
+
*/
|
|
10
|
+
export default class JobProcessor {
|
|
11
|
+
private readonly commandHandlers;
|
|
12
|
+
private readonly queueManager;
|
|
13
|
+
private readonly logger;
|
|
14
|
+
private readonly jobOptionsBuilder;
|
|
15
|
+
private readonly commandLogger?;
|
|
16
|
+
constructor(commandHandlers: TDict<(command: any) => unknown | Promise<unknown>>, queueManager: QueueManager, logger: ILogger, jobOptionsBuilder: JobOptionsBuilder, commandLogger?: CommandLogger | undefined);
|
|
17
|
+
/**
|
|
18
|
+
* Przetwarza job z kolejki
|
|
19
|
+
* @param job - Job do przetworzenia
|
|
20
|
+
* @param commandName - Nazwa komendy
|
|
21
|
+
*/
|
|
22
|
+
process(job: Job, commandName: string): Promise<unknown>;
|
|
23
|
+
/**
|
|
24
|
+
* Wysyła odpowiedź RPC do nadawcy
|
|
25
|
+
* Sprawdza czy kolejka odpowiedzi jeszcze istnieje (może być usunięta przez timeout)
|
|
26
|
+
*/
|
|
27
|
+
private sendRpcResponse;
|
|
28
|
+
/**
|
|
29
|
+
* Wysyła błąd RPC do nadawcy
|
|
30
|
+
* Sprawdza czy kolejka odpowiedzi jeszcze istnieje (może być usunięta przez timeout)
|
|
31
|
+
*/
|
|
32
|
+
private sendRpcError;
|
|
33
|
+
}
|
|
@@ -0,0 +1,195 @@
|
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const command_1 = __importDefault(require("../command"));
|
|
16
|
+
/**
|
|
17
|
+
* Przetwarza joby z kolejek BullMQ
|
|
18
|
+
* Odpowiada za wykonanie handlerów komend i obsługę odpowiedzi RPC
|
|
19
|
+
*/
|
|
20
|
+
class JobProcessor {
|
|
21
|
+
constructor(
|
|
22
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
23
|
+
commandHandlers, queueManager, logger, jobOptionsBuilder, commandLogger) {
|
|
24
|
+
this.commandHandlers = commandHandlers;
|
|
25
|
+
this.queueManager = queueManager;
|
|
26
|
+
this.logger = logger;
|
|
27
|
+
this.jobOptionsBuilder = jobOptionsBuilder;
|
|
28
|
+
this.commandLogger = commandLogger;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Przetwarza job z kolejki
|
|
32
|
+
* @param job - Job do przetworzenia
|
|
33
|
+
* @param commandName - Nazwa komendy
|
|
34
|
+
*/
|
|
35
|
+
process(job, commandName) {
|
|
36
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
37
|
+
var _a, _b;
|
|
38
|
+
let command = job.data;
|
|
39
|
+
const rpcMetadata = job.data.__rpcMetadata;
|
|
40
|
+
const startTime = Date.now();
|
|
41
|
+
this.logger.debug('Rozpoczynam przetwarzanie komendy', {
|
|
42
|
+
commandName,
|
|
43
|
+
commandId: command.__id,
|
|
44
|
+
jobId: job.id,
|
|
45
|
+
attempt: job.attemptsMade + 1,
|
|
46
|
+
maxAttempts: (_a = job.opts) === null || _a === void 0 ? void 0 : _a.attempts,
|
|
47
|
+
isRpc: !!rpcMetadata,
|
|
48
|
+
replyQueue: rpcMetadata === null || rpcMetadata === void 0 ? void 0 : rpcMetadata.replyQueue,
|
|
49
|
+
timestamp: new Date().toISOString(),
|
|
50
|
+
});
|
|
51
|
+
try {
|
|
52
|
+
// Przywróć obiekty Date z serializowanych danych
|
|
53
|
+
command = command_1.default.reconstructDates(command);
|
|
54
|
+
// Opcjonalne logowanie komendy
|
|
55
|
+
if (this.commandLogger) {
|
|
56
|
+
yield this.commandLogger.logCommand(command);
|
|
57
|
+
}
|
|
58
|
+
const handler = this.commandHandlers[commandName];
|
|
59
|
+
if (!handler) {
|
|
60
|
+
this.logger.error('Brak handlera dla komendy', {
|
|
61
|
+
commandName,
|
|
62
|
+
commandId: command.__id,
|
|
63
|
+
jobId: job.id,
|
|
64
|
+
});
|
|
65
|
+
throw new Error(`Brak handlera dla komendy ${commandName}`);
|
|
66
|
+
}
|
|
67
|
+
this.logger.debug('Wywołuję handler komendy', {
|
|
68
|
+
commandName,
|
|
69
|
+
commandId: command.__id,
|
|
70
|
+
jobId: job.id,
|
|
71
|
+
timestamp: new Date().toISOString(),
|
|
72
|
+
});
|
|
73
|
+
// Zwróć wartość z handlera
|
|
74
|
+
const result = yield handler(command);
|
|
75
|
+
const duration = Date.now() - startTime;
|
|
76
|
+
this.logger.debug('Handler komendy wykonany pomyślnie', {
|
|
77
|
+
commandName,
|
|
78
|
+
commandId: command.__id,
|
|
79
|
+
jobId: job.id,
|
|
80
|
+
duration: `${duration}ms`,
|
|
81
|
+
hasResult: result !== undefined,
|
|
82
|
+
timestamp: new Date().toISOString(),
|
|
83
|
+
});
|
|
84
|
+
// Jeśli to RPC, odeślij odpowiedź do reply queue nadawcy
|
|
85
|
+
if (rpcMetadata === null || rpcMetadata === void 0 ? void 0 : rpcMetadata.replyQueue) {
|
|
86
|
+
yield this.sendRpcResponse(rpcMetadata, result, null, commandName);
|
|
87
|
+
}
|
|
88
|
+
return result;
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
const duration = Date.now() - startTime;
|
|
92
|
+
this.logger.error('Błąd podczas wykonywania handlera komendy', {
|
|
93
|
+
commandName,
|
|
94
|
+
commandId: command.__id,
|
|
95
|
+
jobId: job.id,
|
|
96
|
+
error: error instanceof Error ? error.message : String(error),
|
|
97
|
+
duration: `${duration}ms`,
|
|
98
|
+
attempt: job.attemptsMade + 1,
|
|
99
|
+
maxAttempts: (_b = job.opts) === null || _b === void 0 ? void 0 : _b.attempts,
|
|
100
|
+
timestamp: new Date().toISOString(),
|
|
101
|
+
});
|
|
102
|
+
// Jeśli to RPC, odeślij błąd do reply queue nadawcy
|
|
103
|
+
if (rpcMetadata === null || rpcMetadata === void 0 ? void 0 : rpcMetadata.replyQueue) {
|
|
104
|
+
yield this.sendRpcError(rpcMetadata, error, commandName);
|
|
105
|
+
}
|
|
106
|
+
throw error;
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Wysyła odpowiedź RPC do nadawcy
|
|
112
|
+
* Sprawdza czy kolejka odpowiedzi jeszcze istnieje (może być usunięta przez timeout)
|
|
113
|
+
*/
|
|
114
|
+
sendRpcResponse(rpcMetadata, result, error, commandName) {
|
|
115
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
116
|
+
try {
|
|
117
|
+
// Sprawdź czy kolejka odpowiedzi jeszcze istnieje (może być usunięta przez timeout)
|
|
118
|
+
const queueExists = yield this.queueManager.queueExists(rpcMetadata.replyQueue);
|
|
119
|
+
if (!queueExists) {
|
|
120
|
+
this.logger.warn('Kolejka odpowiedzi RPC już nie istnieje - pomijam wysyłkę', {
|
|
121
|
+
commandName,
|
|
122
|
+
correlationId: rpcMetadata.correlationId,
|
|
123
|
+
replyQueue: rpcMetadata.replyQueue,
|
|
124
|
+
timestamp: new Date().toISOString(),
|
|
125
|
+
});
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
const replyQueue = this.queueManager.createQueue(rpcMetadata.replyQueue);
|
|
129
|
+
yield replyQueue.add('rpc-response', {
|
|
130
|
+
correlationId: rpcMetadata.correlationId,
|
|
131
|
+
result,
|
|
132
|
+
error,
|
|
133
|
+
}, this.jobOptionsBuilder.buildRpcReplyOptions());
|
|
134
|
+
this.logger.debug('Odpowiedź RPC wysłana', {
|
|
135
|
+
commandName,
|
|
136
|
+
correlationId: rpcMetadata.correlationId,
|
|
137
|
+
replyQueue: rpcMetadata.replyQueue,
|
|
138
|
+
timestamp: new Date().toISOString(),
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
catch (replyError) {
|
|
142
|
+
this.logger.error('Nie udało się wysłać odpowiedzi RPC', {
|
|
143
|
+
commandName,
|
|
144
|
+
correlationId: rpcMetadata.correlationId,
|
|
145
|
+
error: replyError instanceof Error ? replyError.message : String(replyError),
|
|
146
|
+
timestamp: new Date().toISOString(),
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Wysyła błąd RPC do nadawcy
|
|
153
|
+
* Sprawdza czy kolejka odpowiedzi jeszcze istnieje (może być usunięta przez timeout)
|
|
154
|
+
*/
|
|
155
|
+
sendRpcError(rpcMetadata, error, commandName) {
|
|
156
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
157
|
+
try {
|
|
158
|
+
// Sprawdź czy kolejka odpowiedzi jeszcze istnieje (może być usunięta przez timeout)
|
|
159
|
+
const queueExists = yield this.queueManager.queueExists(rpcMetadata.replyQueue);
|
|
160
|
+
if (!queueExists) {
|
|
161
|
+
this.logger.warn('Kolejka odpowiedzi RPC już nie istnieje - pomijam wysyłkę błędu', {
|
|
162
|
+
commandName,
|
|
163
|
+
correlationId: rpcMetadata.correlationId,
|
|
164
|
+
replyQueue: rpcMetadata.replyQueue,
|
|
165
|
+
timestamp: new Date().toISOString(),
|
|
166
|
+
});
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
const replyQueue = this.queueManager.createQueue(rpcMetadata.replyQueue);
|
|
170
|
+
yield replyQueue.add('rpc-response', {
|
|
171
|
+
correlationId: rpcMetadata.correlationId,
|
|
172
|
+
result: null,
|
|
173
|
+
error: error instanceof Error ? error.message : String(error),
|
|
174
|
+
}, this.jobOptionsBuilder.buildRpcReplyOptions());
|
|
175
|
+
this.logger.error('Błąd RPC wysłany do nadawcy', {
|
|
176
|
+
commandName,
|
|
177
|
+
correlationId: rpcMetadata.correlationId,
|
|
178
|
+
error: error instanceof Error ? error.message : String(error),
|
|
179
|
+
timestamp: new Date().toISOString(),
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
catch (replyError) {
|
|
183
|
+
this.logger.error('Nie udało się wysłać błędu RPC do nadawcy', {
|
|
184
|
+
commandName,
|
|
185
|
+
correlationId: rpcMetadata.correlationId,
|
|
186
|
+
originalError: error instanceof Error ? error.message : String(error),
|
|
187
|
+
replyError: replyError instanceof Error ? replyError.message : String(replyError),
|
|
188
|
+
timestamp: new Date().toISOString(),
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
exports.default = JobProcessor;
|
|
195
|
+
//# sourceMappingURL=job-processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job-processor.js","sourceRoot":"","sources":["../../../src/command-bus/job/job-processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|