@opens/bullmq 1.0.1 → 1.0.3
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 +13 -2
- package/dist/index.d.ts +1 -2
- package/dist/index.js +11 -11
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,6 +4,13 @@ BullMQWrapper is a wrapper around BullMQ that simplifies creating and managing t
|
|
|
4
4
|
|
|
5
5
|
## Usage
|
|
6
6
|
|
|
7
|
+
### Install
|
|
8
|
+
|
|
9
|
+
On top of installing this package, the following variables must be defined in your environment or an exception will be thrown
|
|
10
|
+
|
|
11
|
+
BULLMQ_REDIS_HOST
|
|
12
|
+
BULLMQ_REDIS_PORT
|
|
13
|
+
|
|
7
14
|
### Creating a Task Queue
|
|
8
15
|
|
|
9
16
|
To create a queue, you can use `createTask`. You can specify the queue name, job options, and an optional worker to process jobs.
|
|
@@ -15,7 +22,7 @@ import { bullmq } from '@opens/bullmq';
|
|
|
15
22
|
bullmq.createTask({
|
|
16
23
|
taskName: 'example-task',
|
|
17
24
|
concurrency: 5,
|
|
18
|
-
up: async (job) => {
|
|
25
|
+
up: async (data, job) => {
|
|
19
26
|
console.log('Processing job:', job.id);
|
|
20
27
|
},
|
|
21
28
|
});
|
|
@@ -41,9 +48,13 @@ Workers process jobs in the queue. You can create a worker separately using `cre
|
|
|
41
48
|
bullmq.createWorker({
|
|
42
49
|
taskName: 'example-task',
|
|
43
50
|
concurrency: 3,
|
|
44
|
-
up: async (job) => {
|
|
51
|
+
up: async (data, job) => {
|
|
45
52
|
console.log('Job executed:', job.data);
|
|
46
53
|
},
|
|
54
|
+
down: async (data, job, error) => {
|
|
55
|
+
console.log('Job failed::', job.id);
|
|
56
|
+
console.error("With error::", error)
|
|
57
|
+
},
|
|
47
58
|
});
|
|
48
59
|
```
|
|
49
60
|
|
package/dist/index.d.ts
CHANGED
|
@@ -3,9 +3,8 @@ import { Redis } from 'ioredis';
|
|
|
3
3
|
|
|
4
4
|
declare class BullMQWrapper {
|
|
5
5
|
private defaultConnection;
|
|
6
|
-
private bullMQ;
|
|
7
6
|
private taskQueues;
|
|
8
|
-
constructor(defaultConnection: Redis
|
|
7
|
+
constructor(defaultConnection: Redis);
|
|
9
8
|
createTask(params: {
|
|
10
9
|
taskName: string;
|
|
11
10
|
defaultOptions: BullMQ.DefaultJobOptions;
|
package/dist/index.js
CHANGED
|
@@ -35,20 +35,21 @@ __export(index_exports, {
|
|
|
35
35
|
module.exports = __toCommonJS(index_exports);
|
|
36
36
|
|
|
37
37
|
// src/wrapper.ts
|
|
38
|
+
var import_bullmq = __toESM(require("bullmq"));
|
|
38
39
|
var BullMQWrapper = class {
|
|
39
|
-
constructor(defaultConnection
|
|
40
|
+
constructor(defaultConnection) {
|
|
40
41
|
this.defaultConnection = defaultConnection;
|
|
41
|
-
this.bullMQ = bullMQ;
|
|
42
42
|
}
|
|
43
43
|
taskQueues = /* @__PURE__ */ new Map();
|
|
44
44
|
createTask(params) {
|
|
45
45
|
const { taskName, up, down, defaultOptions, connection, concurrency } = params;
|
|
46
46
|
if (this.taskQueues.has(taskName)) return;
|
|
47
|
-
const queue = new
|
|
47
|
+
const queue = new import_bullmq.default.Queue(taskName, {
|
|
48
48
|
connection: this.defaultConnection ?? connection,
|
|
49
|
-
defaultJobOptions: defaultOptions
|
|
49
|
+
defaultJobOptions: { backoff: { delay: 1e3 * 60 * 5, type: "fixed" }, attempts: 10, ...defaultOptions }
|
|
50
50
|
});
|
|
51
51
|
this.taskQueues.set(taskName, queue);
|
|
52
|
+
console.debug("[@opens/bullmq]: task queue'${taskName}' created");
|
|
52
53
|
if (!up) return { queue };
|
|
53
54
|
const { worker } = this.createWorker({
|
|
54
55
|
up,
|
|
@@ -72,7 +73,7 @@ var BullMQWrapper = class {
|
|
|
72
73
|
} = params;
|
|
73
74
|
const registeredQueue = this.taskQueues.get(taskName);
|
|
74
75
|
if (!registeredQueue) throw new Error(`No task queue for [${taskName}] found`);
|
|
75
|
-
const worker = new
|
|
76
|
+
const worker = new import_bullmq.default.Worker(
|
|
76
77
|
taskName,
|
|
77
78
|
async (job) => {
|
|
78
79
|
try {
|
|
@@ -113,17 +114,16 @@ var BullMQWrapper = class {
|
|
|
113
114
|
var import_ioredis = require("ioredis");
|
|
114
115
|
var DefaultConnection = class {
|
|
115
116
|
static getInstance() {
|
|
116
|
-
const host = process.env.
|
|
117
|
-
const port = process.env.
|
|
118
|
-
if (!host) throw new Error("Environment variable ${
|
|
119
|
-
if (!port) throw new Error("Environment variable ${
|
|
117
|
+
const host = process.env.BULLMQ_REDIS_HOST;
|
|
118
|
+
const port = process.env.BULLMQ_REDIS_PORT;
|
|
119
|
+
if (!host) throw new Error("Environment variable ${BULLMQ_REDIS_HOST} is undefined");
|
|
120
|
+
if (!port) throw new Error("Environment variable ${BULLMQ_REDIS_PORT} is undefined");
|
|
120
121
|
return new import_ioredis.Redis({ host, port: parseInt(port), maxRetriesPerRequest: null });
|
|
121
122
|
}
|
|
122
123
|
};
|
|
123
124
|
|
|
124
125
|
// src/index.ts
|
|
125
|
-
var
|
|
126
|
-
var bullmq = new BullMQWrapper(DefaultConnection.getInstance(), import_bullmq.default);
|
|
126
|
+
var bullmq = new BullMQWrapper(DefaultConnection.getInstance());
|
|
127
127
|
// Annotate the CommonJS export names for ESM import in node:
|
|
128
128
|
0 && (module.exports = {
|
|
129
129
|
bullmq
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/wrapper.ts","../src/default-connection.ts"],"sourcesContent":["import { BullMQWrapper } from './wrapper';\nimport { DefaultConnection } from './default-connection';\
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/wrapper.ts","../src/default-connection.ts"],"sourcesContent":["import { BullMQWrapper } from './wrapper';\nimport { DefaultConnection } from './default-connection';\nexport const bullmq = new BullMQWrapper(DefaultConnection.getInstance());\n","import BullMQ from 'bullmq';\nimport { Redis } from 'ioredis';\n\nexport class BullMQWrapper {\n private taskQueues: Map<string, BullMQ.Queue> = new Map();\n\n constructor(private defaultConnection: Redis) {}\n\n public createTask(params: {\n taskName: string;\n defaultOptions: BullMQ.DefaultJobOptions;\n connection?: Redis;\n up?: (data: any, job: BullMQ.Job) => Promise<void>;\n down?: (data: any, job: BullMQ.Job, err: unknown) => Promise<void>;\n concurrency?: number;\n removeOnCompleteAge?: number;\n removeOnCompleteCount?: number;\n removeOnFailAge?: number;\n removeOnFailCount?: number;\n }) {\n const { taskName, up, down, defaultOptions, connection, concurrency } = params;\n if (this.taskQueues.has(taskName)) return;\n\n const queue = new BullMQ.Queue(taskName, {\n connection: this.defaultConnection ?? connection,\n defaultJobOptions: { backoff: { delay: 1000 * 60 * 5, type: 'fixed' }, attempts: 10, ...defaultOptions },\n });\n this.taskQueues.set(taskName, queue);\n console.debug(\"[@opens/bullmq]: task queue'${taskName}' created\");\n if (!up) return { queue };\n\n const { worker } = this.createWorker({\n up,\n down,\n concurrency: concurrency ?? 1,\n ...params,\n });\n return { queue, worker };\n }\n\n public createWorker(params: {\n taskName: string;\n up: (data: any, job: BullMQ.Job) => Promise<void>;\n down?: (data: any, job: BullMQ.Job, err: unknown) => Promise<void>;\n connection?: Redis;\n concurrency: number;\n removeOnCompleteAge?: number;\n removeOnCompleteCount?: number;\n removeOnFailAge?: number;\n removeOnFailCount?: number;\n onError?: Function;\n }) {\n const {\n taskName,\n up,\n down,\n concurrency,\n connection,\n removeOnFailCount,\n removeOnCompleteAge,\n removeOnCompleteCount,\n removeOnFailAge,\n } = params;\n const registeredQueue = this.taskQueues.get(taskName);\n if (!registeredQueue) throw new Error(`No task queue for [${taskName}] found`);\n\n const worker = new BullMQ.Worker(\n taskName,\n async (job) => {\n try {\n await up(job.data, job);\n } catch (error) {\n if (down) await down(job.data, job, error);\n throw error;\n } finally {\n }\n },\n {\n concurrency,\n connection: connection ?? this.defaultConnection,\n removeOnComplete: {\n age: removeOnCompleteAge ?? 0,\n count: removeOnCompleteCount ?? 0,\n },\n removeOnFail: {\n age: removeOnFailAge ?? 0,\n count: removeOnFailCount ?? 0,\n },\n },\n );\n\n return { worker };\n }\n\n public async publishTask(params: { taskName: string; taskData: any; taskOptions: BullMQ.JobsOptions }) {\n const queue = this.taskQueues.get(params.taskName);\n if (!queue) return null;\n const job = await queue.add('', params.taskData, params.taskOptions);\n return job.asJSON();\n }\n\n public getTaskCount() {\n return this.taskQueues.size;\n }\n}\n","import { Redis } from 'ioredis';\nexport class DefaultConnection {\n static getInstance() {\n const host = process.env.BULLMQ_REDIS_HOST;\n const port = process.env.BULLMQ_REDIS_PORT;\n if (!host) throw new Error('Environment variable ${BULLMQ_REDIS_HOST} is undefined');\n if (!port) throw new Error('Environment variable ${BULLMQ_REDIS_PORT} is undefined');\n return new Redis({ host, port: parseInt(port), maxRetriesPerRequest: null });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,oBAAmB;AAGZ,IAAM,gBAAN,MAAoB;AAAA,EAGzB,YAAoB,mBAA0B;AAA1B;AAAA,EAA2B;AAAA,EAFvC,aAAwC,oBAAI,IAAI;AAAA,EAIjD,WAAW,QAWf;AACD,UAAM,EAAE,UAAU,IAAI,MAAM,gBAAgB,YAAY,YAAY,IAAI;AACxE,QAAI,KAAK,WAAW,IAAI,QAAQ,EAAG;AAEnC,UAAM,QAAQ,IAAI,cAAAA,QAAO,MAAM,UAAU;AAAA,MACvC,YAAY,KAAK,qBAAqB;AAAA,MACtC,mBAAmB,EAAE,SAAS,EAAE,OAAO,MAAO,KAAK,GAAG,MAAM,QAAQ,GAAG,UAAU,IAAI,GAAG,eAAe;AAAA,IACzG,CAAC;AACD,SAAK,WAAW,IAAI,UAAU,KAAK;AACnC,YAAQ,MAAM,kDAAkD;AAChE,QAAI,CAAC,GAAI,QAAO,EAAE,MAAM;AAExB,UAAM,EAAE,OAAO,IAAI,KAAK,aAAa;AAAA,MACnC;AAAA,MACA;AAAA,MACA,aAAa,eAAe;AAAA,MAC5B,GAAG;AAAA,IACL,CAAC;AACD,WAAO,EAAE,OAAO,OAAO;AAAA,EACzB;AAAA,EAEO,aAAa,QAWjB;AACD,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AACJ,UAAM,kBAAkB,KAAK,WAAW,IAAI,QAAQ;AACpD,QAAI,CAAC,gBAAiB,OAAM,IAAI,MAAM,sBAAsB,QAAQ,SAAS;AAE7E,UAAM,SAAS,IAAI,cAAAA,QAAO;AAAA,MACxB;AAAA,MACA,OAAO,QAAQ;AACb,YAAI;AACF,gBAAM,GAAG,IAAI,MAAM,GAAG;AAAA,QACxB,SAAS,OAAO;AACd,cAAI,KAAM,OAAM,KAAK,IAAI,MAAM,KAAK,KAAK;AACzC,gBAAM;AAAA,QACR,UAAE;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE;AAAA,QACA,YAAY,cAAc,KAAK;AAAA,QAC/B,kBAAkB;AAAA,UAChB,KAAK,uBAAuB;AAAA,UAC5B,OAAO,yBAAyB;AAAA,QAClC;AAAA,QACA,cAAc;AAAA,UACZ,KAAK,mBAAmB;AAAA,UACxB,OAAO,qBAAqB;AAAA,QAC9B;AAAA,MACF;AAAA,IACF;AAEA,WAAO,EAAE,OAAO;AAAA,EAClB;AAAA,EAEA,MAAa,YAAY,QAA8E;AACrG,UAAM,QAAQ,KAAK,WAAW,IAAI,OAAO,QAAQ;AACjD,QAAI,CAAC,MAAO,QAAO;AACnB,UAAM,MAAM,MAAM,MAAM,IAAI,IAAI,OAAO,UAAU,OAAO,WAAW;AACnE,WAAO,IAAI,OAAO;AAAA,EACpB;AAAA,EAEO,eAAe;AACpB,WAAO,KAAK,WAAW;AAAA,EACzB;AACF;;;ACxGA,qBAAsB;AACf,IAAM,oBAAN,MAAwB;AAAA,EAC7B,OAAO,cAAc;AACnB,UAAM,OAAO,QAAQ,IAAI;AACzB,UAAM,OAAO,QAAQ,IAAI;AACzB,QAAI,CAAC,KAAM,OAAM,IAAI,MAAM,wDAAwD;AACnF,QAAI,CAAC,KAAM,OAAM,IAAI,MAAM,wDAAwD;AACnF,WAAO,IAAI,qBAAM,EAAE,MAAM,MAAM,SAAS,IAAI,GAAG,sBAAsB,KAAK,CAAC;AAAA,EAC7E;AACF;;;AFPO,IAAM,SAAS,IAAI,cAAc,kBAAkB,YAAY,CAAC;","names":["BullMQ"]}
|