@venizia/ignis-helpers 0.2.0-13 → 0.2.0-15
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/cjs/modules/queue/bullmq/helper.d.ts +20 -4
- package/dist/cjs/modules/queue/bullmq/helper.d.ts.map +1 -1
- package/dist/cjs/modules/queue/bullmq/helper.js +40 -12
- package/dist/cjs/modules/queue/bullmq/helper.js.map +1 -1
- package/dist/cjs/modules/queue/kafka/common/types/callbacks.d.ts +10 -0
- package/dist/cjs/modules/queue/kafka/common/types/callbacks.d.ts.map +1 -1
- package/dist/cjs/modules/queue/kafka/common/types/consumer.d.ts +5 -1
- package/dist/cjs/modules/queue/kafka/common/types/consumer.d.ts.map +1 -1
- package/dist/cjs/modules/queue/kafka/consumer.d.ts +64 -28
- package/dist/cjs/modules/queue/kafka/consumer.d.ts.map +1 -1
- package/dist/cjs/modules/queue/kafka/consumer.js +53 -20
- package/dist/cjs/modules/queue/kafka/consumer.js.map +1 -1
- package/dist/cjs/utilities/module.utility.d.ts +8 -1
- package/dist/cjs/utilities/module.utility.d.ts.map +1 -1
- package/dist/cjs/utilities/module.utility.js +12 -2
- package/dist/cjs/utilities/module.utility.js.map +1 -1
- package/dist/esm/modules/queue/bullmq/helper.d.ts +20 -4
- package/dist/esm/modules/queue/bullmq/helper.d.ts.map +1 -1
- package/dist/esm/modules/queue/bullmq/helper.js +40 -12
- package/dist/esm/modules/queue/bullmq/helper.js.map +1 -1
- package/dist/esm/modules/queue/kafka/common/types/callbacks.d.ts +10 -0
- package/dist/esm/modules/queue/kafka/common/types/callbacks.d.ts.map +1 -1
- package/dist/esm/modules/queue/kafka/common/types/consumer.d.ts +5 -1
- package/dist/esm/modules/queue/kafka/common/types/consumer.d.ts.map +1 -1
- package/dist/esm/modules/queue/kafka/consumer.d.ts +64 -28
- package/dist/esm/modules/queue/kafka/consumer.d.ts.map +1 -1
- package/dist/esm/modules/queue/kafka/consumer.js +53 -20
- package/dist/esm/modules/queue/kafka/consumer.js.map +1 -1
- package/dist/esm/utilities/module.utility.d.ts +8 -1
- package/dist/esm/utilities/module.utility.d.ts.map +1 -1
- package/dist/esm/utilities/module.utility.js +12 -2
- package/dist/esm/utilities/module.utility.js.map +1 -1
- package/package.json +2 -1
|
@@ -4,7 +4,14 @@ export declare class ModuleUtility {
|
|
|
4
4
|
/** Peers handed over by the application, keyed by specifier. Checked before any filesystem lookup. The map lives in a globalThis slot because a process (or a compiled bundle) can carry two copies of this module, and a peer registered through one copy must be found by the other. */
|
|
5
5
|
private static readonly registered;
|
|
6
6
|
private static sharedRegistry;
|
|
7
|
-
/**
|
|
7
|
+
/** The application's project root, shared across module copies like the registry; `process.cwd()` until an application sets it. */
|
|
8
|
+
private static readonly PROJECT_ROOT_SLOT;
|
|
9
|
+
/** Called by the application once it knows its root (`configs.projectRoot` or the cwd); every peer lookup below follows it. */
|
|
10
|
+
static setProjectRoot(opts: {
|
|
11
|
+
projectRoot: string;
|
|
12
|
+
}): void;
|
|
13
|
+
static getProjectRoot(): string;
|
|
14
|
+
/** Resolves peers against the APP's node_modules (under the project root), not this package's own `dist/` location. */
|
|
8
15
|
private static appRequire;
|
|
9
16
|
private static fail;
|
|
10
17
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.utility.d.ts","sourceRoot":"","sources":["../../../src/utilities/module.utility.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAM9C,4LAA4L;AAC5L,qBAAa,aAAa;IACxB,0RAA0R;IAC1R,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAwD;IAE1F,OAAO,CAAC,MAAM,CAAC,cAAc;IAa7B,
|
|
1
|
+
{"version":3,"file":"module.utility.d.ts","sourceRoot":"","sources":["../../../src/utilities/module.utility.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAM9C,4LAA4L;AAC5L,qBAAa,aAAa;IACxB,0RAA0R;IAC1R,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAwD;IAE1F,OAAO,CAAC,MAAM,CAAC,cAAc;IAa7B,mIAAmI;IACnI,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAoC;IAE7E,+HAA+H;IAC/H,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAI1D,MAAM,CAAC,cAAc,IAAI,MAAM;IAK/B,uHAAuH;IACvH,OAAO,CAAC,MAAM,CAAC,UAAU;IAIzB,OAAO,CAAC,MAAM,CAAC,IAAI;IAanB;;;;;;;;;OASG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,IAAI;IAMjE,sFAAsF;WACzE,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IAcpE,kFAAkF;IAClF,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,CAAC;IAczD;;;;;;;OAOG;IACH,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE;QAC3B,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACvB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,eAAe,CAAC,EAAE,OAAO,CAAC;KAC3B,GAAG,IAAI;CAgBT"}
|
|
@@ -23,9 +23,19 @@ class ModuleUtility {
|
|
|
23
23
|
Reflect.set(globalThis, slot, created);
|
|
24
24
|
return created;
|
|
25
25
|
}
|
|
26
|
-
/**
|
|
26
|
+
/** The application's project root, shared across module copies like the registry; `process.cwd()` until an application sets it. */
|
|
27
|
+
static { this.PROJECT_ROOT_SLOT = Symbol.for('ignis:project-root'); }
|
|
28
|
+
/** Called by the application once it knows its root (`configs.projectRoot` or the cwd); every peer lookup below follows it. */
|
|
29
|
+
static setProjectRoot(opts) {
|
|
30
|
+
Reflect.set(globalThis, this.PROJECT_ROOT_SLOT, opts.projectRoot);
|
|
31
|
+
}
|
|
32
|
+
static getProjectRoot() {
|
|
33
|
+
const shared = Reflect.get(globalThis, this.PROJECT_ROOT_SLOT);
|
|
34
|
+
return shared ?? process.cwd();
|
|
35
|
+
}
|
|
36
|
+
/** Resolves peers against the APP's node_modules (under the project root), not this package's own `dist/` location. */
|
|
27
37
|
static appRequire() {
|
|
28
|
-
return (0, node_module_1.createRequire)(node_path_1.default.join(
|
|
38
|
+
return (0, node_module_1.createRequire)(node_path_1.default.join(this.getProjectRoot(), 'node_modules'));
|
|
29
39
|
}
|
|
30
40
|
static fail(opts) {
|
|
31
41
|
const { method, module, error, scope } = opts;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.utility.js","sourceRoot":"","sources":["../../../src/utilities/module.utility.ts"],"names":[],"mappings":";;;;;;AAAA,6CAA4C;AAC5C,0DAA6B;AAE7B,6CAAiD;AACjD,2CAA2C;AAE3C,MAAM,MAAM,GAAG,sBAAa,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;AAE1D,4LAA4L;AAC5L,MAAa,aAAa;IACxB,0RAA0R;aAClQ,eAAU,GAAyB,aAAa,CAAC,cAAc,EAAE,CAAC;IAElF,MAAM,CAAC,cAAc;QAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACjD,MAAM,MAAM,GAAqC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC/E,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAEvC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"module.utility.js","sourceRoot":"","sources":["../../../src/utilities/module.utility.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
import { BaseHelper } from '../../base.js';
|
|
2
2
|
import { IRedisHelper } from '../../redis/index.js';
|
|
3
|
-
import { Job, Processor, Queue, Worker } from 'bullmq';
|
|
3
|
+
import { Job, Processor, Queue, QueueOptions, Worker, WorkerOptions } from 'bullmq';
|
|
4
4
|
import { TBullQueueRole } from '../common/index.js';
|
|
5
|
-
interface IBullMQOptions<TQueueElement = any, TQueueResult = any> {
|
|
5
|
+
export interface IBullMQOptions<TQueueElement = any, TQueueResult = any> {
|
|
6
6
|
queueName: string;
|
|
7
7
|
identifier: string;
|
|
8
8
|
role: TBullQueueRole;
|
|
9
9
|
redisConnection: IRedisHelper;
|
|
10
10
|
numberOfWorker?: number;
|
|
11
11
|
lockDuration?: number;
|
|
12
|
+
/** Merged over the framework defaults, under the fields the helper owns (`connection`) - see `queueOptionsFor`. */
|
|
13
|
+
queueOptions?: Omit<QueueOptions, 'connection'>;
|
|
14
|
+
/** Merged under the fields the helper owns (`connection`, `concurrency`, `lockDuration`) - see `workerOptionsFor`. */
|
|
15
|
+
workerOptions?: Omit<WorkerOptions, 'connection' | 'concurrency' | 'lockDuration'>;
|
|
12
16
|
onWorkerData?: (job: Job<TQueueElement, TQueueResult>) => Promise<any>;
|
|
13
17
|
onWorkerDataCompleted?: (job: Job<TQueueElement, TQueueResult>, result: any) => Promise<void>;
|
|
14
18
|
onWorkerDataFail?: (job: Job<TQueueElement, TQueueResult> | undefined, error: Error) => Promise<void>;
|
|
@@ -21,13 +25,26 @@ export declare class BullMQHelper<TQueueElement = any, TQueueResult = any> exten
|
|
|
21
25
|
worker: Worker<TQueueElement, TQueueResult>;
|
|
22
26
|
protected numberOfWorker: number;
|
|
23
27
|
protected lockDuration: number;
|
|
28
|
+
protected queueOptions?: Omit<QueueOptions, 'connection'>;
|
|
29
|
+
protected workerOptions?: Omit<WorkerOptions, 'connection' | 'concurrency' | 'lockDuration'>;
|
|
24
30
|
protected onWorkerData?: (job: Job<TQueueElement, TQueueResult>) => Promise<any>;
|
|
25
31
|
protected onWorkerDataCompleted?: (job: Job<TQueueElement, TQueueResult>, result: any) => Promise<void>;
|
|
26
32
|
protected onWorkerDataFail?: (job: Job<TQueueElement, TQueueResult> | undefined, error: Error) => Promise<void>;
|
|
27
33
|
constructor(options: IBullMQOptions<TQueueElement, TQueueResult>);
|
|
28
34
|
static newInstance<T = any, R = any>(opts: IBullMQOptions<T, R>): BullMQHelper<T, R>;
|
|
29
|
-
|
|
35
|
+
/** Structural cluster check: catches a real `Cluster` instance, a duplicated cluster client, and one built from a second ioredis copy (fails `instanceof` across module copies). */
|
|
36
|
+
protected isClusterClient(): boolean;
|
|
37
|
+
protected resolveQueueName(): string;
|
|
30
38
|
configureQueue(): void;
|
|
39
|
+
/** Full `Queue` options: framework defaults, then `this.queueOptions`, then the connection the helper owns - in that precedence order. */
|
|
40
|
+
protected queueOptionsFor(opts: {
|
|
41
|
+
queueName: string;
|
|
42
|
+
}): QueueOptions;
|
|
43
|
+
/** Full `Worker` options: `this.workerOptions`, then the connection/concurrency/lock fields the helper owns - in that precedence order. */
|
|
44
|
+
protected workerOptionsFor(opts: {
|
|
45
|
+
queueName: string;
|
|
46
|
+
processor: Processor<TQueueElement, TQueueResult>;
|
|
47
|
+
}): WorkerOptions;
|
|
31
48
|
/** Client factory seam - overridden in tests to run the helper without Redis. */
|
|
32
49
|
protected buildQueue(opts: {
|
|
33
50
|
queueName: string;
|
|
@@ -41,5 +58,4 @@ export declare class BullMQHelper<TQueueElement = any, TQueueResult = any> exten
|
|
|
41
58
|
configure(): void;
|
|
42
59
|
close(): Promise<void>;
|
|
43
60
|
}
|
|
44
|
-
export {};
|
|
45
61
|
//# sourceMappingURL=helper.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../../../../../src/modules/queue/bullmq/helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,
|
|
1
|
+
{"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../../../../../src/modules/queue/bullmq/helper.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,12 +9,14 @@ export class BullMQHelper extends BaseHelper {
|
|
|
9
9
|
super({ scope: BullMQHelper.name, identifier: options.identifier });
|
|
10
10
|
this.numberOfWorker = 1;
|
|
11
11
|
this.lockDuration = 90 * 60 * 1000;
|
|
12
|
-
const { queueName, redisConnection, role, numberOfWorker = 1, lockDuration = 90 * 60 * 1000, onWorkerData, onWorkerDataCompleted, onWorkerDataFail, } = options;
|
|
12
|
+
const { queueName, redisConnection, role, numberOfWorker = 1, lockDuration = 90 * 60 * 1000, queueOptions, workerOptions, onWorkerData, onWorkerDataCompleted, onWorkerDataFail, } = options;
|
|
13
13
|
this.queueName = queueName;
|
|
14
14
|
this.role = role;
|
|
15
15
|
this.redisConnection = redisConnection;
|
|
16
16
|
this.numberOfWorker = numberOfWorker;
|
|
17
17
|
this.lockDuration = lockDuration;
|
|
18
|
+
this.queueOptions = queueOptions;
|
|
19
|
+
this.workerOptions = workerOptions;
|
|
18
20
|
this.onWorkerData = onWorkerData;
|
|
19
21
|
this.onWorkerDataCompleted = onWorkerDataCompleted;
|
|
20
22
|
this.onWorkerDataFail = onWorkerDataFail;
|
|
@@ -23,9 +25,19 @@ export class BullMQHelper extends BaseHelper {
|
|
|
23
25
|
static newInstance(opts) {
|
|
24
26
|
return new BullMQHelper(opts);
|
|
25
27
|
}
|
|
28
|
+
/** Structural cluster check: catches a real `Cluster` instance, a duplicated cluster client, and one built from a second ioredis copy (fails `instanceof` across module copies). */
|
|
29
|
+
isClusterClient() {
|
|
30
|
+
const client = Object(this.redisConnection.getClient());
|
|
31
|
+
if (client instanceof Cluster) {
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
if (Reflect.get(client, 'isCluster') === true) {
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
return typeof Reflect.get(client, 'nodes') === 'function';
|
|
38
|
+
}
|
|
26
39
|
resolveQueueName() {
|
|
27
|
-
|
|
28
|
-
if (isCluster && !this.queueName.startsWith('{')) {
|
|
40
|
+
if (this.isClusterClient() && !this.queueName.startsWith('{')) {
|
|
29
41
|
return `{${this.queueName}}`;
|
|
30
42
|
}
|
|
31
43
|
return this.queueName;
|
|
@@ -46,23 +58,39 @@ export class BullMQHelper extends BaseHelper {
|
|
|
46
58
|
.error('queue: %s | Queue error! Error: %s | ID: %s', this.queueName, error, this.identifier);
|
|
47
59
|
});
|
|
48
60
|
}
|
|
49
|
-
/**
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
61
|
+
/** Full `Queue` options: framework defaults, then `this.queueOptions`, then the connection the helper owns - in that precedence order. */
|
|
62
|
+
queueOptionsFor(opts) {
|
|
63
|
+
this.logger
|
|
64
|
+
.for(this.queueOptionsFor.name)
|
|
65
|
+
.debug('Building queue options | Queue: %s | ID: %s', opts.queueName, this.identifier);
|
|
66
|
+
return {
|
|
53
67
|
defaultJobOptions: {
|
|
54
68
|
removeOnComplete: true,
|
|
55
69
|
removeOnFail: true,
|
|
56
70
|
},
|
|
57
|
-
|
|
71
|
+
...this.queueOptions,
|
|
72
|
+
connection: this.redisConnection.duplicateClient(),
|
|
73
|
+
};
|
|
58
74
|
}
|
|
59
|
-
/**
|
|
60
|
-
|
|
61
|
-
|
|
75
|
+
/** Full `Worker` options: `this.workerOptions`, then the connection/concurrency/lock fields the helper owns - in that precedence order. */
|
|
76
|
+
workerOptionsFor(opts) {
|
|
77
|
+
this.logger
|
|
78
|
+
.for(this.workerOptionsFor.name)
|
|
79
|
+
.debug('Building worker options | Queue: %s | ID: %s', opts.queueName, this.identifier);
|
|
80
|
+
return {
|
|
81
|
+
...this.workerOptions,
|
|
62
82
|
connection: this.redisConnection.duplicateClient(),
|
|
63
83
|
concurrency: this.numberOfWorker,
|
|
64
84
|
lockDuration: this.lockDuration,
|
|
65
|
-
}
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/** Client factory seam - overridden in tests to run the helper without Redis. */
|
|
88
|
+
buildQueue(opts) {
|
|
89
|
+
return new Queue(opts.queueName, this.queueOptionsFor(opts));
|
|
90
|
+
}
|
|
91
|
+
/** Client factory seam - overridden in tests to run the helper without Redis. */
|
|
92
|
+
buildWorker(opts) {
|
|
93
|
+
return new Worker(opts.queueName, opts.processor, this.workerOptionsFor(opts));
|
|
66
94
|
}
|
|
67
95
|
configureWorker() {
|
|
68
96
|
if (!this.queueName) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helper.js","sourceRoot":"","sources":["../../../../../src/modules/queue/bullmq/helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,
|
|
1
|
+
{"version":3,"file":"helper.js","sourceRoot":"","sources":["../../../../../src/modules/queue/bullmq/helper.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,16 @@ export type TKafkaMessageErrorCallback<KeyType = string, ValueType = string, Hea
|
|
|
13
13
|
error: Error;
|
|
14
14
|
message?: Message<KeyType, ValueType, HeaderKeyType, HeaderValueType>;
|
|
15
15
|
}) => ValueOrPromise<void>;
|
|
16
|
+
/** The stream 'error' event - falls back to `onMessageError` when unset. */
|
|
17
|
+
export type TKafkaStreamErrorCallback = (opts: {
|
|
18
|
+
error: Error;
|
|
19
|
+
}) => ValueOrPromise<void>;
|
|
20
|
+
/** A reconnect failure (client rebuild or the reconnect attempt itself) - falls back to `onMessageError` when unset. */
|
|
21
|
+
export type TKafkaReconnectErrorCallback = (opts: {
|
|
22
|
+
error: Error;
|
|
23
|
+
attempt: number;
|
|
24
|
+
maxAttempts: number;
|
|
25
|
+
}) => ValueOrPromise<void>;
|
|
16
26
|
export type TKafkaGroupJoinCallback = (opts: {
|
|
17
27
|
groupId: string;
|
|
18
28
|
memberId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callbacks.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/queue/kafka/common/types/callbacks.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"callbacks.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/queue/kafka/common/types/callbacks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Deserializers, MessagesStreamFallbackModeValue, MessagesStreamModeValue, SchemaRegistry } from '@platformatic/kafka';
|
|
2
2
|
import { TKafkaGroupProtocol } from '../constants.js';
|
|
3
|
-
import { TKafkaBrokerEventCallback, TKafkaGroupJoinCallback, TKafkaGroupLeaveCallback, TKafkaGroupRebalanceCallback, TKafkaHeartbeatErrorCallback, TKafkaLagCallback, TKafkaLagErrorCallback, TKafkaMessageCallback, TKafkaMessageDoneCallback, TKafkaMessageErrorCallback } from './callbacks.js';
|
|
3
|
+
import { TKafkaBrokerEventCallback, TKafkaGroupJoinCallback, TKafkaGroupLeaveCallback, TKafkaGroupRebalanceCallback, TKafkaHeartbeatErrorCallback, TKafkaLagCallback, TKafkaLagErrorCallback, TKafkaMessageCallback, TKafkaMessageDoneCallback, TKafkaMessageErrorCallback, TKafkaReconnectErrorCallback, TKafkaStreamErrorCallback } from './callbacks.js';
|
|
4
4
|
import { IKafkaConnectionOptions } from './connection.js';
|
|
5
5
|
export interface IKafkaConsumerOptions<KeyType = string, ValueType = string, HeaderKeyType = string, HeaderValueType = string> extends IKafkaConnectionOptions {
|
|
6
6
|
groupId: string;
|
|
@@ -24,6 +24,10 @@ export interface IKafkaConsumerOptions<KeyType = string, ValueType = string, Hea
|
|
|
24
24
|
onMessage?: TKafkaMessageCallback<KeyType, ValueType, HeaderKeyType, HeaderValueType>;
|
|
25
25
|
onMessageDone?: TKafkaMessageDoneCallback<KeyType, ValueType, HeaderKeyType, HeaderValueType>;
|
|
26
26
|
onMessageError?: TKafkaMessageErrorCallback<KeyType, ValueType, HeaderKeyType, HeaderValueType>;
|
|
27
|
+
/** Stream 'error' events; falls back to `onMessageError` when unset. */
|
|
28
|
+
onStreamError?: TKafkaStreamErrorCallback;
|
|
29
|
+
/** Reconnect failures (client rebuild or the reconnect attempt); falls back to `onMessageError` when unset. */
|
|
30
|
+
onReconnectError?: TKafkaReconnectErrorCallback;
|
|
27
31
|
onGroupJoin?: TKafkaGroupJoinCallback;
|
|
28
32
|
onGroupLeave?: TKafkaGroupLeaveCallback;
|
|
29
33
|
onGroupRebalance?: TKafkaGroupRebalanceCallback;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consumer.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/queue/kafka/common/types/consumer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,+BAA+B,EAC/B,uBAAuB,EACvB,cAAc,EACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,EACxB,4BAA4B,EAC5B,4BAA4B,EAC5B,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,yBAAyB,EACzB,0BAA0B,
|
|
1
|
+
{"version":3,"file":"consumer.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/queue/kafka/common/types/consumer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,+BAA+B,EAC/B,uBAAuB,EACvB,cAAc,EACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,EACxB,4BAA4B,EAC5B,4BAA4B,EAC5B,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,yBAAyB,EACzB,0BAA0B,EAC1B,4BAA4B,EAC5B,yBAAyB,EAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAEvD,MAAM,WAAW,qBAAqB,CACpC,OAAO,GAAG,MAAM,EAChB,SAAS,GAAG,MAAM,EAClB,aAAa,GAAG,MAAM,EACtB,eAAe,GAAG,MAAM,CACxB,SAAQ,uBAAuB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC,CAAC;IAC3F,UAAU,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC;IAEhG,eAAe,CAAC,EAAE,yBAAyB,CAAC;IAC5C,kBAAkB,CAAC,EAAE,yBAAyB,CAAC;IAE/C,SAAS,CAAC,EAAE,qBAAqB,CAAC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC;IACtF,aAAa,CAAC,EAAE,yBAAyB,CAAC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC;IAC9F,cAAc,CAAC,EAAE,0BAA0B,CAAC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC;IAChG,wEAAwE;IACxE,aAAa,CAAC,EAAE,yBAAyB,CAAC;IAC1C,+GAA+G;IAC/G,gBAAgB,CAAC,EAAE,4BAA4B,CAAC;IAEhD,WAAW,CAAC,EAAE,uBAAuB,CAAC;IACtC,YAAY,CAAC,EAAE,wBAAwB,CAAC;IACxC,gBAAgB,CAAC,EAAE,4BAA4B,CAAC;IAChD,gBAAgB,CAAC,EAAE,4BAA4B,CAAC;IAEhD,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,UAAU,CAAC,EAAE,sBAAsB,CAAC;CACrC;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,uBAAuB,CAAC;IAC/B,YAAY,CAAC,EAAE,+BAA+B,CAAC;IAC/C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B"}
|
|
@@ -1,28 +1,41 @@
|
|
|
1
1
|
import type { MessagesStream } from '@platformatic/kafka';
|
|
2
2
|
import { Consumer } from '@platformatic/kafka';
|
|
3
3
|
import { BaseKafkaHelper } from './base.js';
|
|
4
|
-
import type { IKafkaConsumeStartOptions, IKafkaConsumerOptions } from './common/types/index.js';
|
|
5
|
-
/**
|
|
4
|
+
import type { IKafkaConsumeStartOptions, IKafkaConsumerOptions, TKafkaGroupJoinCallback, TKafkaGroupLeaveCallback, TKafkaGroupRebalanceCallback, TKafkaHeartbeatErrorCallback, TKafkaLagCallback, TKafkaLagErrorCallback, TKafkaMessageCallback, TKafkaMessageDoneCallback, TKafkaMessageErrorCallback, TKafkaReconnectErrorCallback, TKafkaStreamErrorCallback } from './common/types/index.js';
|
|
5
|
+
/**
|
|
6
|
+
* Wrapper around `@platformatic/kafka` Consumer with lifecycle management, health tracking, graceful shutdown, message callbacks, and lag monitoring.
|
|
7
|
+
*
|
|
8
|
+
* Every member below is `protected`, not `private`, so a consumer extends this class instead of forking it. That visibility is not a stable contract between minor versions.
|
|
9
|
+
*/
|
|
6
10
|
export declare class KafkaConsumerHelper<KeyType = string, ValueType = string, HeaderKeyType = string, HeaderValueType = string> extends BaseKafkaHelper<Consumer<KeyType, ValueType, HeaderKeyType, HeaderValueType>> {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
11
|
+
protected stream: MessagesStream<KeyType, ValueType, HeaderKeyType, HeaderValueType> | null;
|
|
12
|
+
protected consumeLoop: Promise<void> | null;
|
|
13
|
+
protected consumeStartOptions: IKafkaConsumeStartOptions | null;
|
|
14
|
+
protected lagMonitoringActive: boolean;
|
|
15
|
+
protected lagMonitoringOptions: {
|
|
16
|
+
topics: string[];
|
|
17
|
+
interval?: number;
|
|
18
|
+
} | null;
|
|
19
|
+
protected sessionLikelyStale: boolean;
|
|
20
|
+
protected readonly onMessage?: TKafkaMessageCallback<KeyType, ValueType, HeaderKeyType, HeaderValueType>;
|
|
21
|
+
protected readonly onMessageDone?: TKafkaMessageDoneCallback<KeyType, ValueType, HeaderKeyType, HeaderValueType>;
|
|
22
|
+
protected readonly onMessageError?: TKafkaMessageErrorCallback<KeyType, ValueType, HeaderKeyType, HeaderValueType>;
|
|
23
|
+
protected readonly onStreamError?: TKafkaStreamErrorCallback;
|
|
24
|
+
protected readonly onReconnectError?: TKafkaReconnectErrorCallback;
|
|
25
|
+
protected readonly onGroupJoin?: TKafkaGroupJoinCallback;
|
|
26
|
+
protected readonly onGroupLeave?: TKafkaGroupLeaveCallback;
|
|
27
|
+
protected readonly onGroupRebalance?: TKafkaGroupRebalanceCallback;
|
|
28
|
+
protected readonly onHeartbeatError?: TKafkaHeartbeatErrorCallback;
|
|
29
|
+
protected readonly onLag?: TKafkaLagCallback;
|
|
30
|
+
protected readonly onLagError?: TKafkaLagErrorCallback;
|
|
31
|
+
protected readonly initialOptions: IKafkaConsumerOptions<KeyType, ValueType, HeaderKeyType, HeaderValueType>;
|
|
23
32
|
constructor(opts: IKafkaConsumerOptions<KeyType, ValueType, HeaderKeyType, HeaderValueType>);
|
|
24
33
|
static newInstance<KeyType = string, ValueType = string, HeaderKeyType = string, HeaderValueType = string>(opts: IKafkaConsumerOptions<KeyType, ValueType, HeaderKeyType, HeaderValueType>): KafkaConsumerHelper<KeyType, ValueType, HeaderKeyType, HeaderValueType>;
|
|
25
|
-
|
|
34
|
+
/** The instance seam every rebuild goes through; the constructor alone uses the static factory because no instance exists yet. Override this to hand a rebuilt consumer different options or a test double. */
|
|
35
|
+
protected buildClient(opts: {
|
|
36
|
+
options: IKafkaConsumerOptions<KeyType, ValueType, HeaderKeyType, HeaderValueType>;
|
|
37
|
+
}): Consumer<KeyType, ValueType, HeaderKeyType, HeaderValueType>;
|
|
38
|
+
protected static buildConsumerClient<KeyType = string, ValueType = string, HeaderKeyType = string, HeaderValueType = string>(opts: IKafkaConsumerOptions<KeyType, ValueType, HeaderKeyType, HeaderValueType>): Consumer<KeyType, ValueType, HeaderKeyType, HeaderValueType>;
|
|
26
39
|
getConsumer(): Consumer<KeyType, ValueType, HeaderKeyType, HeaderValueType>;
|
|
27
40
|
getStream(): MessagesStream<KeyType, ValueType, HeaderKeyType, HeaderValueType> | null;
|
|
28
41
|
isReady(): boolean;
|
|
@@ -36,15 +49,38 @@ export declare class KafkaConsumerHelper<KeyType = string, ValueType = string, H
|
|
|
36
49
|
close(opts?: {
|
|
37
50
|
isForce?: boolean;
|
|
38
51
|
}): Promise<void>;
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
52
|
+
protected startConsumeLoop(opts: {
|
|
53
|
+
messageHandler: TKafkaMessageCallback<KeyType, ValueType, HeaderKeyType, HeaderValueType>;
|
|
54
|
+
doneHandler?: TKafkaMessageDoneCallback<KeyType, ValueType, HeaderKeyType, HeaderValueType>;
|
|
55
|
+
errorHandler?: TKafkaMessageErrorCallback<KeyType, ValueType, HeaderKeyType, HeaderValueType>;
|
|
56
|
+
reconnectDelayMs: number;
|
|
57
|
+
maxReconnectAttempts: number;
|
|
58
|
+
}): Promise<void>;
|
|
59
|
+
protected consumeMessages(opts: {
|
|
60
|
+
reconnectDelayMs: number;
|
|
61
|
+
maxReconnectAttempts: number;
|
|
62
|
+
errorHandler?: TKafkaMessageErrorCallback<KeyType, ValueType, HeaderKeyType, HeaderValueType>;
|
|
63
|
+
}): AsyncGenerator<import("@platformatic/kafka").Message<KeyType, ValueType, HeaderKeyType, HeaderValueType>, void, any>;
|
|
64
|
+
/** Silent only while the consume loop is alive AND the erroring stream is the one it drains - the iterator then reports the same error once. A dead or replaced stream, or pull mode, reports here. */
|
|
65
|
+
protected reportStreamError(opts: {
|
|
66
|
+
error: Error;
|
|
67
|
+
scope: string;
|
|
68
|
+
stream: unknown;
|
|
69
|
+
}): void;
|
|
70
|
+
protected drainStream(opts: {
|
|
71
|
+
errorHandler?: TKafkaMessageErrorCallback<KeyType, ValueType, HeaderKeyType, HeaderValueType>;
|
|
72
|
+
}): AsyncGenerator<import("@platformatic/kafka").Message<KeyType, ValueType, HeaderKeyType, HeaderValueType>, void, any>;
|
|
73
|
+
protected attemptReconnect(opts: {
|
|
74
|
+
attempt: number;
|
|
75
|
+
maxAttempts: number;
|
|
76
|
+
delayMs: number;
|
|
77
|
+
errorHandler?: TKafkaMessageErrorCallback<KeyType, ValueType, HeaderKeyType, HeaderValueType>;
|
|
78
|
+
}): Promise<void>;
|
|
79
|
+
protected rebuildClient(): Promise<void>;
|
|
80
|
+
protected closeOldClient(oldClient: Consumer<KeyType, ValueType, HeaderKeyType, HeaderValueType>): Promise<void>;
|
|
81
|
+
protected handleAllBrokersDown(reason: 'disconnected' | 'failed'): void;
|
|
82
|
+
protected destroyDeadStream(): void;
|
|
83
|
+
protected closeStream(): Promise<void>;
|
|
48
84
|
protected unconfigureBrokerEvents(): void;
|
|
49
85
|
protected configureBrokerEvents(): void;
|
|
50
86
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consumer.d.ts","sourceRoot":"","sources":["../../../../../src/modules/queue/kafka/consumer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAKV,cAAc,EAEf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAEzC,OAAO,KAAK,EACV,yBAAyB,EACzB,qBAAqB,
|
|
1
|
+
{"version":3,"file":"consumer.d.ts","sourceRoot":"","sources":["../../../../../src/modules/queue/kafka/consumer.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,11 @@ import { Consumer } from '@platformatic/kafka';
|
|
|
5
5
|
import { invokeHook } from '../common/index.js';
|
|
6
6
|
import { BaseKafkaHelper } from './base.js';
|
|
7
7
|
import { KafkaClientEvents, KafkaDefaults, KafkaHealthStatuses } from './common/constants.js';
|
|
8
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* Wrapper around `@platformatic/kafka` Consumer with lifecycle management, health tracking, graceful shutdown, message callbacks, and lag monitoring.
|
|
10
|
+
*
|
|
11
|
+
* Every member below is `protected`, not `private`, so a consumer extends this class instead of forking it. That visibility is not a stable contract between minor versions.
|
|
12
|
+
*/
|
|
9
13
|
export class KafkaConsumerHelper extends BaseKafkaHelper {
|
|
10
14
|
constructor(opts) {
|
|
11
15
|
super({
|
|
@@ -26,6 +30,8 @@ export class KafkaConsumerHelper extends BaseKafkaHelper {
|
|
|
26
30
|
this.onMessage = opts.onMessage;
|
|
27
31
|
this.onMessageDone = opts.onMessageDone;
|
|
28
32
|
this.onMessageError = opts.onMessageError;
|
|
33
|
+
this.onStreamError = opts.onStreamError;
|
|
34
|
+
this.onReconnectError = opts.onReconnectError;
|
|
29
35
|
this.onGroupJoin = opts.onGroupJoin;
|
|
30
36
|
this.onGroupLeave = opts.onGroupLeave;
|
|
31
37
|
this.onGroupRebalance = opts.onGroupRebalance;
|
|
@@ -38,6 +44,10 @@ export class KafkaConsumerHelper extends BaseKafkaHelper {
|
|
|
38
44
|
static newInstance(opts) {
|
|
39
45
|
return new KafkaConsumerHelper(opts);
|
|
40
46
|
}
|
|
47
|
+
/** The instance seam every rebuild goes through; the constructor alone uses the static factory because no instance exists yet. Override this to hand a rebuilt consumer different options or a test double. */
|
|
48
|
+
buildClient(opts) {
|
|
49
|
+
return KafkaConsumerHelper.buildConsumerClient(opts.options);
|
|
50
|
+
}
|
|
41
51
|
static buildConsumerClient(opts) {
|
|
42
52
|
return new Consumer({
|
|
43
53
|
clientId: opts.clientId,
|
|
@@ -89,22 +99,25 @@ export class KafkaConsumerHelper extends BaseKafkaHelper {
|
|
|
89
99
|
// Successful consume() means we're freshly joined to the group; clear any stale-session flag set during initial broker negotiation (e.g. a transient BROKER_DISCONNECT during bootstrap).
|
|
90
100
|
this.sessionLikelyStale = false;
|
|
91
101
|
// Always attached, hook or not: a stream 'error' with ZERO listeners is rethrown by EventEmitter as an uncaught exception, so a pull-style consumer (start() + getStream(), no onMessage/onMessageError) would take the whole process down on the first broker drop.
|
|
92
|
-
this.stream
|
|
102
|
+
const startedStream = this.stream;
|
|
103
|
+
startedStream.on(KafkaClientEvents.STREAM_ERROR, (streamError) => {
|
|
93
104
|
this.logger.for('start').error('Kafka stream ERROR | Error: %s', streamError);
|
|
94
|
-
|
|
95
|
-
logger: this.logger,
|
|
96
|
-
scope: 'start',
|
|
97
|
-
execution: () => this.onMessageError?.({ error: streamError }),
|
|
98
|
-
});
|
|
105
|
+
this.reportStreamError({ error: streamError, scope: 'start', stream: startedStream });
|
|
99
106
|
});
|
|
100
107
|
if (this.onMessage) {
|
|
101
|
-
|
|
108
|
+
const loop = this.startConsumeLoop({
|
|
102
109
|
messageHandler: this.onMessage,
|
|
103
110
|
doneHandler: this.onMessageDone,
|
|
104
111
|
errorHandler: this.onMessageError,
|
|
105
112
|
reconnectDelayMs: opts.reconnectDelayMs ?? KafkaDefaults.RECONNECT_DELAY,
|
|
106
113
|
maxReconnectAttempts: opts.maxReconnectAttempts ?? KafkaDefaults.MAX_RECONNECT_ATTEMPTS,
|
|
114
|
+
}).finally(() => {
|
|
115
|
+
// A finished loop (exhausted reconnects or shutdown) no longer reports stream errors; the listeners take over.
|
|
116
|
+
if (this.consumeLoop === loop) {
|
|
117
|
+
this.consumeLoop = null;
|
|
118
|
+
}
|
|
107
119
|
});
|
|
120
|
+
this.consumeLoop = loop;
|
|
108
121
|
}
|
|
109
122
|
this.logger.info('[start] Consumer started | Topics: %j', opts.topics);
|
|
110
123
|
}
|
|
@@ -203,6 +216,19 @@ export class KafkaConsumerHelper extends BaseKafkaHelper {
|
|
|
203
216
|
}
|
|
204
217
|
}
|
|
205
218
|
}
|
|
219
|
+
/** Silent only while the consume loop is alive AND the erroring stream is the one it drains - the iterator then reports the same error once. A dead or replaced stream, or pull mode, reports here. */
|
|
220
|
+
reportStreamError(opts) {
|
|
221
|
+
if (this.consumeLoop && this.stream === opts.stream) {
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
invokeHook({
|
|
225
|
+
logger: this.logger,
|
|
226
|
+
scope: opts.scope,
|
|
227
|
+
execution: () => this.onStreamError
|
|
228
|
+
? this.onStreamError({ error: opts.error })
|
|
229
|
+
: this.onMessageError?.({ error: opts.error }),
|
|
230
|
+
});
|
|
231
|
+
}
|
|
206
232
|
async *drainStream(opts) {
|
|
207
233
|
this.logger.debug('[drainStream] Consuming | Topics: %j', this.consumeStartOptions?.topics);
|
|
208
234
|
try {
|
|
@@ -215,7 +241,9 @@ export class KafkaConsumerHelper extends BaseKafkaHelper {
|
|
|
215
241
|
invokeHook({
|
|
216
242
|
logger: this.logger,
|
|
217
243
|
scope: 'drainStream',
|
|
218
|
-
execution: () =>
|
|
244
|
+
execution: () => this.onStreamError
|
|
245
|
+
? this.onStreamError({ error: normalizedError })
|
|
246
|
+
: opts.errorHandler?.({ error: normalizedError }),
|
|
219
247
|
});
|
|
220
248
|
}
|
|
221
249
|
this.destroyDeadStream();
|
|
@@ -242,7 +270,9 @@ export class KafkaConsumerHelper extends BaseKafkaHelper {
|
|
|
242
270
|
invokeHook({
|
|
243
271
|
logger: this.logger,
|
|
244
272
|
scope: 'attemptReconnect',
|
|
245
|
-
execution: () =>
|
|
273
|
+
execution: () => this.onReconnectError
|
|
274
|
+
? this.onReconnectError({ error: normalizedError, attempt, maxAttempts })
|
|
275
|
+
: errorHandler?.({ error: normalizedError }),
|
|
246
276
|
});
|
|
247
277
|
return;
|
|
248
278
|
}
|
|
@@ -253,15 +283,16 @@ export class KafkaConsumerHelper extends BaseKafkaHelper {
|
|
|
253
283
|
mode: this.consumeStartOptions.mode ?? KafkaDefaults.CONSUME_MODE,
|
|
254
284
|
fallbackMode: this.consumeStartOptions.fallbackMode ?? KafkaDefaults.CONSUME_FALLBACK_MODE,
|
|
255
285
|
});
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
286
|
+
// Always attached, hook or not, like the listener in start(): a stream 'error' with ZERO listeners is rethrown by EventEmitter and takes the process down.
|
|
287
|
+
const reconnectedStream = this.stream;
|
|
288
|
+
reconnectedStream.on(KafkaClientEvents.STREAM_ERROR, (streamError) => {
|
|
289
|
+
this.logger.for('attemptReconnect').error('Kafka stream ERROR | Error: %s', streamError);
|
|
290
|
+
this.reportStreamError({
|
|
291
|
+
error: streamError,
|
|
292
|
+
scope: 'attemptReconnect',
|
|
293
|
+
stream: reconnectedStream,
|
|
263
294
|
});
|
|
264
|
-
}
|
|
295
|
+
});
|
|
265
296
|
this.sessionLikelyStale = false;
|
|
266
297
|
this.logger.info('[attemptReconnect] Reconnected successfully | Topics: %j | Attempt: %d | Rebuilt: %s', this.consumeStartOptions.topics, attempt, shouldRebuildClient);
|
|
267
298
|
}
|
|
@@ -271,7 +302,9 @@ export class KafkaConsumerHelper extends BaseKafkaHelper {
|
|
|
271
302
|
invokeHook({
|
|
272
303
|
logger: this.logger,
|
|
273
304
|
scope: 'attemptReconnect',
|
|
274
|
-
execution: () =>
|
|
305
|
+
execution: () => this.onReconnectError
|
|
306
|
+
? this.onReconnectError({ error: normalizedError, attempt, maxAttempts })
|
|
307
|
+
: errorHandler?.({ error: normalizedError }),
|
|
275
308
|
});
|
|
276
309
|
}
|
|
277
310
|
}
|
|
@@ -279,7 +312,7 @@ export class KafkaConsumerHelper extends BaseKafkaHelper {
|
|
|
279
312
|
this.logger.warn('[rebuildClient] All brokers were disconnected; rebuilding @platformatic/kafka ' +
|
|
280
313
|
'Consumer to force a clean group rejoin (cached session state is stale)');
|
|
281
314
|
const oldClient = this.client;
|
|
282
|
-
const newClient =
|
|
315
|
+
const newClient = this.buildClient({ options: this.initialOptions });
|
|
283
316
|
this.swapClient(newClient);
|
|
284
317
|
if (this.lagMonitoringOptions) {
|
|
285
318
|
const opts = this.lagMonitoringOptions;
|