@opens/bullmq 1.0.9 → 1.0.11
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 +3 -2
- package/dist/index.js +40 -3
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -41,9 +41,10 @@ declare class BullMQWrapper {
|
|
|
41
41
|
worker: BullMQ.Worker<any, void, string>;
|
|
42
42
|
};
|
|
43
43
|
publishTask(params: {
|
|
44
|
-
taskName: string;
|
|
45
44
|
taskData: any;
|
|
46
|
-
|
|
45
|
+
taskId?: string;
|
|
46
|
+
taskName: string;
|
|
47
|
+
taskOptions?: BullMQ.JobsOptions;
|
|
47
48
|
}): Promise<BullMQ.JobJson | null>;
|
|
48
49
|
getTaskCount(): number;
|
|
49
50
|
removeDeduplication(params: {
|
package/dist/index.js
CHANGED
|
@@ -100,13 +100,22 @@ var BullMQWrapper = class {
|
|
|
100
100
|
worker.on("ready", () => {
|
|
101
101
|
console.log(`[opens/bullmq]: '${taskName}' worker is ready`);
|
|
102
102
|
});
|
|
103
|
-
worker.on("error",
|
|
103
|
+
worker.on("error", (err) => {
|
|
104
|
+
console.error("[opens/bullmq]: error", err);
|
|
105
|
+
});
|
|
106
|
+
worker.on("ioredis:close", () => {
|
|
107
|
+
console.log("[opens/bullmq]: redis has closed");
|
|
108
|
+
});
|
|
109
|
+
worker.on("closed", () => {
|
|
110
|
+
console.log("[opens/bullmq]: worker closed");
|
|
111
|
+
});
|
|
104
112
|
return { worker };
|
|
105
113
|
}
|
|
106
114
|
async publishTask(params) {
|
|
107
115
|
const queue = this.taskQueues.get(params.taskName);
|
|
108
116
|
if (!queue) return null;
|
|
109
|
-
const
|
|
117
|
+
const jobName = params.taskId ? `${params.taskName}_${params.taskId}` : "";
|
|
118
|
+
const job = await queue.add(jobName, params.taskData, params.taskOptions);
|
|
110
119
|
return job.asJSON();
|
|
111
120
|
}
|
|
112
121
|
getTaskCount() {
|
|
@@ -128,7 +137,35 @@ var DefaultConnection = class {
|
|
|
128
137
|
const port = process.env.BULLMQ_REDIS_PORT;
|
|
129
138
|
if (!host) throw new Error("Environment variable ${BULLMQ_REDIS_HOST} is undefined");
|
|
130
139
|
if (!port) throw new Error("Environment variable ${BULLMQ_REDIS_PORT} is undefined");
|
|
131
|
-
|
|
140
|
+
const redis = new import_ioredis.Redis({
|
|
141
|
+
host,
|
|
142
|
+
port: parseInt(port),
|
|
143
|
+
maxRetriesPerRequest: null,
|
|
144
|
+
retryStrategy(times) {
|
|
145
|
+
const value = Math.max(Math.min(Math.exp(times), 2e4), 1e3);
|
|
146
|
+
console.log(`[redis]: retry stretegy callback value: ${value}`);
|
|
147
|
+
return value;
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
redis.on("close", () => {
|
|
151
|
+
console.log("[redis]: closed");
|
|
152
|
+
});
|
|
153
|
+
redis.on("reconnecting", () => {
|
|
154
|
+
console.log("[redis]: reconnecting");
|
|
155
|
+
});
|
|
156
|
+
redis.on("connect", () => {
|
|
157
|
+
console.log("[redis]: connected");
|
|
158
|
+
});
|
|
159
|
+
redis.on("error", (err) => {
|
|
160
|
+
console.log("[redis]: error", err);
|
|
161
|
+
});
|
|
162
|
+
redis.on("connecting", () => {
|
|
163
|
+
console.log("[redis]: connecting");
|
|
164
|
+
});
|
|
165
|
+
redis.on("ready", () => {
|
|
166
|
+
console.log("[redis]: ready");
|
|
167
|
+
});
|
|
168
|
+
return redis;
|
|
132
169
|
}
|
|
133
170
|
};
|
|
134
171
|
|
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';\nexport const bullmq = new BullMQWrapper(DefaultConnection.getInstance());\n","import * as BullMQ from 'bullmq';\nimport { Redis } from 'ioredis';\nimport { observer, TRACE_TYPE } from '@opens/observability';\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 tracer?: typeof observer.tracer;\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 tracer?: typeof observer.tracer;\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 tracer,\n } = params;\n\n const registeredQueue = this.taskQueues.get(taskName);\n if (!registeredQueue) throw new Error(`No task queue for [${taskName}] found`);\n const fn = async (job: BullMQ.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 const handler = tracer?.instrumentFunc({ name: taskName, type: TRACE_TYPE.TASK }, fn) ?? fn;\n\n const worker = new BullMQ.Worker(taskName, handler, {\n concurrency,\n connection: connection ?? this.defaultConnection,\n removeOnComplete: {\n age: removeOnCompleteAge ?? 60 * 60,\n count: removeOnCompleteCount ?? 20,\n },\n removeOnFail: {\n age: removeOnFailAge ?? 60 * 60,\n count: removeOnFailCount ?? 50,\n },\n });\n worker.on('ready', () => {\n console.log(`[opens/bullmq]: '${taskName}' worker is ready`);\n });\n worker.on('error', console.error);\n return { worker };\n }\n\n public async publishTask(params: {
|
|
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 * as BullMQ from 'bullmq';\nimport { Redis } from 'ioredis';\nimport { observer, TRACE_TYPE } from '@opens/observability';\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 tracer?: typeof observer.tracer;\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 tracer?: typeof observer.tracer;\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 tracer,\n } = params;\n\n const registeredQueue = this.taskQueues.get(taskName);\n if (!registeredQueue) throw new Error(`No task queue for [${taskName}] found`);\n const fn = async (job: BullMQ.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 const handler = tracer?.instrumentFunc({ name: taskName, type: TRACE_TYPE.TASK }, fn) ?? fn;\n\n const worker = new BullMQ.Worker(taskName, handler, {\n concurrency,\n connection: connection ?? this.defaultConnection,\n removeOnComplete: {\n age: removeOnCompleteAge ?? 60 * 60,\n count: removeOnCompleteCount ?? 20,\n },\n removeOnFail: {\n age: removeOnFailAge ?? 60 * 60,\n count: removeOnFailCount ?? 50,\n },\n });\n worker.on('ready', () => {\n console.log(`[opens/bullmq]: '${taskName}' worker is ready`);\n });\n worker.on('error', (err) => {\n console.error('[opens/bullmq]: error', err);\n });\n worker.on('ioredis:close', () => {\n console.log('[opens/bullmq]: redis has closed');\n });\n worker.on('closed', () => {\n console.log('[opens/bullmq]: worker closed');\n });\n return { worker };\n }\n\n public async publishTask(params: {\n taskData: any;\n taskId?: string;\n taskName: string;\n taskOptions?: BullMQ.JobsOptions;\n }) {\n const queue = this.taskQueues.get(params.taskName);\n if (!queue) return null;\n const jobName = params.taskId ? `${params.taskName}_${params.taskId}` : '';\n const job = await queue.add(jobName, params.taskData, params.taskOptions);\n return job.asJSON();\n }\n\n public getTaskCount() {\n return this.taskQueues.size;\n }\n\n public async removeDeduplication(params: { taskName: string; deduplicationId: string }) {\n const queue = this.taskQueues.get(params.taskName);\n if (!queue) return 0;\n const result = await queue.removeDeduplicationKey(params.deduplicationId);\n return result;\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 const redis = new Redis({\n host,\n port: parseInt(port),\n maxRetriesPerRequest: null,\n retryStrategy(times: number) {\n const value = Math.max(Math.min(Math.exp(times), 20000), 1000);\n console.log(`[redis]: retry stretegy callback value: ${value}`);\n return value;\n },\n });\n redis.on('close', () => {\n console.log('[redis]: closed');\n });\n redis.on('reconnecting', () => {\n console.log('[redis]: reconnecting');\n });\n redis.on('connect', () => {\n console.log('[redis]: connected');\n });\n redis.on('error', (err) => {\n console.log('[redis]: error', err);\n });\n redis.on('connecting', () => {\n console.log('[redis]: connecting');\n });\n redis.on('ready', () => {\n console.log('[redis]: ready');\n });\n return redis;\n }\n}\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opens/bullmq",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.11",
|
|
4
4
|
"description": "A wrapper around bullmq",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"ioredis": "^5.5.0"
|
|
39
39
|
},
|
|
40
40
|
"peerDependencies": {
|
|
41
|
-
"@opens/observability": "^1.0.
|
|
41
|
+
"@opens/observability": "^1.0.1"
|
|
42
42
|
},
|
|
43
43
|
"peerDependenciesMeta": {
|
|
44
44
|
"opens/observability": {
|