nestworker 2.0.8 → 2.1.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 +343 -117
- package/dist/core/worker.interfaces.d.ts +89 -10
- package/dist/core/worker.module.d.ts +21 -11
- package/dist/core/worker.module.js +38 -10
- package/dist/core/worker.module.js.map +1 -1
- package/dist/core/worker.pool.d.ts +26 -6
- package/dist/core/worker.pool.js +246 -101
- package/dist/core/worker.pool.js.map +1 -1
- package/dist/core/worker.service.d.ts +26 -74
- package/dist/core/worker.service.js +105 -79
- package/dist/core/worker.service.js.map +1 -1
- package/dist/decorators/worker-task.decorator.d.ts +7 -25
- package/dist/decorators/worker-task.decorator.js +5 -26
- package/dist/decorators/worker-task.decorator.js.map +1 -1
- package/dist/discovery/discovery.service.d.ts +2 -9
- package/dist/discovery/discovery.service.js +86 -21
- package/dist/discovery/discovery.service.js.map +1 -1
- package/dist/example/main.js +14 -2
- package/dist/example/main.js.map +1 -1
- package/dist/health/worker.health.d.ts +46 -0
- package/dist/health/worker.health.js +77 -0
- package/dist/health/worker.health.js.map +1 -0
- package/dist/index.d.ts +6 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/metrics/worker.metrics.d.ts +65 -0
- package/dist/metrics/worker.metrics.js +122 -0
- package/dist/metrics/worker.metrics.js.map +1 -0
- package/dist/worker/worker-runtime.js +124 -27
- package/dist/worker/worker-runtime.js.map +1 -1
- package/package.json +1 -1
package/dist/core/worker.pool.js
CHANGED
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.WorkerPool = void 0;
|
|
7
7
|
const node_worker_threads_1 = require("node:worker_threads");
|
|
8
|
+
const node_events_1 = require("node:events");
|
|
8
9
|
const node_os_1 = __importDefault(require("node:os"));
|
|
9
10
|
const node_path_1 = __importDefault(require("node:path"));
|
|
10
11
|
const PRIORITY_WEIGHT = {
|
|
@@ -12,89 +13,118 @@ const PRIORITY_WEIGHT = {
|
|
|
12
13
|
NORMAL: 2,
|
|
13
14
|
LOW: 1,
|
|
14
15
|
};
|
|
15
|
-
class WorkerPool {
|
|
16
|
+
class WorkerPool extends node_events_1.EventEmitter {
|
|
16
17
|
services;
|
|
17
18
|
size;
|
|
19
|
+
shutdownTimeout;
|
|
18
20
|
workers = [];
|
|
19
21
|
idle = [];
|
|
22
|
+
warmingUp = new Set();
|
|
20
23
|
queue = [];
|
|
21
24
|
destroyed = false;
|
|
22
25
|
active = new Map();
|
|
23
|
-
|
|
26
|
+
/** Maps abortSignalId → worker currently running that job */
|
|
27
|
+
signalWorkerMap = new Map();
|
|
28
|
+
proxyMap = new Map();
|
|
29
|
+
constructor(services, proxyInstances, size = node_os_1.default.cpus().length, shutdownTimeout = 30_000) {
|
|
30
|
+
super();
|
|
24
31
|
this.services = services;
|
|
25
32
|
this.size = size;
|
|
33
|
+
this.shutdownTimeout = shutdownTimeout;
|
|
34
|
+
for (const { propertyKey, instance } of proxyInstances) {
|
|
35
|
+
this.proxyMap.set(propertyKey, instance);
|
|
36
|
+
}
|
|
26
37
|
for (let i = 0; i < this.size; i++) {
|
|
27
|
-
|
|
28
|
-
this.workers.push(worker);
|
|
29
|
-
this.idle.push(worker);
|
|
38
|
+
this.spawnWorker();
|
|
30
39
|
}
|
|
31
40
|
}
|
|
32
|
-
execute(job) {
|
|
33
|
-
if (this.destroyed)
|
|
41
|
+
execute(job, signal) {
|
|
42
|
+
if (this.destroyed)
|
|
34
43
|
return Promise.reject(new Error('WorkerPool destroyed'));
|
|
35
|
-
|
|
36
|
-
|
|
44
|
+
return new Promise((resolve, reject) => {
|
|
45
|
+
// Reject immediately if already aborted
|
|
46
|
+
if (signal?.aborted) {
|
|
47
|
+
reject(new DOMException('Task aborted before enqueue', 'AbortError'));
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
37
50
|
const task = {
|
|
38
51
|
job,
|
|
39
52
|
resolve: resolve,
|
|
40
53
|
reject,
|
|
54
|
+
attempts: 0,
|
|
55
|
+
signal,
|
|
41
56
|
};
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
57
|
+
if (signal) {
|
|
58
|
+
signal.addEventListener('abort', () => {
|
|
59
|
+
// Remove from queue if not yet dispatched
|
|
60
|
+
const idx = this.queue.indexOf(task);
|
|
61
|
+
if (idx >= 0) {
|
|
62
|
+
this.queue.splice(idx, 1);
|
|
63
|
+
reject(new DOMException('Task aborted', 'AbortError'));
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
// Already running — send abort signal to worker
|
|
67
|
+
if (job.abortSignalId) {
|
|
68
|
+
const worker = this.signalWorkerMap.get(job.abortSignalId);
|
|
69
|
+
if (worker) {
|
|
70
|
+
try {
|
|
71
|
+
worker.postMessage({ type: 'abort', abortSignalId: job.abortSignalId });
|
|
72
|
+
}
|
|
73
|
+
catch { /* worker gone */ }
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}, { once: true });
|
|
77
|
+
}
|
|
45
78
|
this.enqueue(task);
|
|
46
|
-
// process queue
|
|
47
79
|
this.schedule();
|
|
48
80
|
});
|
|
49
81
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
this.
|
|
71
|
-
|
|
82
|
+
stats() {
|
|
83
|
+
return {
|
|
84
|
+
poolSize: this.size,
|
|
85
|
+
idle: this.idle.length,
|
|
86
|
+
busy: this.active.size,
|
|
87
|
+
queued: this.queue.length,
|
|
88
|
+
warmingUp: this.warmingUp.size,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
spawnWorker() {
|
|
92
|
+
const worker = new node_worker_threads_1.Worker(node_path_1.default.resolve(__dirname, '../worker/worker-runtime.js'), { workerData: { services: this.services } });
|
|
93
|
+
this.workers.push(worker);
|
|
94
|
+
this.warmingUp.add(worker);
|
|
95
|
+
const onReady = (msg) => {
|
|
96
|
+
const message = msg;
|
|
97
|
+
if (message?.type !== 'worker:ready')
|
|
98
|
+
return;
|
|
99
|
+
worker.removeListener('message', onReady);
|
|
100
|
+
this.warmingUp.delete(worker);
|
|
101
|
+
if (!this.destroyed) {
|
|
102
|
+
this.idle.push(worker);
|
|
103
|
+
this.schedule();
|
|
72
104
|
}
|
|
73
|
-
}
|
|
74
|
-
|
|
105
|
+
};
|
|
106
|
+
worker.on('message', onReady);
|
|
107
|
+
worker.once('error', (err) => this.handleWorkerError(worker, err));
|
|
108
|
+
worker.once('exit', (code) => this.handleWorkerExit(worker, code));
|
|
109
|
+
return worker;
|
|
75
110
|
}
|
|
76
111
|
enqueue(task) {
|
|
77
112
|
const weight = PRIORITY_WEIGHT[task.job.priority];
|
|
78
|
-
let lo = 0;
|
|
79
|
-
let hi = this.queue.length;
|
|
113
|
+
let lo = 0, hi = this.queue.length;
|
|
80
114
|
while (lo < hi) {
|
|
81
115
|
const mid = (lo + hi) >>> 1;
|
|
82
|
-
if (PRIORITY_WEIGHT[this.queue[mid].job.priority] < weight)
|
|
116
|
+
if (PRIORITY_WEIGHT[this.queue[mid].job.priority] < weight)
|
|
83
117
|
hi = mid;
|
|
84
|
-
|
|
85
|
-
else {
|
|
118
|
+
else
|
|
86
119
|
lo = mid + 1;
|
|
87
|
-
}
|
|
88
120
|
}
|
|
89
121
|
this.queue.splice(lo, 0, task);
|
|
90
122
|
}
|
|
91
123
|
schedule() {
|
|
92
124
|
if (this.destroyed)
|
|
93
125
|
return;
|
|
94
|
-
while (this.idle.length > 0 &&
|
|
95
|
-
this.queue.length > 0) {
|
|
126
|
+
while (this.idle.length > 0 && this.queue.length > 0) {
|
|
96
127
|
const worker = this.idle.pop();
|
|
97
|
-
// highest priority task first
|
|
98
128
|
const task = this.queue.shift();
|
|
99
129
|
this.dispatch(worker, task);
|
|
100
130
|
}
|
|
@@ -102,109 +132,224 @@ class WorkerPool {
|
|
|
102
132
|
dispatch(worker, task) {
|
|
103
133
|
let settled = false;
|
|
104
134
|
let timeoutHandle;
|
|
135
|
+
const startedAt = Date.now();
|
|
136
|
+
task.attempts++;
|
|
137
|
+
task.job.attempt = task.attempts - 1;
|
|
138
|
+
this.active.set(worker, { task, priority: task.job.priority, startedAt });
|
|
139
|
+
if (task.job.abortSignalId) {
|
|
140
|
+
this.signalWorkerMap.set(task.job.abortSignalId, worker);
|
|
141
|
+
}
|
|
142
|
+
this.emit('taskStart', task.job);
|
|
105
143
|
const cleanup = () => {
|
|
106
144
|
worker.removeListener('message', onMessage);
|
|
107
|
-
|
|
108
|
-
worker.removeListener('exit', onExit);
|
|
109
|
-
if (timeoutHandle) {
|
|
145
|
+
if (timeoutHandle)
|
|
110
146
|
clearTimeout(timeoutHandle);
|
|
147
|
+
if (task.job.abortSignalId) {
|
|
148
|
+
this.signalWorkerMap.delete(task.job.abortSignalId);
|
|
111
149
|
}
|
|
112
150
|
};
|
|
113
151
|
const recycle = () => {
|
|
114
152
|
cleanup();
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
153
|
+
this.active.delete(worker);
|
|
154
|
+
if (!this.destroyed) {
|
|
155
|
+
this.idle.push(worker);
|
|
156
|
+
this.schedule();
|
|
157
|
+
}
|
|
120
158
|
};
|
|
121
159
|
const settle = (fn) => {
|
|
122
160
|
if (settled)
|
|
123
161
|
return;
|
|
124
162
|
settled = true;
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
}
|
|
163
|
+
fn();
|
|
164
|
+
recycle();
|
|
165
|
+
};
|
|
166
|
+
const handleFailure = (serializedError) => {
|
|
167
|
+
const { retry = 0, retryDelay = 0 } = task.job;
|
|
168
|
+
this.emit('taskError', task.job, serializedError);
|
|
169
|
+
if (task.attempts < retry + 1) {
|
|
170
|
+
// Re-enqueue with delay
|
|
171
|
+
const delay = typeof retryDelay === 'number' ? retryDelay : 0;
|
|
172
|
+
const scheduleRetry = () => {
|
|
173
|
+
this.enqueue(task);
|
|
174
|
+
this.schedule();
|
|
175
|
+
};
|
|
176
|
+
if (delay > 0)
|
|
177
|
+
setTimeout(scheduleRetry, delay);
|
|
178
|
+
else
|
|
179
|
+
scheduleRetry();
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
// All attempts exhausted → dead letter
|
|
183
|
+
const dlEvent = {
|
|
184
|
+
jobId: task.job.jobId,
|
|
185
|
+
serviceName: task.job.serviceName,
|
|
186
|
+
methodName: task.job.methodName,
|
|
187
|
+
args: task.job.args,
|
|
188
|
+
attempts: task.attempts,
|
|
189
|
+
error: serializedError,
|
|
190
|
+
failedAt: new Date(),
|
|
191
|
+
};
|
|
192
|
+
this.emit('dead', dlEvent);
|
|
193
|
+
task.reject(deserializeError(serializedError));
|
|
130
194
|
};
|
|
131
|
-
const onMessage = (
|
|
195
|
+
const onMessage = async (msg) => {
|
|
196
|
+
const message = msg;
|
|
197
|
+
// ── IPC invoke from worker ────────────────────────────────────────
|
|
198
|
+
if (message.type === 'ipc:invoke') {
|
|
199
|
+
const req = message;
|
|
200
|
+
const svcInstance = this.proxyMap.get(req.propertyKey);
|
|
201
|
+
const reply = (res) => {
|
|
202
|
+
try {
|
|
203
|
+
worker.postMessage(res);
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
try {
|
|
207
|
+
worker.postMessage({
|
|
208
|
+
type: 'ipc:result', callId: res.callId, ok: false,
|
|
209
|
+
error: `IPC result for "${req.propertyKey}.${req.methodName}" ` +
|
|
210
|
+
`is not structuredClone-compatible.`,
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
catch { /* worker gone */ }
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
if (!svcInstance) {
|
|
217
|
+
reply({ type: 'ipc:result', callId: req.callId, ok: false,
|
|
218
|
+
error: `No proxy registered for "${req.propertyKey}"` });
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
const method = svcInstance[req.methodName];
|
|
222
|
+
if (typeof method !== 'function') {
|
|
223
|
+
reply({ type: 'ipc:result', callId: req.callId, ok: false,
|
|
224
|
+
error: `Method "${req.methodName}" not found on "${req.propertyKey}"` });
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
try {
|
|
228
|
+
// Call via svcInstance[method]() to preserve `this` binding.
|
|
229
|
+
// Detached call (const fn = svcInstance[m]; fn()) loses `this`
|
|
230
|
+
// in strict mode, breaking any method that reads instance properties.
|
|
231
|
+
const data = await svcInstance[req.methodName](...req.args);
|
|
232
|
+
reply({ type: 'ipc:result', callId: req.callId, ok: true, data });
|
|
233
|
+
}
|
|
234
|
+
catch (err) {
|
|
235
|
+
reply({ type: 'ipc:result', callId: req.callId, ok: false,
|
|
236
|
+
error: err.message ?? String(err) });
|
|
237
|
+
}
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
if (message.type === 'worker:ready')
|
|
241
|
+
return;
|
|
242
|
+
// ── Job result ────────────────────────────────────────────────────
|
|
243
|
+
const result = message;
|
|
244
|
+
const durationMs = Date.now() - startedAt;
|
|
132
245
|
settle(() => {
|
|
133
246
|
if (result.ok) {
|
|
247
|
+
this.emit('taskEnd', task.job, durationMs);
|
|
134
248
|
task.resolve(result.data);
|
|
135
249
|
}
|
|
136
250
|
else {
|
|
137
|
-
|
|
138
|
-
|
|
251
|
+
handleFailure(result.error ?? {
|
|
252
|
+
name: 'Error',
|
|
253
|
+
message: 'Unknown worker error',
|
|
254
|
+
});
|
|
139
255
|
}
|
|
140
256
|
});
|
|
141
257
|
};
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
task.reject(err);
|
|
145
|
-
await this.replaceWorker(worker);
|
|
146
|
-
});
|
|
147
|
-
};
|
|
148
|
-
const onExit = async (code) => {
|
|
149
|
-
if (this.destroyed)
|
|
150
|
-
return;
|
|
151
|
-
settle(async () => {
|
|
152
|
-
task.reject(new Error(`Worker exited unexpectedly with code ${code} ` +
|
|
153
|
-
`while running "${task.job.serviceName}.${task.job.methodName}"`));
|
|
154
|
-
await this.replaceWorker(worker);
|
|
155
|
-
});
|
|
156
|
-
};
|
|
157
|
-
worker.once('message', onMessage);
|
|
158
|
-
worker.once('error', onError);
|
|
159
|
-
worker.once('exit', onExit);
|
|
160
|
-
if (task.job.timeout &&
|
|
161
|
-
task.job.timeout > 0) {
|
|
258
|
+
worker.on('message', onMessage);
|
|
259
|
+
if (task.job.timeout && task.job.timeout > 0) {
|
|
162
260
|
timeoutHandle = setTimeout(async () => {
|
|
163
261
|
if (settled)
|
|
164
262
|
return;
|
|
165
263
|
settled = true;
|
|
166
264
|
cleanup();
|
|
167
|
-
|
|
265
|
+
this.active.delete(worker);
|
|
266
|
+
const serializedError = {
|
|
267
|
+
name: 'TimeoutError',
|
|
268
|
+
message: `Task "${task.job.serviceName}.${task.job.methodName}" ` +
|
|
269
|
+
`timed out after ${task.job.timeout}ms`,
|
|
270
|
+
};
|
|
271
|
+
handleFailure(serializedError);
|
|
168
272
|
try {
|
|
169
273
|
await worker.terminate();
|
|
170
274
|
}
|
|
171
275
|
catch { }
|
|
172
|
-
|
|
276
|
+
this.replaceWorker(worker);
|
|
173
277
|
this.schedule();
|
|
174
278
|
}, task.job.timeout);
|
|
175
279
|
}
|
|
176
280
|
worker.postMessage(task.job);
|
|
177
281
|
}
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
}
|
|
183
|
-
|
|
282
|
+
handleWorkerError(worker, err) {
|
|
283
|
+
const running = this.active.get(worker);
|
|
284
|
+
if (running) {
|
|
285
|
+
const { serviceName, methodName } = running.task.job;
|
|
286
|
+
const wrapped = new Error(`Worker crashed in "${serviceName}.${methodName}": ${err.message}`);
|
|
287
|
+
wrapped.stack = err.stack;
|
|
288
|
+
this.emit('error', wrapped, running.task.job);
|
|
289
|
+
running.task.reject(wrapped);
|
|
290
|
+
this.active.delete(worker);
|
|
291
|
+
}
|
|
292
|
+
this.replaceWorker(worker);
|
|
184
293
|
}
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
294
|
+
handleWorkerExit(worker, code) {
|
|
295
|
+
if (this.destroyed)
|
|
296
|
+
return;
|
|
297
|
+
const running = this.active.get(worker);
|
|
298
|
+
if (running) {
|
|
299
|
+
running.task.reject(new Error(`Worker exited with code ${code} while running ` +
|
|
300
|
+
`"${running.task.job.serviceName}.${running.task.job.methodName}"`));
|
|
301
|
+
this.active.delete(worker);
|
|
189
302
|
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
303
|
+
this.replaceWorker(worker);
|
|
304
|
+
}
|
|
305
|
+
replaceWorker(oldWorker) {
|
|
306
|
+
const remove = (arr) => {
|
|
307
|
+
const i = arr.indexOf(oldWorker);
|
|
308
|
+
if (i >= 0)
|
|
309
|
+
arr.splice(i, 1);
|
|
310
|
+
};
|
|
311
|
+
remove(this.workers);
|
|
312
|
+
remove(this.idle);
|
|
313
|
+
this.warmingUp.delete(oldWorker);
|
|
314
|
+
if (!this.destroyed) {
|
|
315
|
+
this.spawnWorker();
|
|
316
|
+
this.schedule();
|
|
193
317
|
}
|
|
194
|
-
const newWorker = this.spawnWorker();
|
|
195
|
-
this.workers.push(newWorker);
|
|
196
|
-
this.idle.push(newWorker);
|
|
197
318
|
}
|
|
198
319
|
async destroy() {
|
|
199
320
|
this.destroyed = true;
|
|
321
|
+
// Drain: wait for all active jobs to finish, up to shutdownTimeout
|
|
322
|
+
if (this.active.size > 0) {
|
|
323
|
+
await Promise.race([
|
|
324
|
+
// Wait for all active jobs to settle
|
|
325
|
+
Promise.allSettled(Array.from(this.active.values()).map(({ task }) => new Promise((res) => {
|
|
326
|
+
const orig = task.resolve;
|
|
327
|
+
const origRej = task.reject;
|
|
328
|
+
task.resolve = (v) => { orig(v); res(); };
|
|
329
|
+
task.reject = (e) => { origRej(e); res(); };
|
|
330
|
+
}))),
|
|
331
|
+
// Force after timeout
|
|
332
|
+
new Promise((res) => setTimeout(res, this.shutdownTimeout)),
|
|
333
|
+
]);
|
|
334
|
+
}
|
|
335
|
+
// Reject anything still queued
|
|
200
336
|
for (const queued of this.queue) {
|
|
201
337
|
queued.reject(new Error('WorkerPool destroyed'));
|
|
202
338
|
}
|
|
203
339
|
this.queue.length = 0;
|
|
204
|
-
await Promise.allSettled(this.workers.map((
|
|
340
|
+
await Promise.allSettled(this.workers.map((w) => w.terminate()));
|
|
205
341
|
this.workers.length = 0;
|
|
206
342
|
this.idle.length = 0;
|
|
207
343
|
}
|
|
208
344
|
}
|
|
209
345
|
exports.WorkerPool = WorkerPool;
|
|
346
|
+
function deserializeError(serialized) {
|
|
347
|
+
const err = new Error(serialized.message);
|
|
348
|
+
err.name = serialized.name;
|
|
349
|
+
if (serialized.stack)
|
|
350
|
+
err.stack = serialized.stack;
|
|
351
|
+
if (serialized.extra)
|
|
352
|
+
Object.assign(err, serialized.extra);
|
|
353
|
+
return err;
|
|
354
|
+
}
|
|
210
355
|
//# sourceMappingURL=worker.pool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.pool.js","sourceRoot":"","sources":["../../src/core/worker.pool.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"worker.pool.js","sourceRoot":"","sources":["../../src/core/worker.pool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,88 +1,40 @@
|
|
|
1
1
|
import { OnModuleDestroy, OnModuleInit } from '@nestjs/common';
|
|
2
2
|
import { WorkerDiscoveryService } from '../discovery/discovery.service';
|
|
3
|
-
import type { TaskPriority, WorkerModuleOptions } from './worker.interfaces';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
* - Priority queue support
|
|
13
|
-
* - Timeout support
|
|
14
|
-
* - Worker thread execution
|
|
15
|
-
* - NestJS dependency integration
|
|
16
|
-
*
|
|
17
|
-
* Lifecycle:
|
|
18
|
-
* 1. Discovers worker-enabled services
|
|
19
|
-
* 2. Serializes metadata for worker runtime
|
|
20
|
-
* 3. Creates WorkerPool
|
|
21
|
-
* 4. Dispatches tasks to workers
|
|
22
|
-
* 5. Handles graceful shutdown
|
|
23
|
-
*
|
|
24
|
-
* Example:
|
|
25
|
-
*
|
|
26
|
-
* ```ts
|
|
27
|
-
* await workerService.run(
|
|
28
|
-
* 'ImageService',
|
|
29
|
-
* 'resizeImage',
|
|
30
|
-
* [500],
|
|
31
|
-
* {
|
|
32
|
-
* priority: 'HIGH',
|
|
33
|
-
* timeout: 5000,
|
|
34
|
-
* },
|
|
35
|
-
* );
|
|
36
|
-
* ```
|
|
37
|
-
*/
|
|
3
|
+
import type { TaskPriority, WorkerModuleOptions, DeadLetterEvent, PoolStats, SerializedError, WorkerJob } from './worker.interfaces';
|
|
4
|
+
export type { DeadLetterEvent, PoolStats };
|
|
5
|
+
export interface RunOptions {
|
|
6
|
+
priority?: TaskPriority;
|
|
7
|
+
timeout?: number;
|
|
8
|
+
retry?: number;
|
|
9
|
+
retryDelay?: number;
|
|
10
|
+
signal?: AbortSignal;
|
|
11
|
+
}
|
|
38
12
|
export declare class WorkerService implements OnModuleInit, OnModuleDestroy {
|
|
39
13
|
private readonly discovery;
|
|
40
14
|
private readonly options;
|
|
15
|
+
private readonly logger;
|
|
41
16
|
private pool;
|
|
42
|
-
private readonly
|
|
17
|
+
private readonly taskDefaults;
|
|
18
|
+
private readonly taskProxies;
|
|
43
19
|
constructor(discovery: WorkerDiscoveryService, options: WorkerModuleOptions);
|
|
44
20
|
onModuleInit(): void;
|
|
45
21
|
private initPool;
|
|
46
22
|
/**
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
* Parameters:
|
|
50
|
-
* - serviceName: target service
|
|
51
|
-
* - methodName: target method
|
|
52
|
-
* - args: serialized arguments
|
|
53
|
-
* - overrides: runtime priority/timeout overrides
|
|
54
|
-
*
|
|
55
|
-
* Priority:
|
|
56
|
-
* - HIGH
|
|
57
|
-
* - NORMAL
|
|
58
|
-
* - LOW
|
|
59
|
-
*
|
|
60
|
-
* Timeout:
|
|
61
|
-
* Automatically terminates timed-out workers.
|
|
62
|
-
*
|
|
63
|
-
* Example:
|
|
64
|
-
*
|
|
65
|
-
* ```ts
|
|
66
|
-
* await workerService.run(
|
|
67
|
-
* 'ImageService',
|
|
68
|
-
* 'generateThumbnail',
|
|
69
|
-
* [1920, 1080],
|
|
70
|
-
* {
|
|
71
|
-
* priority: 'HIGH',
|
|
72
|
-
* timeout: 3000,
|
|
73
|
-
* },
|
|
74
|
-
* );
|
|
75
|
-
* ```
|
|
76
|
-
*/
|
|
77
|
-
run<T = unknown>(serviceName: string, methodName: string, args?: unknown[], overrides?: {
|
|
78
|
-
priority?: TaskPriority;
|
|
79
|
-
timeout?: number;
|
|
80
|
-
}): Promise<T>;
|
|
81
|
-
/**
|
|
82
|
-
* Gracefully shuts down worker pool.
|
|
23
|
+
* Run a @WorkerTask method in a worker thread.
|
|
83
24
|
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
25
|
+
* @param serviceName Class name of the @WorkerClass provider
|
|
26
|
+
* @param methodName Method decorated with @WorkerTask
|
|
27
|
+
* @param args structuredClone-compatible arguments
|
|
28
|
+
* @param options Optional priority / timeout / retry / AbortSignal overrides
|
|
86
29
|
*/
|
|
30
|
+
run<T = unknown>(serviceName: string, methodName: string, args?: unknown[], options?: RunOptions): Promise<T>;
|
|
31
|
+
/** Listen for dead-letter events (jobs that exhausted all retry attempts) */
|
|
32
|
+
onDead(listener: (event: DeadLetterEvent) => void): this;
|
|
33
|
+
/** Listen for task lifecycle events */
|
|
34
|
+
onTaskEnd(listener: (job: WorkerJob, durationMs: number) => void): this;
|
|
35
|
+
onTaskStart(listener: (job: WorkerJob) => void): this;
|
|
36
|
+
onTaskError(listener: (job: WorkerJob, error: SerializedError) => void): this;
|
|
37
|
+
/** Current pool stats — use for health checks and metrics */
|
|
38
|
+
stats(): PoolStats;
|
|
87
39
|
onModuleDestroy(): Promise<void>;
|
|
88
40
|
}
|