n8n-nodes-bozonx-redis-sugar 1.22.0 → 1.24.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/dist/nodes/RedisListSugar/redisClient.d.ts +1 -1
- package/dist/nodes/RedisListSugar/redisClient.js +5 -3
- package/dist/nodes/RedisListSugar/redisClient.js.map +1 -1
- package/dist/nodes/RedisQueueComplete/BozonxRedisQueueComplete.node.js +13 -25
- package/dist/nodes/RedisQueueComplete/BozonxRedisQueueComplete.node.js.map +1 -1
- package/dist/nodes/RedisQueueComplete/redisClient.d.ts +1 -1
- package/dist/nodes/RedisQueueComplete/redisClient.js +5 -3
- package/dist/nodes/RedisQueueComplete/redisClient.js.map +1 -1
- package/dist/nodes/RedisQueueConsumer/BozonxRedisQueueConsumer.node.js +76 -115
- package/dist/nodes/RedisQueueConsumer/BozonxRedisQueueConsumer.node.js.map +1 -1
- package/dist/nodes/RedisQueueConsumer/redisClient.d.ts +1 -1
- package/dist/nodes/RedisQueueConsumer/redisClient.js +5 -3
- package/dist/nodes/RedisQueueConsumer/redisClient.js.map +1 -1
- package/dist/nodes/RedisQueueProducer/BozonxRedisQueueProducer.node.js +131 -118
- package/dist/nodes/RedisQueueProducer/BozonxRedisQueueProducer.node.js.map +1 -1
- package/dist/nodes/RedisQueueProducer/redisClient.d.ts +1 -1
- package/dist/nodes/RedisQueueProducer/redisClient.js +7 -3
- package/dist/nodes/RedisQueueProducer/redisClient.js.map +1 -1
- package/dist/nodes/RedisStreamProducer/redisClient.d.ts +1 -1
- package/dist/nodes/RedisStreamProducer/redisClient.js +5 -3
- package/dist/nodes/RedisStreamProducer/redisClient.js.map +1 -1
- package/dist/nodes/RedisStreamTrigger/BozonxRedisStreamTrigger.node.js +17 -79
- package/dist/nodes/RedisStreamTrigger/BozonxRedisStreamTrigger.node.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -6,5 +6,5 @@ export interface RedisConnectionOptions {
|
|
|
6
6
|
tls?: boolean;
|
|
7
7
|
db?: number;
|
|
8
8
|
}
|
|
9
|
-
export declare function getRedisClientConnected(opts: RedisConnectionOptions): Promise<unknown>;
|
|
9
|
+
export declare function getRedisClientConnected(opts: RedisConnectionOptions, standalone?: boolean): Promise<unknown>;
|
|
10
10
|
export declare function calculateQueueTTL(timeoutSec: number): number;
|
|
@@ -61,10 +61,10 @@ function buildUrl(opts) {
|
|
|
61
61
|
const dbPath = typeof opts.db === 'number' ? `/${opts.db}` : '';
|
|
62
62
|
return `${proto}://${authPart}${opts.host}:${opts.port}${dbPath}`;
|
|
63
63
|
}
|
|
64
|
-
async function getRedisClientConnected(opts) {
|
|
64
|
+
async function getRedisClientConnected(opts, standalone = false) {
|
|
65
65
|
const url = buildUrl(opts);
|
|
66
66
|
const cached = clients.get(url);
|
|
67
|
-
if (cached) {
|
|
67
|
+
if (cached && !standalone) {
|
|
68
68
|
if (cached.isOpen)
|
|
69
69
|
return cached;
|
|
70
70
|
try {
|
|
@@ -88,7 +88,9 @@ async function getRedisClientConnected(opts) {
|
|
|
88
88
|
client.on('error', () => {
|
|
89
89
|
});
|
|
90
90
|
await withTimeout(client.connect(), REDIS_CONNECT_DEADLINE_MS, `Redis connect timeout after ${REDIS_CONNECT_DEADLINE_MS}ms`);
|
|
91
|
-
|
|
91
|
+
if (!standalone) {
|
|
92
|
+
clients.set(url, client);
|
|
93
|
+
}
|
|
92
94
|
return client;
|
|
93
95
|
}
|
|
94
96
|
function calculateQueueTTL(timeoutSec) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redisClient.js","sourceRoot":"","sources":["../../../nodes/RedisListSugar/redisClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,0DAqCC;AAED,8CAEC;AApFD,mCAAoF;AAWpF,MAAM,yBAAyB,GAAG,KAAK,CAAC;AAExC,SAAS,WAAW,CAAI,OAAmB,EAAE,SAAiB,EAAE,OAAe;IAC9E,IAAI,OAAoD,CAAC;IACzD,OAAO,OAAO,CAAC,IAAI,CAAC;QACnB,OAAO;QACP,IAAI,OAAO,CAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;YAC5B,OAAO,GAAG,IAAA,mBAAY,EAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACrE,CAAC,CAAC;KACF,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;QACf,IAAI,OAAO;YAAE,IAAA,qBAAc,EAAC,OAAO,CAAC,CAAC;IACtC,CAAC,CAAe,CAAC;AAClB,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;AAE3C,SAAS,QAAQ,CAAC,IAA4B;;IAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;QAC7B,CAAC,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,kBAAkB,CAAC,MAAA,IAAI,CAAC,QAAQ,mCAAI,EAAE,CAAC,GAAG;QACpF,CAAC,CAAC,IAAI,CAAC,QAAQ;YACd,CAAC,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG;YAC1C,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAChE,OAAO,GAAG,KAAK,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,MAAM,EAAE,CAAC;AACnE,CAAC;AAOM,KAAK,UAAU,uBAAuB,CAAC,IAA4B;
|
|
1
|
+
{"version":3,"file":"redisClient.js","sourceRoot":"","sources":["../../../nodes/RedisListSugar/redisClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,21 +22,6 @@ class BozonxRedisQueueComplete {
|
|
|
22
22
|
},
|
|
23
23
|
],
|
|
24
24
|
properties: [
|
|
25
|
-
{
|
|
26
|
-
displayName: 'Queue ID',
|
|
27
|
-
name: 'queueId',
|
|
28
|
-
type: 'string',
|
|
29
|
-
default: '={{ $json.queueId }}',
|
|
30
|
-
required: true,
|
|
31
|
-
description: 'Queue identifier from the trigger node',
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
displayName: 'Job Name',
|
|
35
|
-
name: 'jobName',
|
|
36
|
-
type: 'string',
|
|
37
|
-
default: '={{ $json.jobName }}',
|
|
38
|
-
description: 'Optional job name from the trigger node (for grouped queues)',
|
|
39
|
-
},
|
|
40
25
|
{
|
|
41
26
|
displayName: 'Job ID',
|
|
42
27
|
name: 'jobId',
|
|
@@ -70,19 +55,20 @@ class BozonxRedisQueueComplete {
|
|
|
70
55
|
const client = await (0, redisClient_1.getRedisClientConnected)({ host, port, username, password, tls, db });
|
|
71
56
|
for (let i = 0; i < items.length; i++) {
|
|
72
57
|
try {
|
|
73
|
-
const queueId = String(this.getNodeParameter('queueId', i) || '').trim();
|
|
74
|
-
const jobName = String(this.getNodeParameter('jobName', i, '') || '').trim();
|
|
75
58
|
const jobId = String(this.getNodeParameter('jobId', i) || '').trim();
|
|
76
59
|
const includeInputFields = this.getNodeParameter('includeInputFields', i, false);
|
|
77
|
-
if (!queueId) {
|
|
78
|
-
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Queue ID is missing. Ensure the input data contains "queueId" (usually comes from the Redis Queue Trigger).', { itemIndex: i });
|
|
79
|
-
}
|
|
80
60
|
if (!jobId) {
|
|
81
61
|
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Job ID is missing. Ensure the input data contains "jobId" (usually comes from the Redis Queue Trigger).', { itemIndex: i });
|
|
82
62
|
}
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
|
|
63
|
+
const jobIdParts = jobId.split(':');
|
|
64
|
+
if (jobIdParts.length < 2) {
|
|
65
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Invalid jobId format. Expected format: callbackId:queueIdentifier:executionId:itemIndex:random, got: ${jobId}`, { itemIndex: i });
|
|
66
|
+
}
|
|
67
|
+
const callbackId = jobIdParts[0];
|
|
68
|
+
const queueIdentifier = jobIdParts[1];
|
|
69
|
+
const queueKey = `queue:${callbackId}`;
|
|
70
|
+
const lockKey = `lock:${callbackId}:${queueIdentifier}`;
|
|
71
|
+
const responseKey = `response:${callbackId}:${jobId}`;
|
|
86
72
|
const c = client;
|
|
87
73
|
const queueLength = (await c.sendCommand(['LLEN', queueKey]));
|
|
88
74
|
const isLast = queueLength === 0;
|
|
@@ -92,14 +78,16 @@ class BozonxRedisQueueComplete {
|
|
|
92
78
|
isLast,
|
|
93
79
|
};
|
|
94
80
|
const responseData = JSON.stringify(responsePayload);
|
|
81
|
+
this.logger.debug(`Sending response for job ${jobId} to ${responseKey}`);
|
|
95
82
|
await c.sendCommand(['RPUSH', responseKey, responseData]);
|
|
96
83
|
await c.sendCommand(['EXPIRE', responseKey, '60']);
|
|
84
|
+
this.logger.debug(`Releasing lock for identifier ${queueIdentifier} (key: ${lockKey})`);
|
|
97
85
|
await c.sendCommand(['DEL', lockKey]);
|
|
98
86
|
const result = {
|
|
99
87
|
data: inputData,
|
|
100
88
|
isLast,
|
|
101
|
-
|
|
102
|
-
|
|
89
|
+
callbackId,
|
|
90
|
+
queueIdentifier,
|
|
103
91
|
jobId,
|
|
104
92
|
};
|
|
105
93
|
returnData.push({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BozonxRedisQueueComplete.node.js","sourceRoot":"","sources":["../../../nodes/RedisQueueComplete/BozonxRedisQueueComplete.node.ts"],"names":[],"mappings":";;;AAAA,+CAOsB;AACtB,+CAAwD;AAExD,MAAa,wBAAwB;IAArC;QACC,gBAAW,GAAyB;YACnC,WAAW,EAAE,sBAAsB;YACnC,IAAI,EAAE,0BAA0B;YAChC,KAAK,EAAE,CAAC,WAAW,CAAC;YACpB,OAAO,EAAE,CAAC;YACV,WAAW,EAAE,4EAA4E;YACzF,QAAQ,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE;YAC1C,IAAI,EAAE,+BAA+B;YACrC,MAAM,EAAE,CAAC,MAAM,CAAC;YAChB,OAAO,EAAE,CAAC,MAAM,CAAC;YACjB,WAAW,EAAE;gBACZ;oBACC,IAAI,EAAE,aAAa;oBACnB,QAAQ,EAAE,IAAI;iBACd;aACD;YACD,UAAU,EAAE;gBACX;oBACC,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"BozonxRedisQueueComplete.node.js","sourceRoot":"","sources":["../../../nodes/RedisQueueComplete/BozonxRedisQueueComplete.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,4 +6,4 @@ export interface RedisConnectionOptions {
|
|
|
6
6
|
tls?: boolean;
|
|
7
7
|
db?: number;
|
|
8
8
|
}
|
|
9
|
-
export declare function getRedisClientConnected(opts: RedisConnectionOptions): Promise<unknown>;
|
|
9
|
+
export declare function getRedisClientConnected(opts: RedisConnectionOptions, standalone?: boolean): Promise<unknown>;
|
|
@@ -60,10 +60,10 @@ function buildUrl(opts) {
|
|
|
60
60
|
const dbPath = typeof opts.db === 'number' ? `/${opts.db}` : '';
|
|
61
61
|
return `${proto}://${authPart}${opts.host}:${opts.port}${dbPath}`;
|
|
62
62
|
}
|
|
63
|
-
async function getRedisClientConnected(opts) {
|
|
63
|
+
async function getRedisClientConnected(opts, standalone = false) {
|
|
64
64
|
const url = buildUrl(opts);
|
|
65
65
|
const cached = clients.get(url);
|
|
66
|
-
if (cached) {
|
|
66
|
+
if (cached && !standalone) {
|
|
67
67
|
if (cached.isOpen)
|
|
68
68
|
return cached;
|
|
69
69
|
try {
|
|
@@ -87,7 +87,9 @@ async function getRedisClientConnected(opts) {
|
|
|
87
87
|
client.on('error', () => {
|
|
88
88
|
});
|
|
89
89
|
await withTimeout(client.connect(), REDIS_CONNECT_DEADLINE_MS, `Redis connect timeout after ${REDIS_CONNECT_DEADLINE_MS}ms`);
|
|
90
|
-
|
|
90
|
+
if (!standalone) {
|
|
91
|
+
clients.set(url, client);
|
|
92
|
+
}
|
|
91
93
|
return client;
|
|
92
94
|
}
|
|
93
95
|
//# sourceMappingURL=redisClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redisClient.js","sourceRoot":"","sources":["../../../nodes/RedisQueueComplete/redisClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,0DAqCC;AAhFD,mCAAoF;AAWpF,MAAM,yBAAyB,GAAG,KAAK,CAAC;AAExC,SAAS,WAAW,CAAI,OAAmB,EAAE,SAAiB,EAAE,OAAe;IAC9E,IAAI,OAAoD,CAAC;IACzD,OAAO,OAAO,CAAC,IAAI,CAAC;QACnB,OAAO;QACP,IAAI,OAAO,CAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;YAC5B,OAAO,GAAG,IAAA,mBAAY,EAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACrE,CAAC,CAAC;KACF,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;QACf,IAAI,OAAO;YAAE,IAAA,qBAAc,EAAC,OAAO,CAAC,CAAC;IACtC,CAAC,CAAe,CAAC;AAClB,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;AAE3C,SAAS,QAAQ,CAAC,IAA4B;;IAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;QAC7B,CAAC,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,kBAAkB,CAAC,MAAA,IAAI,CAAC,QAAQ,mCAAI,EAAE,CAAC,GAAG;QACpF,CAAC,CAAC,IAAI,CAAC,QAAQ;YACd,CAAC,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG;YAC1C,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAChE,OAAO,GAAG,KAAK,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,MAAM,EAAE,CAAC;AACnE,CAAC;AAOM,KAAK,UAAU,uBAAuB,CAAC,IAA4B;
|
|
1
|
+
{"version":3,"file":"redisClient.js","sourceRoot":"","sources":["../../../nodes/RedisQueueComplete/redisClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ class BozonxRedisQueueConsumer {
|
|
|
9
9
|
name: 'bozonxRedisQueueConsumer',
|
|
10
10
|
group: ['trigger'],
|
|
11
11
|
version: 1,
|
|
12
|
-
description: 'Process jobs from a Redis-based queue
|
|
12
|
+
description: 'Process jobs from a Redis-based queue. Automatically handles parallel processing per queue identifier while maintaining sequential order within each identifier.',
|
|
13
13
|
defaults: { name: 'Redis Queue Trigger' },
|
|
14
14
|
icon: 'file:redis-queue-consumer.svg',
|
|
15
15
|
inputs: [],
|
|
@@ -22,20 +22,12 @@ class BozonxRedisQueueConsumer {
|
|
|
22
22
|
],
|
|
23
23
|
properties: [
|
|
24
24
|
{
|
|
25
|
-
displayName: '
|
|
26
|
-
name: '
|
|
25
|
+
displayName: 'Callback ID',
|
|
26
|
+
name: 'callbackId',
|
|
27
27
|
type: 'string',
|
|
28
28
|
default: '',
|
|
29
29
|
placeholder: 'Leave empty to use current workflow ID',
|
|
30
|
-
description: '
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
displayName: 'Job Name',
|
|
34
|
-
name: 'jobName',
|
|
35
|
-
type: 'string',
|
|
36
|
-
default: '',
|
|
37
|
-
placeholder: 'e.g., user-123, order-456',
|
|
38
|
-
description: 'Optional job name to group jobs within the same queue (must match the Job Name used in Redis Queue Add)',
|
|
30
|
+
description: 'Identifier that links this trigger to producers. Leave empty to use the current workflow ID.',
|
|
39
31
|
},
|
|
40
32
|
{
|
|
41
33
|
displayName: 'Polling Interval (ms)',
|
|
@@ -61,127 +53,96 @@ class BozonxRedisQueueConsumer {
|
|
|
61
53
|
const tls = (creds === null || creds === void 0 ? void 0 : creds.tls) || false;
|
|
62
54
|
const db = (_b = creds === null || creds === void 0 ? void 0 : creds.db) !== null && _b !== void 0 ? _b : 0;
|
|
63
55
|
const client = await (0, redisClient_1.getRedisClientConnected)({ host, port, username, password, tls, db });
|
|
56
|
+
const blockingClient = await (0, redisClient_1.getRedisClientConnected)({ host, port, username, password, tls, db }, true);
|
|
64
57
|
const c = client;
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
const blpopTimeout =
|
|
58
|
+
const bc = blockingClient;
|
|
59
|
+
let callbackId = String(this.getNodeParameter('callbackId', 0) || '').trim();
|
|
60
|
+
const blpopTimeout = 5;
|
|
68
61
|
const lockTTL = 3600;
|
|
69
62
|
const pollingInterval = this.getNodeParameter('pollingInterval', 1000);
|
|
70
|
-
if (!
|
|
63
|
+
if (!callbackId) {
|
|
71
64
|
const workflow = this.getWorkflow();
|
|
72
|
-
|
|
65
|
+
callbackId = workflow.id || 'default-queue';
|
|
73
66
|
}
|
|
74
|
-
const queueKey =
|
|
75
|
-
|
|
67
|
+
const queueKey = `queue:${callbackId}`;
|
|
68
|
+
this.logger.debug(`Redis Queue Trigger started for queue: ${queueKey}`);
|
|
76
69
|
let running = true;
|
|
77
|
-
const
|
|
78
|
-
var _a
|
|
79
|
-
|
|
70
|
+
const processJob = async (isManualTrigger = false) => {
|
|
71
|
+
var _a;
|
|
72
|
+
try {
|
|
73
|
+
const timeout = isManualTrigger ? '1' : String(blpopTimeout);
|
|
74
|
+
const currentClient = isManualTrigger ? c : bc;
|
|
75
|
+
const res = await currentClient.sendCommand(['BLPOP', queueKey, timeout]);
|
|
76
|
+
if (!res || !Array.isArray(res) || res.length < 2) {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
const jobData = res[1];
|
|
80
|
+
let parsedPayload;
|
|
80
81
|
try {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
'SET',
|
|
108
|
-
lockKey,
|
|
109
|
-
'1',
|
|
110
|
-
'NX',
|
|
111
|
-
'EX',
|
|
112
|
-
String(effectiveLockTTL),
|
|
113
|
-
]);
|
|
114
|
-
if (!acquired) {
|
|
115
|
-
await c.sendCommand(['LPUSH', queueKey, jobData]);
|
|
82
|
+
parsedPayload = JSON.parse(jobData);
|
|
83
|
+
}
|
|
84
|
+
catch (parseError) {
|
|
85
|
+
this.logger.error(`Failed to parse job data from queue ${callbackId}: ${parseError.message}`);
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
if (!parsedPayload.jobId) {
|
|
89
|
+
this.logger.error(`Missing jobId in job payload from queue ${callbackId}`);
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
const queueIdentifier = parsedPayload.queueIdentifier || 'default';
|
|
93
|
+
const lockKey = `lock:${callbackId}:${queueIdentifier}`;
|
|
94
|
+
const effectiveLockTTL = (_a = parsedPayload.lockTTL) !== null && _a !== void 0 ? _a : lockTTL;
|
|
95
|
+
this.logger.debug(`Processing job ${parsedPayload.jobId} for identifier ${queueIdentifier}`);
|
|
96
|
+
const acquired = await c.sendCommand([
|
|
97
|
+
'SET',
|
|
98
|
+
lockKey,
|
|
99
|
+
'1',
|
|
100
|
+
'NX',
|
|
101
|
+
'EX',
|
|
102
|
+
String(effectiveLockTTL),
|
|
103
|
+
]);
|
|
104
|
+
if (!acquired) {
|
|
105
|
+
this.logger.debug(`Job ${parsedPayload.jobId} is deferred because ${queueIdentifier} is locked`);
|
|
106
|
+
await c.sendCommand(['RPUSH', queueKey, jobData]);
|
|
107
|
+
if (!isManualTrigger) {
|
|
116
108
|
await new Promise((r) => setTimeout(r, pollingInterval));
|
|
117
|
-
continue;
|
|
118
109
|
}
|
|
119
|
-
|
|
120
|
-
data: parsedPayload.data,
|
|
121
|
-
queueId,
|
|
122
|
-
jobName: jobName || null,
|
|
123
|
-
jobId: parsedPayload.jobId,
|
|
124
|
-
};
|
|
125
|
-
this.emit([[{ json: { result } }]]);
|
|
126
|
-
}
|
|
127
|
-
catch (error) {
|
|
128
|
-
(_d = this.logger) === null || _d === void 0 ? void 0 : _d.error(`Error in queue consumer loop: ${error.message}`);
|
|
129
|
-
await new Promise((r) => setTimeout(r, pollingInterval));
|
|
130
|
-
continue;
|
|
110
|
+
return null;
|
|
131
111
|
}
|
|
112
|
+
const result = {
|
|
113
|
+
data: parsedPayload.data,
|
|
114
|
+
jobId: parsedPayload.jobId,
|
|
115
|
+
queueIdentifier,
|
|
116
|
+
position: parsedPayload.position,
|
|
117
|
+
isFirst: parsedPayload.isFirst,
|
|
118
|
+
isLast: parsedPayload.isLast,
|
|
119
|
+
};
|
|
120
|
+
this.emit([[{ json: result }]]);
|
|
121
|
+
return [result];
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
this.logger.error(`Error processing job: ${error.message}`);
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
const readLoop = async () => {
|
|
129
|
+
while (running) {
|
|
130
|
+
if (!running)
|
|
131
|
+
break;
|
|
132
|
+
await processJob(false);
|
|
133
|
+
}
|
|
134
|
+
if (bc.quit) {
|
|
135
|
+
await bc.quit().catch(() => { });
|
|
132
136
|
}
|
|
133
137
|
};
|
|
134
138
|
void readLoop();
|
|
135
139
|
return {
|
|
136
140
|
closeFunction: async () => {
|
|
137
141
|
running = false;
|
|
142
|
+
this.logger.debug(`Redis Queue Trigger stopping for queue: ${queueKey}`);
|
|
138
143
|
},
|
|
139
144
|
manualTriggerFunction: async () => {
|
|
140
|
-
|
|
141
|
-
try {
|
|
142
|
-
const lockExists = (await c.sendCommand(['EXISTS', lockKey]));
|
|
143
|
-
if (lockExists === 1) {
|
|
144
|
-
return;
|
|
145
|
-
}
|
|
146
|
-
const res = await c.sendCommand(['BLPOP', queueKey, String(blpopTimeout)]);
|
|
147
|
-
if (!res || !Array.isArray(res) || res.length < 2) {
|
|
148
|
-
return;
|
|
149
|
-
}
|
|
150
|
-
const jobData = res[1];
|
|
151
|
-
let parsedPayload;
|
|
152
|
-
try {
|
|
153
|
-
parsedPayload = JSON.parse(jobData);
|
|
154
|
-
}
|
|
155
|
-
catch {
|
|
156
|
-
return;
|
|
157
|
-
}
|
|
158
|
-
if (!parsedPayload.jobId) {
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
161
|
-
const effectiveLockTTL = (_a = parsedPayload.lockTTL) !== null && _a !== void 0 ? _a : lockTTL;
|
|
162
|
-
const acquired = await c.sendCommand([
|
|
163
|
-
'SET',
|
|
164
|
-
lockKey,
|
|
165
|
-
'1',
|
|
166
|
-
'NX',
|
|
167
|
-
'EX',
|
|
168
|
-
String(effectiveLockTTL),
|
|
169
|
-
]);
|
|
170
|
-
if (!acquired) {
|
|
171
|
-
await c.sendCommand(['LPUSH', queueKey, jobData]);
|
|
172
|
-
return;
|
|
173
|
-
}
|
|
174
|
-
const result = {
|
|
175
|
-
data: parsedPayload.data,
|
|
176
|
-
queueId,
|
|
177
|
-
jobName: jobName || null,
|
|
178
|
-
jobId: parsedPayload.jobId,
|
|
179
|
-
};
|
|
180
|
-
this.emit([[{ json: { result } }]]);
|
|
181
|
-
}
|
|
182
|
-
catch (error) {
|
|
183
|
-
(_b = this.logger) === null || _b === void 0 ? void 0 : _b.error(`Error in manual trigger: ${error.message}`);
|
|
184
|
-
}
|
|
145
|
+
await processJob(true);
|
|
185
146
|
},
|
|
186
147
|
};
|
|
187
148
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BozonxRedisQueueConsumer.node.js","sourceRoot":"","sources":["../../../nodes/RedisQueueConsumer/BozonxRedisQueueConsumer.node.ts"],"names":[],"mappings":";;;AAOA,+CAAwD;AAQxD,MAAa,wBAAwB;IAArC;QACC,gBAAW,GAAyB;YACnC,WAAW,EAAE,qBAAqB;YAClC,IAAI,EAAE,0BAA0B;YAChC,KAAK,EAAE,CAAC,SAAS,CAAC;YAClB,OAAO,EAAE,CAAC;YACV,WAAW,
|
|
1
|
+
{"version":3,"file":"BozonxRedisQueueConsumer.node.js","sourceRoot":"","sources":["../../../nodes/RedisQueueConsumer/BozonxRedisQueueConsumer.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,4 +6,4 @@ export interface RedisConnectionOptions {
|
|
|
6
6
|
tls?: boolean;
|
|
7
7
|
db?: number;
|
|
8
8
|
}
|
|
9
|
-
export declare function getRedisClientConnected(opts: RedisConnectionOptions): Promise<unknown>;
|
|
9
|
+
export declare function getRedisClientConnected(opts: RedisConnectionOptions, standalone?: boolean): Promise<unknown>;
|
|
@@ -60,10 +60,10 @@ function buildUrl(opts) {
|
|
|
60
60
|
const dbPath = typeof opts.db === 'number' ? `/${opts.db}` : '';
|
|
61
61
|
return `${proto}://${authPart}${opts.host}:${opts.port}${dbPath}`;
|
|
62
62
|
}
|
|
63
|
-
async function getRedisClientConnected(opts) {
|
|
63
|
+
async function getRedisClientConnected(opts, standalone = false) {
|
|
64
64
|
const url = buildUrl(opts);
|
|
65
65
|
const cached = clients.get(url);
|
|
66
|
-
if (cached) {
|
|
66
|
+
if (cached && !standalone) {
|
|
67
67
|
if (cached.isOpen)
|
|
68
68
|
return cached;
|
|
69
69
|
try {
|
|
@@ -87,7 +87,9 @@ async function getRedisClientConnected(opts) {
|
|
|
87
87
|
client.on('error', () => {
|
|
88
88
|
});
|
|
89
89
|
await withTimeout(client.connect(), REDIS_CONNECT_DEADLINE_MS, `Redis connect timeout after ${REDIS_CONNECT_DEADLINE_MS}ms`);
|
|
90
|
-
|
|
90
|
+
if (!standalone) {
|
|
91
|
+
clients.set(url, client);
|
|
92
|
+
}
|
|
91
93
|
return client;
|
|
92
94
|
}
|
|
93
95
|
//# sourceMappingURL=redisClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redisClient.js","sourceRoot":"","sources":["../../../nodes/RedisQueueConsumer/redisClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,0DAqCC;AAhFD,mCAAoF;AAWpF,MAAM,yBAAyB,GAAG,KAAK,CAAC;AAExC,SAAS,WAAW,CAAI,OAAmB,EAAE,SAAiB,EAAE,OAAe;IAC9E,IAAI,OAAoD,CAAC;IACzD,OAAO,OAAO,CAAC,IAAI,CAAC;QACnB,OAAO;QACP,IAAI,OAAO,CAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;YAC5B,OAAO,GAAG,IAAA,mBAAY,EAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACrE,CAAC,CAAC;KACF,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;QACf,IAAI,OAAO;YAAE,IAAA,qBAAc,EAAC,OAAO,CAAC,CAAC;IACtC,CAAC,CAAe,CAAC;AAClB,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;AAE3C,SAAS,QAAQ,CAAC,IAA4B;;IAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;QAC7B,CAAC,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,kBAAkB,CAAC,MAAA,IAAI,CAAC,QAAQ,mCAAI,EAAE,CAAC,GAAG;QACpF,CAAC,CAAC,IAAI,CAAC,QAAQ;YACd,CAAC,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG;YAC1C,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAChE,OAAO,GAAG,KAAK,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,MAAM,EAAE,CAAC;AACnE,CAAC;AAOM,KAAK,UAAU,uBAAuB,CAAC,IAA4B;
|
|
1
|
+
{"version":3,"file":"redisClient.js","sourceRoot":"","sources":["../../../nodes/RedisQueueConsumer/redisClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,0DAqCC;AAhFD,mCAAoF;AAWpF,MAAM,yBAAyB,GAAG,KAAK,CAAC;AAExC,SAAS,WAAW,CAAI,OAAmB,EAAE,SAAiB,EAAE,OAAe;IAC9E,IAAI,OAAoD,CAAC;IACzD,OAAO,OAAO,CAAC,IAAI,CAAC;QACnB,OAAO;QACP,IAAI,OAAO,CAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;YAC5B,OAAO,GAAG,IAAA,mBAAY,EAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACrE,CAAC,CAAC;KACF,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;QACf,IAAI,OAAO;YAAE,IAAA,qBAAc,EAAC,OAAO,CAAC,CAAC;IACtC,CAAC,CAAe,CAAC;AAClB,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;AAE3C,SAAS,QAAQ,CAAC,IAA4B;;IAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;QAC7B,CAAC,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,kBAAkB,CAAC,MAAA,IAAI,CAAC,QAAQ,mCAAI,EAAE,CAAC,GAAG;QACpF,CAAC,CAAC,IAAI,CAAC,QAAQ;YACd,CAAC,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG;YAC1C,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAChE,OAAO,GAAG,KAAK,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,MAAM,EAAE,CAAC;AACnE,CAAC;AAOM,KAAK,UAAU,uBAAuB,CAAC,IAA4B,EAAE,UAAU,GAAG,KAAK;IAC7F,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAgC,CAAC;IAC/D,IAAI,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC3B,IAAI,MAAM,CAAC,MAAM;YAAE,OAAO,MAAiB,CAAC;QAC5C,IAAI,CAAC;YACJ,MAAM,WAAW,CAChB,MAAM,CAAC,OAAO,EAAE,EAChB,yBAAyB,EACzB,iCAAiC,yBAAyB,IAAI,CAC9D,CAAC;YACF,OAAO,MAAiB,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;IACF,CAAC;IACD,MAAM,EAAE,YAAY,EAAE,GAAG,wDAAa,OAAO,GAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,YAAY,CAAC;QAC3B,GAAG;QACH,mBAAmB,EAAE,IAAI;QACzB,MAAM,EAAE;YACP,cAAc,EAAE,KAAK;YACrB,iBAAiB,EAAE,CAAC,OAAO,EAAE,EAAE;gBAC9B,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC;YACtC,CAAC;SACD;KACD,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;IAExB,CAAC,CAAC,CAAC;IACH,MAAM,WAAW,CAChB,MAAM,CAAC,OAAO,EAAE,EAChB,yBAAyB,EACzB,+BAA+B,yBAAyB,IAAI,CAC5D,CAAC;IACF,IAAI,CAAC,UAAU,EAAE,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAiB,CAAC,CAAC;IAAC,CAAC;IACzD,OAAO,MAAiB,CAAC;AAC1B,CAAC"}
|