@alanszp/queue 9.0.0 → 9.2.4
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/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/queue/queue.d.ts +5 -4
- package/dist/queue/queue.js +5 -2
- package/dist/queue/queue.js.map +1 -1
- package/dist/types.d.ts +2 -1
- package/dist/worker/worker.d.ts +8 -8
- package/dist/worker/worker.js +4 -3
- package/dist/worker/worker.js.map +1 -1
- package/dist/wrappers/withContext.d.ts +2 -1
- package/dist/wrappers/withContext.js.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +1 -0
- package/src/queue/queue.ts +10 -6
- package/src/types.ts +3 -3
- package/src/worker/worker.ts +33 -13
- package/src/wrappers/withContext.ts +4 -3
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -11,6 +11,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
13
|
__exportStar(require("./queue/createQueue"), exports);
|
|
14
|
+
__exportStar(require("./queue/queue"), exports);
|
|
14
15
|
__exportStar(require("./connectionManager"), exports);
|
|
15
16
|
__exportStar(require("./shutdownQueue"), exports);
|
|
16
17
|
__exportStar(require("./types"), exports);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,sDAAoC;AACpC,sDAAoC;AACpC,kDAAgC;AAChC,0CAAwB;AACxB,2CAAyB;AACzB,kDAAgC;AAChC,4DAA0C"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,sDAAoC;AACpC,gDAA8B;AAC9B,sDAAoC;AACpC,kDAAgC;AAChC,0CAAwB;AACxB,2CAAyB;AACzB,kDAAgC;AAChC,4DAA0C"}
|
package/dist/queue/queue.d.ts
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { JobsOptions } from "bullmq";
|
|
1
|
+
import { Job, JobsOptions } from "bullmq";
|
|
3
2
|
import { SharedContext } from "@alanszp/shared-context";
|
|
3
|
+
import { ConnectionOptions, JobData, QueueOptions } from "../types";
|
|
4
4
|
export declare class Queue<JobType = JobData> {
|
|
5
5
|
private _queue;
|
|
6
6
|
private name;
|
|
7
7
|
private getSharedContext;
|
|
8
8
|
constructor(connection: ConnectionOptions, name: string, prefix: string, getSharedContext: () => SharedContext, queueOptions?: QueueOptions);
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
getName(): string;
|
|
10
|
+
publishJob(job: JobType, opts?: JobsOptions): Promise<Job<JobType>>;
|
|
11
|
+
publishBulkJob(jobDatas: JobType[]): Promise<Job<JobType>[]>;
|
|
11
12
|
publishBulkJobWithOptions(jobDefinitions: {
|
|
12
13
|
jobData: JobType;
|
|
13
14
|
opts: JobsOptions;
|
package/dist/queue/queue.js
CHANGED
|
@@ -34,18 +34,21 @@ class Queue {
|
|
|
34
34
|
connection,
|
|
35
35
|
}, queueOptions || {})), { prefix: `{${prefix}}:${BULL_PREFIX}` }));
|
|
36
36
|
}
|
|
37
|
+
getName() {
|
|
38
|
+
return this.name;
|
|
39
|
+
}
|
|
37
40
|
publishJob(job, opts) {
|
|
38
41
|
return __awaiter(this, void 0, void 0, function* () {
|
|
39
42
|
const context = this.getSharedContext();
|
|
40
43
|
const lid = context.getLifecycleId();
|
|
41
44
|
const lch = context.getLifecycleChain();
|
|
42
|
-
|
|
45
|
+
return this.queue.add(this.name, Object.assign(Object.assign({}, job), { lid, lch }), opts);
|
|
43
46
|
});
|
|
44
47
|
}
|
|
45
48
|
publishBulkJob(jobDatas) {
|
|
46
49
|
return __awaiter(this, void 0, void 0, function* () {
|
|
47
50
|
const jobs = jobDatas.map((data) => ({ name: this.name, data }));
|
|
48
|
-
|
|
51
|
+
return this.queue.addBulk(jobs);
|
|
49
52
|
});
|
|
50
53
|
}
|
|
51
54
|
publishBulkJobWithOptions(jobDefinitions) {
|
package/dist/queue/queue.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/queue/queue.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAA+B;
|
|
1
|
+
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/queue/queue.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAA+B;AAG/B,oCAA8E;AAE9E,MAAM,WAAW,GAAG,GAAG,CAAC;AAExB,MAAM,wCAAwC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACnE,MAAM,+BAA+B,GAAG,GAAG,CAAC;AAE5C,MAAa,KAAK;IAOhB,YACE,UAA6B,EAC7B,IAAY,EACZ,MAAc,EACd,gBAAqC,EACrC,YAA2B;QAE3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QAEzC,IAAI,CAAC,MAAM,GAAG,IAAI,gBAAQ,CAAU,IAAI,kCACnC,IAAA,cAAK,EACN;YACE,iBAAiB,EAAE;gBACjB,gBAAgB,EAAE;oBAChB,GAAG,EAAE,wCAAwC;oBAC7C,KAAK,EAAE,+BAA+B;iBACvC;gBACD,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE;oBACP,IAAI,EAAE,aAAa;oBACnB,KAAK,EAAE,IAAI;iBACZ;aACF;YACD,UAAU;SACX,EACD,YAAY,IAAI,EAAE,CACnB,GACE,EAAE,MAAM,EAAE,IAAI,MAAM,KAAK,WAAW,EAAE,EAAE,EAC3C,CAAC;IACL,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAEK,UAAU,CAAC,GAAY,EAAE,IAAkB;;YAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxC,MAAM,GAAG,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,kCAAO,GAAG,KAAE,GAAG,EAAE,GAAG,KAAI,IAAI,CAAC,CAAC;QAC/D,CAAC;KAAA;IAEK,cAAc,CAAC,QAAmB;;YACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACjE,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;KAAA;IAEK,yBAAyB,CAC7B,cAAyD;;YAEzD,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC5D,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI;gBACJ,IAAI;aACL,CAAC,CAAC,CAAC;YACJ,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;KAAA;IAEK,KAAK;;YACT,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAC3B,CAAC;KAAA;IAED,IAAY,KAAK;QACf,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF;AA1ED,sBA0EC"}
|
package/dist/types.d.ts
CHANGED
package/dist/worker/worker.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ILogger } from "@alanszp/logger";
|
|
2
|
-
import { JobData, Job, RawWorker, WorkerOptions } from "../types";
|
|
2
|
+
import { JobData, Job, RawWorker, WorkerOptions, JobReturnValue } from "../types";
|
|
3
3
|
import { SharedContext } from "@alanszp/shared-context";
|
|
4
4
|
import { Audit } from "@alanszp/audit";
|
|
5
5
|
export interface WorkerStatus {
|
|
@@ -15,25 +15,25 @@ export interface WorkerContext {
|
|
|
15
15
|
baseLogger: ILogger;
|
|
16
16
|
audit: Audit;
|
|
17
17
|
}
|
|
18
|
-
interface Worker<
|
|
19
|
-
handleJobFailed?(job: Job<
|
|
20
|
-
handleJobCompleted?(job: Job<
|
|
18
|
+
interface Worker<Data = JobData, ReturnValue = JobReturnValue> {
|
|
19
|
+
handleJobFailed?(job: Job<Data, ReturnValue>, error: Error): Promise<void> | void;
|
|
20
|
+
handleJobCompleted?(job: Job<Data, ReturnValue>): Promise<void> | void;
|
|
21
21
|
handleJobError?(error: Error): Promise<void> | void;
|
|
22
22
|
}
|
|
23
|
-
declare abstract class Worker<
|
|
23
|
+
declare abstract class Worker<Data = JobData, ReturnValue = unknown> {
|
|
24
24
|
private _worker;
|
|
25
25
|
private _queue;
|
|
26
26
|
private getLogger;
|
|
27
27
|
constructor();
|
|
28
|
-
abstract process(job: Job<
|
|
28
|
+
abstract process(job: Job<Data, ReturnValue>): Promise<ReturnValue>;
|
|
29
29
|
abstract setup(): WorkerSetup;
|
|
30
30
|
abstract getContext(): WorkerContext;
|
|
31
31
|
close(): Promise<void>;
|
|
32
32
|
get status(): WorkerStatus;
|
|
33
33
|
get id(): RawWorker["id"];
|
|
34
34
|
private processJob;
|
|
35
|
-
processFailed(job: Job<
|
|
36
|
-
processCompleted(job: Job<
|
|
35
|
+
processFailed(job: Job<Data, ReturnValue>, error: Error): Promise<void>;
|
|
36
|
+
processCompleted(job: Job<Data, ReturnValue>, returnValue: ReturnValue): Promise<void>;
|
|
37
37
|
processError(error: Error): Promise<void>;
|
|
38
38
|
run(): Promise<void>;
|
|
39
39
|
protected registerHooks(): void;
|
package/dist/worker/worker.js
CHANGED
|
@@ -40,7 +40,7 @@ class Worker {
|
|
|
40
40
|
queue: this.queueFullName,
|
|
41
41
|
job,
|
|
42
42
|
});
|
|
43
|
-
|
|
43
|
+
return this.process(job);
|
|
44
44
|
}));
|
|
45
45
|
}
|
|
46
46
|
processFailed(job, error) {
|
|
@@ -55,11 +55,12 @@ class Worker {
|
|
|
55
55
|
}
|
|
56
56
|
});
|
|
57
57
|
}
|
|
58
|
-
processCompleted(job) {
|
|
58
|
+
processCompleted(job, returnValue) {
|
|
59
59
|
return __awaiter(this, void 0, void 0, function* () {
|
|
60
60
|
this.getLogger().info("worker.job.completed", {
|
|
61
61
|
queue: this.queueFullName,
|
|
62
62
|
job,
|
|
63
|
+
returnValue,
|
|
63
64
|
});
|
|
64
65
|
if (this.handleJobCompleted) {
|
|
65
66
|
yield this.handleJobCompleted(job);
|
|
@@ -101,7 +102,7 @@ class Worker {
|
|
|
101
102
|
// on error: handle unhandled exceptions
|
|
102
103
|
this.worker.on("error", (error) => this.processError(error));
|
|
103
104
|
// on completed: allow to do something else after a job is completed
|
|
104
|
-
this.worker.on("completed", (job) => this.processCompleted(job));
|
|
105
|
+
this.worker.on("completed", (job, result) => this.processCompleted(job, result));
|
|
105
106
|
// on failed: when the process fails with an exception it is possible to listen for the "failed" event
|
|
106
107
|
this.worker.on("failed", (job, error) => this.processFailed(job, error));
|
|
107
108
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/worker/worker.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,4DAAyD;AACzD,
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/worker/worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { Job, JobData } from "bullmq";
|
|
2
2
|
import { WorkerContext } from "../worker/worker";
|
|
3
|
-
|
|
3
|
+
import { JobReturnValue } from "../types";
|
|
4
|
+
export declare function withContext<T = JobData, ReturnValue = JobReturnValue>(workerContext: WorkerContext, executor: (job: Job<T>) => Promise<ReturnValue>): (job: Job<T>) => Promise<ReturnValue>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withContext.js","sourceRoot":"","sources":["../../src/wrappers/withContext.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,gDAAwB;AACxB,4DAAyD;
|
|
1
|
+
{"version":3,"file":"withContext.js","sourceRoot":"","sources":["../../src/wrappers/withContext.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,gDAAwB;AACxB,4DAAyD;AAKzD,SAAgB,WAAW,CACzB,aAA4B,EAC5B,QAA+C;IAE/C,OAAO,CAAC,GAAG,EAAE,EAAE;QACb,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,IAAsC,CAAC;QAChE,OAAO,aAAa,CAAC,aAAa,CAAC,GAAG,CACpC,GAAS,EAAE;YACT,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC,CAAA,EACD;YACE,MAAM,EAAE,aAAa,CAAC,UAAU;YAChC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,SAAS,EAAE;YACtC,WAAW,EAAE,GAAG,IAAI,IAAA,cAAI,GAAE;YAC1B,cAAc,EAAE,GAAG,IAAI,IAAA,6BAAa,GAAE;YACtC,SAAS,EAAE,IAAA,cAAI,GAAE;SAClB,CACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAnBD,kCAmBC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alanszp/queue",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.2.4",
|
|
4
4
|
"description": "Workers and queues",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"typings": "dist/index.d.ts",
|
|
@@ -32,5 +32,5 @@
|
|
|
32
32
|
"ioredis": "^5.2.3",
|
|
33
33
|
"lodash": "^4.17.21"
|
|
34
34
|
},
|
|
35
|
-
"gitHead": "
|
|
35
|
+
"gitHead": "0f35519e3073a3b4aa2b0060303eacf228d321ee"
|
|
36
36
|
}
|
package/src/index.ts
CHANGED
package/src/queue/queue.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { merge } from "lodash";
|
|
2
|
-
import {
|
|
3
|
-
import { JobsOptions } from "bullmq";
|
|
2
|
+
import { Job, JobsOptions } from "bullmq";
|
|
4
3
|
import { SharedContext } from "@alanszp/shared-context";
|
|
4
|
+
import { ConnectionOptions, JobData, QueueOptions, RawQueue } from "../types";
|
|
5
5
|
|
|
6
6
|
const BULL_PREFIX = "b";
|
|
7
7
|
|
|
@@ -48,16 +48,20 @@ export class Queue<JobType = JobData> {
|
|
|
48
48
|
});
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
public getName(): string {
|
|
52
|
+
return this.name;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
async publishJob(job: JobType, opts?: JobsOptions): Promise<Job<JobType>> {
|
|
52
56
|
const context = this.getSharedContext();
|
|
53
57
|
const lid = context.getLifecycleId();
|
|
54
58
|
const lch = context.getLifecycleChain();
|
|
55
|
-
|
|
59
|
+
return this.queue.add(this.name, { ...job, lid, lch }, opts);
|
|
56
60
|
}
|
|
57
61
|
|
|
58
|
-
async publishBulkJob(jobDatas: JobType[]): Promise<
|
|
62
|
+
async publishBulkJob(jobDatas: JobType[]): Promise<Job<JobType>[]> {
|
|
59
63
|
const jobs = jobDatas.map((data) => ({ name: this.name, data }));
|
|
60
|
-
|
|
64
|
+
return this.queue.addBulk(jobs);
|
|
61
65
|
}
|
|
62
66
|
|
|
63
67
|
async publishBulkJobWithOptions(
|
package/src/types.ts
CHANGED
|
@@ -10,6 +10,6 @@ export {
|
|
|
10
10
|
JobsOptions,
|
|
11
11
|
} from "bullmq";
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
export type
|
|
13
|
+
export type JobData = unknown;
|
|
14
|
+
|
|
15
|
+
export type JobReturnValue = unknown;
|
package/src/worker/worker.ts
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import { ILogger } from "@alanszp/logger";
|
|
2
2
|
import { ConnectionManager } from "../connectionManager";
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
JobData,
|
|
5
|
+
Job,
|
|
6
|
+
RawWorker,
|
|
7
|
+
WorkerOptions,
|
|
8
|
+
JobReturnValue,
|
|
9
|
+
} from "../types";
|
|
4
10
|
import { SharedContext } from "@alanszp/shared-context";
|
|
5
11
|
import { Audit } from "@alanszp/audit";
|
|
6
12
|
import { withContext } from "../wrappers/withContext";
|
|
@@ -23,9 +29,12 @@ export interface WorkerContext {
|
|
|
23
29
|
|
|
24
30
|
// optional methods
|
|
25
31
|
|
|
26
|
-
interface Worker<
|
|
27
|
-
handleJobFailed?(
|
|
28
|
-
|
|
32
|
+
interface Worker<Data = JobData, ReturnValue = JobReturnValue> {
|
|
33
|
+
handleJobFailed?(
|
|
34
|
+
job: Job<Data, ReturnValue>,
|
|
35
|
+
error: Error
|
|
36
|
+
): Promise<void> | void;
|
|
37
|
+
handleJobCompleted?(job: Job<Data, ReturnValue>): Promise<void> | void;
|
|
29
38
|
handleJobError?(error: Error): Promise<void> | void;
|
|
30
39
|
}
|
|
31
40
|
|
|
@@ -33,7 +42,7 @@ type QueueName = { name: string; prefix: string; namespace: string };
|
|
|
33
42
|
|
|
34
43
|
const BULL_PREFIX = "b";
|
|
35
44
|
|
|
36
|
-
abstract class Worker<
|
|
45
|
+
abstract class Worker<Data = JobData, ReturnValue = unknown> {
|
|
37
46
|
private _worker: RawWorker;
|
|
38
47
|
|
|
39
48
|
private _queue: QueueName;
|
|
@@ -48,7 +57,7 @@ abstract class Worker<T = JobData> {
|
|
|
48
57
|
|
|
49
58
|
const prefix = connectionManager.getServiceName();
|
|
50
59
|
this._queue = { name, prefix, namespace: BULL_PREFIX };
|
|
51
|
-
this._worker = new RawWorker<
|
|
60
|
+
this._worker = new RawWorker<Data, ReturnValue>(name, this.processJob(), {
|
|
52
61
|
autorun: false,
|
|
53
62
|
connection: connectionManager.getConnection(),
|
|
54
63
|
prefix: `{${prefix}}:${BULL_PREFIX}`,
|
|
@@ -60,7 +69,7 @@ abstract class Worker<T = JobData> {
|
|
|
60
69
|
}
|
|
61
70
|
|
|
62
71
|
// Handle job
|
|
63
|
-
abstract process(job: Job<
|
|
72
|
+
abstract process(job: Job<Data, ReturnValue>): Promise<ReturnValue>;
|
|
64
73
|
|
|
65
74
|
abstract setup(): WorkerSetup;
|
|
66
75
|
|
|
@@ -78,17 +87,20 @@ abstract class Worker<T = JobData> {
|
|
|
78
87
|
return this.worker.id;
|
|
79
88
|
}
|
|
80
89
|
|
|
81
|
-
private processJob(): (job: Job<
|
|
90
|
+
private processJob(): (job: Job<Data, ReturnValue>) => Promise<ReturnValue> {
|
|
82
91
|
return withContext(this.getContext(), async (job) => {
|
|
83
92
|
this.getLogger().info(`worker.process.job_received`, {
|
|
84
93
|
queue: this.queueFullName,
|
|
85
94
|
job,
|
|
86
95
|
});
|
|
87
|
-
|
|
96
|
+
return this.process(job);
|
|
88
97
|
});
|
|
89
98
|
}
|
|
90
99
|
|
|
91
|
-
async processFailed(
|
|
100
|
+
async processFailed(
|
|
101
|
+
job: Job<Data, ReturnValue>,
|
|
102
|
+
error: Error
|
|
103
|
+
): Promise<void> {
|
|
92
104
|
this.getLogger().warn("worker.job.failed", {
|
|
93
105
|
queue: this.queueFullName,
|
|
94
106
|
job,
|
|
@@ -99,10 +111,14 @@ abstract class Worker<T = JobData> {
|
|
|
99
111
|
}
|
|
100
112
|
}
|
|
101
113
|
|
|
102
|
-
async processCompleted(
|
|
114
|
+
async processCompleted(
|
|
115
|
+
job: Job<Data, ReturnValue>,
|
|
116
|
+
returnValue: ReturnValue
|
|
117
|
+
): Promise<void> {
|
|
103
118
|
this.getLogger().info("worker.job.completed", {
|
|
104
119
|
queue: this.queueFullName,
|
|
105
120
|
job,
|
|
121
|
+
returnValue,
|
|
106
122
|
});
|
|
107
123
|
if (this.handleJobCompleted) {
|
|
108
124
|
await this.handleJobCompleted(job);
|
|
@@ -142,9 +158,13 @@ abstract class Worker<T = JobData> {
|
|
|
142
158
|
// on error: handle unhandled exceptions
|
|
143
159
|
this.worker.on("error", (error: Error) => this.processError(error));
|
|
144
160
|
// on completed: allow to do something else after a job is completed
|
|
145
|
-
this.worker.on(
|
|
161
|
+
this.worker.on(
|
|
162
|
+
"completed",
|
|
163
|
+
(job: Job<Data, ReturnValue>, result: ReturnValue) =>
|
|
164
|
+
this.processCompleted(job, result)
|
|
165
|
+
);
|
|
146
166
|
// on failed: when the process fails with an exception it is possible to listen for the "failed" event
|
|
147
|
-
this.worker.on("failed", (job: Job<
|
|
167
|
+
this.worker.on("failed", (job: Job<Data, ReturnValue>, error: Error) =>
|
|
148
168
|
this.processFailed(job, error)
|
|
149
169
|
);
|
|
150
170
|
}
|
|
@@ -2,11 +2,12 @@ import cuid from "cuid";
|
|
|
2
2
|
import { appIdentifier } from "../helpers/appIdentifier";
|
|
3
3
|
import { Job, JobData } from "bullmq";
|
|
4
4
|
import { WorkerContext } from "../worker/worker";
|
|
5
|
+
import { JobReturnValue } from "../types";
|
|
5
6
|
|
|
6
|
-
export function withContext<T = JobData>(
|
|
7
|
+
export function withContext<T = JobData, ReturnValue = JobReturnValue>(
|
|
7
8
|
workerContext: WorkerContext,
|
|
8
|
-
executor: (job: Job<T>) => Promise<
|
|
9
|
-
): (job: Job<T>) => Promise<
|
|
9
|
+
executor: (job: Job<T>) => Promise<ReturnValue>
|
|
10
|
+
): (job: Job<T>) => Promise<ReturnValue> {
|
|
10
11
|
return (job) => {
|
|
11
12
|
const { lid, lch } = job.data as { lid?: string; lch?: string };
|
|
12
13
|
return workerContext.sharedContext.run(
|