@shrub/queue-bullmq 0.5.50 → 0.5.51
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/module.d.ts +1 -1
- package/dist/module.js +31 -78
- package/package.json +5 -5
package/dist/module.d.ts
CHANGED
|
@@ -19,7 +19,7 @@ export declare const IQueueBullMQConfiguration: import("@shrub/core").IModuleCon
|
|
|
19
19
|
export declare class QueueBullMQModule implements IModule {
|
|
20
20
|
private readonly adapters;
|
|
21
21
|
readonly name = "queue-bullmq";
|
|
22
|
-
readonly dependencies: (typeof
|
|
22
|
+
readonly dependencies: (typeof QueueModule | typeof LoggingModule)[];
|
|
23
23
|
initialize(init: IModuleInitializer): void;
|
|
24
24
|
configure({ config, next }: IModuleConfigurator): Promise<void>;
|
|
25
25
|
}
|
package/dist/module.js
CHANGED
|
@@ -19,7 +19,6 @@ function convertJob(job) {
|
|
|
19
19
|
};
|
|
20
20
|
}
|
|
21
21
|
exports.IQueueBullMQConfiguration = core_1.createConfig();
|
|
22
|
-
let nextWorkerId = 1;
|
|
23
22
|
class QueueBullMQModule {
|
|
24
23
|
constructor() {
|
|
25
24
|
this.adapters = [];
|
|
@@ -49,17 +48,23 @@ class BullMQQueueAdapter extends queue_1.QueueAdapter {
|
|
|
49
48
|
this.initializeSchedulers(queueSchedulers || []);
|
|
50
49
|
}
|
|
51
50
|
getQueueInstance(name) {
|
|
51
|
+
const jobActive = new QueueEventEmitter();
|
|
52
|
+
const jobCompleted = new QueueEventEmitter();
|
|
53
|
+
const jobFailed = new QueueEventEmitter();
|
|
54
|
+
const jobProgress = new QueueEventEmitter();
|
|
52
55
|
let instance;
|
|
53
|
-
const workerEvents = new BullMQWorkerEvents(this.logger);
|
|
54
56
|
return {
|
|
57
|
+
get onJobActive() {
|
|
58
|
+
return jobActive.event;
|
|
59
|
+
},
|
|
55
60
|
get onJobCompleted() {
|
|
56
|
-
return
|
|
61
|
+
return jobCompleted.event;
|
|
57
62
|
},
|
|
58
63
|
get onJobFailed() {
|
|
59
|
-
return
|
|
64
|
+
return jobFailed.event;
|
|
60
65
|
},
|
|
61
66
|
get onJobProgress() {
|
|
62
|
-
return
|
|
67
|
+
return jobProgress.event;
|
|
63
68
|
},
|
|
64
69
|
add: options => {
|
|
65
70
|
const jobOptions = {
|
|
@@ -77,17 +82,26 @@ class BullMQQueueAdapter extends queue_1.QueueAdapter {
|
|
|
77
82
|
concurrency: options.concurrency,
|
|
78
83
|
connection: this.connection
|
|
79
84
|
});
|
|
80
|
-
const workerId = nextWorkerId++;
|
|
81
|
-
workerEvents.registerWorker(workerId, worker);
|
|
82
85
|
// BullMQ recommends attaching to 'error' and since we don't get job info pass the error to the logger
|
|
83
86
|
// https://docs.bullmq.io/guide/workers
|
|
84
87
|
worker.on("error", error => this.logger.logError(error));
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
88
|
+
worker.on("active", job => {
|
|
89
|
+
this.logger.logDebug({ name: "BullMQ - job active", queueName: job.queueName, job: job.id });
|
|
90
|
+
jobActive.tryEmit(() => ({ job: convertJob(job) }));
|
|
91
|
+
});
|
|
92
|
+
worker.on("completed", (job, returnValue) => {
|
|
93
|
+
this.logger.logDebug({ name: "BullMQ - job completed", queueName: job.queueName, job: job.id });
|
|
94
|
+
jobCompleted.tryEmit(() => ({ job: convertJob(job), returnValue }));
|
|
95
|
+
});
|
|
96
|
+
worker.on("failed", (job, error) => {
|
|
97
|
+
this.logger.logWarn({ name: "BullMQ - job failed", queueName: job.queueName, job: job.id, message: error.message, stack: error.stack });
|
|
98
|
+
jobFailed.tryEmit(() => ({ job: convertJob(job), error }));
|
|
99
|
+
});
|
|
100
|
+
worker.on("progress", (job, progress) => {
|
|
101
|
+
this.logger.logDebug({ name: "BullMQ - job progress", queueName: job.queueName, job: job.id, progress: typeof progress === "number" ? progress : JSON.stringify(progress) });
|
|
102
|
+
jobProgress.tryEmit(() => ({ job: convertJob(job), progress }));
|
|
103
|
+
});
|
|
104
|
+
return worker;
|
|
91
105
|
}
|
|
92
106
|
};
|
|
93
107
|
}
|
|
@@ -96,70 +110,9 @@ class BullMQQueueAdapter extends queue_1.QueueAdapter {
|
|
|
96
110
|
queueSchedulers.forEach(name => new bullmq_1.QueueScheduler(name, { connection: this.connection }));
|
|
97
111
|
}
|
|
98
112
|
}
|
|
99
|
-
class
|
|
100
|
-
|
|
101
|
-
this.
|
|
102
|
-
this.emitters = [];
|
|
103
|
-
this.workers = new Map();
|
|
104
|
-
this.jobCompleted = this.createEventEmitter("completed", (job, returnValue) => {
|
|
105
|
-
this.logger.logDebug({ name: "BullMQ - job completed", job: job.id });
|
|
106
|
-
this.jobCompleted.emit({ job: convertJob(job), returnValue });
|
|
107
|
-
});
|
|
108
|
-
this.jobFailed = this.createEventEmitter("failed", (job, error) => {
|
|
109
|
-
this.logger.logWarn({ name: "BullMQ - job failed", job: job.id, message: error.message, stack: error.stack });
|
|
110
|
-
this.jobFailed.emit({ job: convertJob(job), error });
|
|
111
|
-
});
|
|
112
|
-
this.jobProgress = this.createEventEmitter("progress", (job, progress) => {
|
|
113
|
-
this.logger.logDebug({ name: "BullMQ - job progress", job: job.id, progress: typeof progress === "number" ? progress : JSON.stringify(progress) });
|
|
114
|
-
this.jobProgress.emit({ job: convertJob(job), progress });
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
registerWorker(id, worker) {
|
|
118
|
-
this.workers.set(id, worker);
|
|
119
|
-
for (const emitter of this.emitters) {
|
|
120
|
-
if (emitter.count) {
|
|
121
|
-
emitter.hookWorker(worker);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
unregisterWorker(id) {
|
|
126
|
-
const worker = this.workers.get(id);
|
|
127
|
-
if (worker) {
|
|
128
|
-
this.emitters.forEach(emitter => emitter.unhookWorker(worker));
|
|
129
|
-
this.workers.delete(id);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
createEventEmitter(event, listener) {
|
|
133
|
-
const self = this;
|
|
134
|
-
return new class extends event_emitter_1.EventEmitter {
|
|
135
|
-
constructor() {
|
|
136
|
-
super();
|
|
137
|
-
self.emitters.push(this);
|
|
138
|
-
}
|
|
139
|
-
get count() {
|
|
140
|
-
return super.count;
|
|
141
|
-
}
|
|
142
|
-
hookWorker(worker) {
|
|
143
|
-
worker.on(event, listener);
|
|
144
|
-
}
|
|
145
|
-
unhookWorker(worker) {
|
|
146
|
-
worker.removeListener(event, listener);
|
|
147
|
-
}
|
|
148
|
-
callbackRegistered() {
|
|
149
|
-
if (this.count === 1) {
|
|
150
|
-
for (const worker of self.workers.values()) {
|
|
151
|
-
this.hookWorker(worker);
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
callbackUnregistered() {
|
|
156
|
-
if (this.count === 0) {
|
|
157
|
-
for (const worker of self.workers.values()) {
|
|
158
|
-
this.unhookWorker(worker);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
};
|
|
113
|
+
class QueueEventEmitter extends event_emitter_1.EventEmitter {
|
|
114
|
+
tryEmit(getArgs) {
|
|
115
|
+
return this.count ? super.emit(getArgs()) : Promise.resolve();
|
|
163
116
|
}
|
|
164
117
|
}
|
|
165
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL21vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxzQ0FBNkY7QUFDN0YsNENBQXdEO0FBQ3hELHdDQUVzQjtBQUN0Qix3REFBb0Q7QUFDcEQsbUNBQTRGO0FBaUI1RixTQUFTLFVBQVUsQ0FBQyxHQUFRO0lBQ3hCLE9BQU87UUFDSCxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFO1FBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtRQUNkLElBQUksUUFBUTtZQUNSLE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUN4QixDQUFDO1FBQ0QsY0FBYyxDQUFDLFFBQVE7WUFDbkIsT0FBTyxHQUFHLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7S0FDSixDQUFDO0FBQ04sQ0FBQztBQUVZLFFBQUEseUJBQXlCLEdBQUcsbUJBQVksRUFBNkIsQ0FBQztBQUVuRixNQUFhLGlCQUFpQjtJQUE5QjtRQUNxQixhQUFRLEdBQXlCLEVBQUUsQ0FBQztRQUU1QyxTQUFJLEdBQUcsY0FBYyxDQUFDO1FBQ3RCLGlCQUFZLEdBQUc7WUFDcEIsdUJBQWE7WUFDYixtQkFBVztTQUNkLENBQUM7SUFpQk4sQ0FBQztJQWZHLFVBQVUsQ0FBQyxJQUF3QjtRQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLGlDQUF5QixDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMvRCxjQUFjLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLGtCQUFrQixDQUNoRSxRQUFRLENBQUMsR0FBRyxDQUFDLGlCQUFPLENBQUMsRUFDckIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQzdCLE9BQU8sSUFBSSxPQUFPLENBQUMsaUJBQWlC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
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shrub/queue-bullmq",
|
|
3
3
|
"description": "Provides a job/worker queue using BullMQ.",
|
|
4
|
-
"version": "0.5.
|
|
4
|
+
"version": "0.5.51",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -24,14 +24,14 @@
|
|
|
24
24
|
"clean": "rimraf ./dist && rimraf tsconfig.tsbuildinfo"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@shrub/core": "0.5.
|
|
28
|
-
"@shrub/logging": "0.5.
|
|
29
|
-
"@shrub/queue": "0.5.
|
|
27
|
+
"@shrub/core": "0.5.51",
|
|
28
|
+
"@shrub/logging": "0.5.51",
|
|
29
|
+
"@shrub/queue": "0.5.51",
|
|
30
30
|
"@sprig/event-emitter": "^0.2.0",
|
|
31
31
|
"bullmq": "^1.80.6"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@types/ioredis": "^4.28.2"
|
|
35
35
|
},
|
|
36
|
-
"gitHead": "
|
|
36
|
+
"gitHead": "aaf9bacb03d067764a62557b1b00b510858cf763"
|
|
37
37
|
}
|