@cryptexlabs/codex-nodejs-common 0.2.5 → 0.3.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/lib/package.json +2 -2
- package/lib/src/auth/index.js +5 -1
- package/lib/src/auth/index.js.map +1 -1
- package/lib/src/client/index.js +5 -1
- package/lib/src/client/index.js.map +1 -1
- package/lib/src/config/default-config.js +5 -5
- package/lib/src/config/default-config.js.map +1 -1
- package/lib/src/config/index.js +5 -1
- package/lib/src/config/index.js.map +1 -1
- package/lib/src/config/kafka-config.d.ts +2 -1
- package/lib/src/config/kafka-config.interface.d.ts +1 -0
- package/lib/src/config/kafka-config.js +2 -1
- package/lib/src/config/kafka-config.js.map +1 -1
- package/lib/src/context/context.builder.js +2 -2
- package/lib/src/context/context.builder.js.map +1 -1
- package/lib/src/context/index.js +5 -1
- package/lib/src/context/index.js.map +1 -1
- package/lib/src/decorator/api-meta-headers.js +12 -12
- package/lib/src/decorator/api-meta-headers.js.map +1 -1
- package/lib/src/decorator/api-pagination.js +3 -3
- package/lib/src/decorator/api-pagination.js.map +1 -1
- package/lib/src/decorator/index.js +5 -1
- package/lib/src/decorator/index.js.map +1 -1
- package/lib/src/event/event-handler.d.ts +1 -1
- package/lib/src/event/event-handler.js +4 -1
- package/lib/src/event/event-handler.js.map +1 -1
- package/lib/src/event/index.js +5 -1
- package/lib/src/event/index.js.map +1 -1
- package/lib/src/event/websocket-event.handler.js +2 -2
- package/lib/src/event/websocket-event.handler.js.map +1 -1
- package/lib/src/exception/index.js +5 -1
- package/lib/src/exception/index.js.map +1 -1
- package/lib/src/filter/app-http-exception-filter.js +2 -2
- package/lib/src/filter/app-http-exception-filter.js.map +1 -1
- package/lib/src/filter/http-status.interceptor.js +2 -2
- package/lib/src/filter/http-status.interceptor.js.map +1 -1
- package/lib/src/filter/index.js +5 -1
- package/lib/src/filter/index.js.map +1 -1
- package/lib/src/index.js +5 -1
- package/lib/src/index.js.map +1 -1
- package/lib/src/logger/context.logger.js +1 -1
- package/lib/src/logger/context.logger.js.map +1 -1
- package/lib/src/logger/custom.logger.js +1 -1
- package/lib/src/logger/custom.logger.js.map +1 -1
- package/lib/src/logger/index.js +5 -1
- package/lib/src/logger/index.js.map +1 -1
- package/lib/src/message/index.js +5 -1
- package/lib/src/message/index.js.map +1 -1
- package/lib/src/message/message-meta.js +1 -1
- package/lib/src/message/message-meta.js.map +1 -1
- package/lib/src/pipe/country-code.pipe.js +1 -1
- package/lib/src/pipe/country-code.pipe.js.map +1 -1
- package/lib/src/pipe/csv.pipe.js +1 -1
- package/lib/src/pipe/csv.pipe.js.map +1 -1
- package/lib/src/pipe/index.js +5 -1
- package/lib/src/pipe/index.js.map +1 -1
- package/lib/src/pipe/joi-http-validation.pipe.js +1 -1
- package/lib/src/pipe/joi-http-validation.pipe.js.map +1 -1
- package/lib/src/pipe/language-code.pipe.js +1 -1
- package/lib/src/pipe/language-code.pipe.js.map +1 -1
- package/lib/src/pipe/not-empty.pipe.js +1 -1
- package/lib/src/pipe/not-empty.pipe.js.map +1 -1
- package/lib/src/pipe/uuidv4.array.validation.pipe.js +1 -1
- package/lib/src/pipe/uuidv4.array.validation.pipe.js.map +1 -1
- package/lib/src/pipe/uuidv4.validation.pipe.js +1 -1
- package/lib/src/pipe/uuidv4.validation.pipe.js.map +1 -1
- package/lib/src/response/healthz-response.js +1 -1
- package/lib/src/response/healthz-response.js.map +1 -1
- package/lib/src/response/index.js +5 -1
- package/lib/src/response/index.js.map +1 -1
- package/lib/src/result/index.js +5 -1
- package/lib/src/result/index.js.map +1 -1
- package/lib/src/service/consumer/consumer-service-delegate.interface.d.ts +2 -0
- package/lib/src/service/consumer/consumer.service.d.ts +1 -0
- package/lib/src/service/consumer/consumer.service.js +23 -10
- package/lib/src/service/consumer/consumer.service.js.map +1 -1
- package/lib/src/service/consumer/index.js +5 -1
- package/lib/src/service/consumer/index.js.map +1 -1
- package/lib/src/service/consumer/websocket-consumer.service.js +5 -5
- package/lib/src/service/consumer/websocket-consumer.service.js.map +1 -1
- package/lib/src/service/elasticsearch/elasticsearch-healthz.service.js +5 -5
- package/lib/src/service/elasticsearch/elasticsearch-healthz.service.js.map +1 -1
- package/lib/src/service/elasticsearch/index.js +5 -1
- package/lib/src/service/elasticsearch/index.js.map +1 -1
- package/lib/src/service/healthz/healthz.service.js +3 -3
- package/lib/src/service/healthz/healthz.service.js.map +1 -1
- package/lib/src/service/healthz/index.js +5 -1
- package/lib/src/service/healthz/index.js.map +1 -1
- package/lib/src/service/index.js +5 -1
- package/lib/src/service/index.js.map +1 -1
- package/lib/src/service/kafka/index.d.ts +1 -0
- package/lib/src/service/kafka/index.js +6 -1
- package/lib/src/service/kafka/index.js.map +1 -1
- package/lib/src/service/kafka/kafka.replay.messages.d.ts +10 -0
- package/lib/src/service/kafka/kafka.replay.messages.js +42 -0
- package/lib/src/service/kafka/kafka.replay.messages.js.map +1 -0
- package/lib/src/service/kafka/kafka.service.d.ts +2 -0
- package/lib/src/service/kafka/kafka.service.js +83 -3
- package/lib/src/service/kafka/kafka.service.js.map +1 -1
- package/lib/src/service/kafka/kafka.stub.service.js +1 -1
- package/lib/src/service/kafka/kafka.stub.service.js.map +1 -1
- package/lib/src/service/socket/index.js +5 -1
- package/lib/src/service/socket/index.js.map +1 -1
- package/lib/src/service/socket/websocket.gateway.js +8 -8
- package/lib/src/service/socket/websocket.gateway.js.map +1 -1
- package/lib/src/util/index.js +5 -1
- package/lib/src/util/index.js.map +1 -1
- package/package.json +2 -2
- package/src/config/default-config.ts +2 -1
- package/src/config/kafka-config.interface.ts +1 -0
- package/src/config/kafka-config.ts +4 -1
- package/src/event/event-handler.ts +5 -2
- package/src/service/consumer/consumer-service-delegate.interface.ts +2 -0
- package/src/service/consumer/consumer.service.ts +26 -3
- package/src/service/kafka/index.ts +1 -0
- package/src/service/kafka/kafka.replay.messages.ts +33 -0
- package/src/service/kafka/kafka.service.ts +145 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kafka.replay.messages.js","sourceRoot":"","sources":["../../../../src/service/kafka/kafka.replay.messages.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAmE;AACnE,mDAA+C;AAC/C,yCAA6C;AAG7C,IAAa,mBAAmB,GAAhC,MAAa,mBAAmB;IAC9B,YACqC,MAAqB,EACrB,MAAqB,EACvC,YAA0B;QAFR,WAAM,GAAN,MAAM,CAAe;QACrB,WAAM,GAAN,MAAM,CAAe;QACvC,iBAAY,GAAZ,YAAY,CAAc;IAC1C,CAAC;IAEJ,KAAK,CAAC,OAAO,CACX,OAAe,EACf,OAAe,EACf,QAAgB;QAEhB,MAAM,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,CAAC;QAC7C,MAAM,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QAElC,MAAM,IAAI,CAAC,YAAY,CAAC,mBAAmB,CACzC,CAAC,OAAO,CAAC,EACT,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE;YACnB,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAC7B,QAAQ,EACR,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CACrC,CAAC;QACJ,CAAC,CACF,CAAC;QACF,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;IACvC,CAAC;CACF,CAAA;AA3BY,mBAAmB;IAD/B,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAA;IAChB,WAAA,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAA;qCAD0B,sBAAa,UAEzB,4BAAY;GAJlC,mBAAmB,CA2B/B;AA3BY,kDAAmB"}
|
|
@@ -16,7 +16,9 @@ export declare class KafkaService implements ConsumerServiceDelegateInterface {
|
|
|
16
16
|
initializeConsumer(consumerGroup: string): Promise<void>;
|
|
17
17
|
initializeProducer(): Promise<void>;
|
|
18
18
|
startConsumer(topics: (string | RegExp)[], callback: (topic: string, message: Message) => Promise<void>): Promise<void>;
|
|
19
|
+
startManualConsumer(topics: (string | RegExp)[], callback: (topic: string, message: Message) => Promise<void>): Promise<void>;
|
|
19
20
|
private _ensureTopicsExist;
|
|
20
21
|
publish(topic: string, payload: any): Promise<void>;
|
|
21
22
|
publishBulk(topic: string, payloads: any[]): Promise<void>;
|
|
23
|
+
private _setManualConsume;
|
|
22
24
|
}
|
|
@@ -94,6 +94,31 @@ let KafkaService = class KafkaService {
|
|
|
94
94
|
},
|
|
95
95
|
});
|
|
96
96
|
}
|
|
97
|
+
async startManualConsumer(topics, callback) {
|
|
98
|
+
await this._setManualConsume();
|
|
99
|
+
const promises = [];
|
|
100
|
+
for (const topic of topics) {
|
|
101
|
+
promises.push(this._kafkaConsumer.subscribe({ topic, fromBeginning: true }));
|
|
102
|
+
}
|
|
103
|
+
try {
|
|
104
|
+
await Promise.all(promises);
|
|
105
|
+
await this._ensureTopicsExist(topics);
|
|
106
|
+
const results = [
|
|
107
|
+
new Promise((resolve) => {
|
|
108
|
+
this._kafkaConsumer.run({
|
|
109
|
+
eachMessage: async (messagePayload) => {
|
|
110
|
+
const { topic, partition, message } = messagePayload;
|
|
111
|
+
await callback(topic, message);
|
|
112
|
+
},
|
|
113
|
+
});
|
|
114
|
+
}),
|
|
115
|
+
];
|
|
116
|
+
await Promise.all(results);
|
|
117
|
+
}
|
|
118
|
+
catch (e) {
|
|
119
|
+
this.logger.error(e.message, e.trace);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
97
122
|
async _ensureTopicsExist(topics) {
|
|
98
123
|
const stringTopics = [];
|
|
99
124
|
for (const topic of topics) {
|
|
@@ -137,11 +162,66 @@ let KafkaService = class KafkaService {
|
|
|
137
162
|
messages,
|
|
138
163
|
});
|
|
139
164
|
}
|
|
165
|
+
async _setManualConsume() {
|
|
166
|
+
let consumedTopicPartitions = {};
|
|
167
|
+
this._kafkaConsumer.on(this._kafkaConsumer.events.GROUP_JOIN, async ({ payload }) => {
|
|
168
|
+
const { memberAssignment } = payload;
|
|
169
|
+
consumedTopicPartitions = Object.entries(memberAssignment).reduce((topics, [topic, partitions]) => {
|
|
170
|
+
for (const partition in partitions) {
|
|
171
|
+
this.logger.debug("topic-partition: ", `${topic}-${partition}`);
|
|
172
|
+
topics[`${topic}-${partition}`] = false;
|
|
173
|
+
}
|
|
174
|
+
return topics;
|
|
175
|
+
}, {});
|
|
176
|
+
});
|
|
177
|
+
let processedBatch = true;
|
|
178
|
+
this._kafkaConsumer.on(this._kafkaConsumer.events.FETCH_START, async () => {
|
|
179
|
+
if (processedBatch === false) {
|
|
180
|
+
await this._kafkaConsumer.disconnect();
|
|
181
|
+
process.exit(0);
|
|
182
|
+
}
|
|
183
|
+
processedBatch = false;
|
|
184
|
+
});
|
|
185
|
+
this._kafkaConsumer.on(this._kafkaConsumer.events.END_BATCH_PROCESS, async ({ payload }) => {
|
|
186
|
+
const { topic, partition, offsetLag } = payload;
|
|
187
|
+
consumedTopicPartitions[`${topic}-${partition}`] = offsetLag === "0";
|
|
188
|
+
if (Object.values(consumedTopicPartitions).every((consumed) => Boolean(consumed))) {
|
|
189
|
+
await this._kafkaConsumer.disconnect();
|
|
190
|
+
process.exit(0);
|
|
191
|
+
}
|
|
192
|
+
processedBatch = true;
|
|
193
|
+
});
|
|
194
|
+
const errorTypes = ["unhandledRejection", "uncaughtException"];
|
|
195
|
+
const signalTraps = ["SIGTERM", "SIGINT", "SIGUSR2"];
|
|
196
|
+
errorTypes.map((type) => {
|
|
197
|
+
process.on(type, async (e) => {
|
|
198
|
+
try {
|
|
199
|
+
this.logger.debug(`process.on ${type}`);
|
|
200
|
+
this.logger.error(e);
|
|
201
|
+
await this.disconnect();
|
|
202
|
+
process.exit(0);
|
|
203
|
+
}
|
|
204
|
+
catch (_) {
|
|
205
|
+
process.exit(1);
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
signalTraps.map((type) => {
|
|
210
|
+
process.once(type, async () => {
|
|
211
|
+
try {
|
|
212
|
+
await this.disconnect();
|
|
213
|
+
}
|
|
214
|
+
finally {
|
|
215
|
+
process.kill(process.pid, type);
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
});
|
|
219
|
+
}
|
|
140
220
|
};
|
|
141
221
|
KafkaService = __decorate([
|
|
142
|
-
common_1.Injectable(),
|
|
143
|
-
__param(0, common_1.Inject("CONFIG")),
|
|
144
|
-
__param(1, common_1.Inject("LOGGER")),
|
|
222
|
+
(0, common_1.Injectable)(),
|
|
223
|
+
__param(0, (0, common_1.Inject)("CONFIG")),
|
|
224
|
+
__param(1, (0, common_1.Inject)("LOGGER")),
|
|
145
225
|
__metadata("design:paramtypes", [config_1.DefaultConfig, Object])
|
|
146
226
|
], KafkaService);
|
|
147
227
|
exports.KafkaService = KafkaService;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kafka.service.js","sourceRoot":"","sources":["../../../../src/service/kafka/kafka.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAmE;AACnE,
|
|
1
|
+
{"version":3,"file":"kafka.service.js","sourceRoot":"","sources":["../../../../src/service/kafka/kafka.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@ let KafkaStubService = class KafkaStubService {
|
|
|
13
13
|
async send(payload, logger) { }
|
|
14
14
|
};
|
|
15
15
|
KafkaStubService = __decorate([
|
|
16
|
-
common_1.Injectable()
|
|
16
|
+
(0, common_1.Injectable)()
|
|
17
17
|
], KafkaStubService);
|
|
18
18
|
exports.KafkaStubService = KafkaStubService;
|
|
19
19
|
//# sourceMappingURL=kafka.stub.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kafka.stub.service.js","sourceRoot":"","sources":["../../../../src/service/kafka/kafka.stub.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA2D;AAK3D,IAAa,gBAAgB,GAA7B,MAAa,gBAAgB;IACpB,KAAK,CAAC,aAAa,KAAkB,CAAC;IAEtC,KAAK,CAAC,IAAI,CACf,OAA8B,EAC9B,MAAqB,IACN,CAAC;CACnB,CAAA;AAPY,gBAAgB;IAD5B,mBAAU,
|
|
1
|
+
{"version":3,"file":"kafka.stub.service.js","sourceRoot":"","sources":["../../../../src/service/kafka/kafka.stub.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA2D;AAK3D,IAAa,gBAAgB,GAA7B,MAAa,gBAAgB;IACpB,KAAK,CAAC,aAAa,KAAkB,CAAC;IAEtC,KAAK,CAAC,IAAI,CACf,OAA8B,EAC9B,MAAqB,IACN,CAAC;CACnB,CAAA;AAPY,gBAAgB;IAD5B,IAAA,mBAAU,GAAE;GACA,gBAAgB,CAO5B;AAPY,4CAAgB"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/service/socket/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/service/socket/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6DAA2C;AAC3C,sDAAoC;AACpC,wDAAsC;AACtC,uEAAqD;AACrD,uEAAqD"}
|
|
@@ -125,17 +125,17 @@ let WebsocketGateway = class WebsocketGateway {
|
|
|
125
125
|
}
|
|
126
126
|
};
|
|
127
127
|
__decorate([
|
|
128
|
-
websockets_1.WebSocketServer(),
|
|
128
|
+
(0, websockets_1.WebSocketServer)(),
|
|
129
129
|
__metadata("design:type", Object)
|
|
130
130
|
], WebsocketGateway.prototype, "server", void 0);
|
|
131
131
|
WebsocketGateway = __decorate([
|
|
132
|
-
websockets_1.WebSocketGateway(),
|
|
133
|
-
__param(1, common_1.Inject("CONFIG")),
|
|
134
|
-
__param(2, common_1.Inject("TOPIC_AUTHORIZORS")),
|
|
135
|
-
__param(3, common_1.Inject("LOGGER")),
|
|
136
|
-
__param(4, common_1.Inject("BROADCASTER")),
|
|
137
|
-
__param(5, common_1.Inject("CONTEXT_BUILDER")),
|
|
138
|
-
__param(6, common_1.Inject("AUTHENTICATOR")),
|
|
132
|
+
(0, websockets_1.WebSocketGateway)(),
|
|
133
|
+
__param(1, (0, common_1.Inject)("CONFIG")),
|
|
134
|
+
__param(2, (0, common_1.Inject)("TOPIC_AUTHORIZORS")),
|
|
135
|
+
__param(3, (0, common_1.Inject)("LOGGER")),
|
|
136
|
+
__param(4, (0, common_1.Inject)("BROADCASTER")),
|
|
137
|
+
__param(5, (0, common_1.Inject)("CONTEXT_BUILDER")),
|
|
138
|
+
__param(6, (0, common_1.Inject)("AUTHENTICATOR")),
|
|
139
139
|
__metadata("design:paramtypes", [consumer_1.WebsocketConsumerService,
|
|
140
140
|
config_1.DefaultConfig, Array, Object, broadcaster_service_1.BroadcasterService,
|
|
141
141
|
context_1.ContextBuilder, Object])
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.gateway.js","sourceRoot":"","sources":["../../../../src/service/socket/websocket.gateway.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"websocket.gateway.js","sourceRoot":"","sources":["../../../../src/service/socket/websocket.gateway.ts"],"names":[],"mappings":"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"}
|
package/lib/src/util/index.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/util/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/util/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,+CAA6B;AAC7B,gDAA8B;AAC9B,8CAA4B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cryptexlabs/codex-nodejs-common",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Common code for Assistant applications",
|
|
5
5
|
"main": "lib/src/index.js",
|
|
6
6
|
"repository": "git@gitlab.com:cryptexlabs/public/codex-nodejs-common.git",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"joi": "^17.3.0",
|
|
39
39
|
"js-yaml": "^3.14.1",
|
|
40
40
|
"jsonwebtoken": "^8.5.1",
|
|
41
|
-
"kafkajs": "^1.
|
|
41
|
+
"kafkajs": "^1.16.0",
|
|
42
42
|
"randomstring": "^1.2.1",
|
|
43
43
|
"reflect-metadata": "^0.1.13",
|
|
44
44
|
"rxjs": "^7.3.0",
|
|
@@ -144,7 +144,8 @@ export class DefaultConfig implements JsonSerializableInterface<any> {
|
|
|
144
144
|
process.env.KAFKA_TOPICS_CONFIG_PATH ||
|
|
145
145
|
`${this._appPath}/config/topics.yaml`,
|
|
146
146
|
process.env.KAFKA_CLIENT_ID || process.env.POD_NAME || this.appName,
|
|
147
|
-
process.env.KAFKA_DEFAULT_PARTITIONS
|
|
147
|
+
process.env.KAFKA_DEFAULT_PARTITIONS,
|
|
148
|
+
process.env.KAFKA_DEFAULT_ERROR_TOPIC
|
|
148
149
|
);
|
|
149
150
|
}
|
|
150
151
|
|
|
@@ -10,6 +10,7 @@ export class KafkaConfig
|
|
|
10
10
|
enabled: boolean;
|
|
11
11
|
saslMechanism: SASLMechanism;
|
|
12
12
|
defaultPartitions: number;
|
|
13
|
+
defaultKafkaErrorTopic: string;
|
|
13
14
|
|
|
14
15
|
constructor(
|
|
15
16
|
enabled: string,
|
|
@@ -20,7 +21,8 @@ export class KafkaConfig
|
|
|
20
21
|
saslMechanism: string,
|
|
21
22
|
public readonly topicsConfigPath: string,
|
|
22
23
|
public readonly clientId: string,
|
|
23
|
-
defaultPartitions?: string
|
|
24
|
+
defaultPartitions?: string,
|
|
25
|
+
defaultKafkaErrorTopic?: string
|
|
24
26
|
) {
|
|
25
27
|
super(host, port);
|
|
26
28
|
this.saslMechanism = saslMechanism as SASLMechanism;
|
|
@@ -28,5 +30,6 @@ export class KafkaConfig
|
|
|
28
30
|
this.defaultPartitions = defaultPartitions
|
|
29
31
|
? parseInt(defaultPartitions, 10)
|
|
30
32
|
: 3;
|
|
33
|
+
this.defaultKafkaErrorTopic = defaultKafkaErrorTopic;
|
|
31
34
|
}
|
|
32
35
|
}
|
|
@@ -8,18 +8,21 @@ export class EventHandler {
|
|
|
8
8
|
public async handle(
|
|
9
9
|
message: Message,
|
|
10
10
|
topic: string,
|
|
11
|
-
handler: EventHandlerInterface
|
|
11
|
+
handler: EventHandlerInterface,
|
|
12
|
+
errorEventHandler?: (message: any, error: string) => Promise<void>
|
|
12
13
|
) {
|
|
13
14
|
let data;
|
|
14
15
|
try {
|
|
15
16
|
data = JSON.parse(message.value.toString());
|
|
16
17
|
await handler.handle(data, topic);
|
|
17
18
|
} catch (e) {
|
|
18
|
-
// TODO publish message to error queue
|
|
19
19
|
this.logger.error(
|
|
20
20
|
`Error handling event: ${JSON.stringify(data)} from topic ${topic}`,
|
|
21
21
|
e.stack
|
|
22
22
|
);
|
|
23
|
+
if (errorEventHandler) {
|
|
24
|
+
await errorEventHandler(data, JSON.stringify(e.message));
|
|
25
|
+
}
|
|
23
26
|
}
|
|
24
27
|
}
|
|
25
28
|
}
|
|
@@ -43,7 +43,9 @@ export class ConsumerService {
|
|
|
43
43
|
await this.healthzService.makeUnhealthy(
|
|
44
44
|
HealthzComponentEnum.MESSAGE_BROKER_KAFKA
|
|
45
45
|
);
|
|
46
|
-
|
|
46
|
+
if (this.config.kafka.defaultKafkaErrorTopic) {
|
|
47
|
+
await this.consumerDelegateService.initializeProducer();
|
|
48
|
+
}
|
|
47
49
|
await this.consumerDelegateService.initializeConsumer(
|
|
48
50
|
`${this.config.appName}-${this.consumerType}`
|
|
49
51
|
);
|
|
@@ -94,9 +96,30 @@ export class ConsumerService {
|
|
|
94
96
|
|
|
95
97
|
return ConsumerUtil.getTopics(allTopics);
|
|
96
98
|
}
|
|
99
|
+
|
|
100
|
+
private async _errorEventHandler(message: any, errorMessage: string) {
|
|
101
|
+
const messageWithError = { ...message };
|
|
102
|
+
messageWithError.meta.errorMessage = errorMessage;
|
|
103
|
+
await this.consumerDelegateService.publish(
|
|
104
|
+
this.config.kafka.defaultKafkaErrorTopic,
|
|
105
|
+
{
|
|
106
|
+
...messageWithError,
|
|
107
|
+
}
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
|
|
97
111
|
public async handle(topic: string, message: any): Promise<void> {
|
|
98
|
-
const
|
|
99
|
-
|
|
112
|
+
const messageTopic = message.meta?.type ?? topic;
|
|
113
|
+
const handler = this._getFactory(messageTopic).getHandler(messageTopic);
|
|
114
|
+
let errorEventHandler;
|
|
115
|
+
if (this.config.kafka.defaultKafkaErrorTopic)
|
|
116
|
+
errorEventHandler = this._errorEventHandler.bind(this);
|
|
117
|
+
await this.eventHandler.handle(
|
|
118
|
+
message,
|
|
119
|
+
messageTopic,
|
|
120
|
+
handler,
|
|
121
|
+
errorEventHandler
|
|
122
|
+
);
|
|
100
123
|
}
|
|
101
124
|
|
|
102
125
|
public _getFactory(topic: string): EventHandlerFactoryInterface {
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Inject, Injectable, LoggerService } from "@nestjs/common";
|
|
2
|
+
import { KafkaService } from "./kafka.service";
|
|
3
|
+
import { DefaultConfig } from "../../config";
|
|
4
|
+
|
|
5
|
+
@Injectable()
|
|
6
|
+
export class ReplayKafkaMessages {
|
|
7
|
+
constructor(
|
|
8
|
+
@Inject("CONFIG") private readonly config: DefaultConfig,
|
|
9
|
+
@Inject("LOGGER") private readonly logger: LoggerService,
|
|
10
|
+
private readonly kafkaService: KafkaService
|
|
11
|
+
) {}
|
|
12
|
+
|
|
13
|
+
async process(
|
|
14
|
+
groupId: string,
|
|
15
|
+
inTopic: string,
|
|
16
|
+
outTopic: string
|
|
17
|
+
): Promise<void> {
|
|
18
|
+
await this.kafkaService.initializeProducer();
|
|
19
|
+
await this.kafkaService.initializeConsumer(groupId);
|
|
20
|
+
await this.kafkaService.connect();
|
|
21
|
+
|
|
22
|
+
await this.kafkaService.startManualConsumer(
|
|
23
|
+
[inTopic],
|
|
24
|
+
async (_, message) => {
|
|
25
|
+
await this.kafkaService.publish(
|
|
26
|
+
outTopic,
|
|
27
|
+
JSON.parse(message.value.toString())
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
);
|
|
31
|
+
await this.kafkaService.disconnect();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -2,6 +2,7 @@ import { Inject, Injectable, LoggerService } from "@nestjs/common";
|
|
|
2
2
|
import {
|
|
3
3
|
Admin,
|
|
4
4
|
Consumer,
|
|
5
|
+
EachMessagePayload,
|
|
5
6
|
ITopicConfig,
|
|
6
7
|
Kafka,
|
|
7
8
|
Message,
|
|
@@ -115,6 +116,39 @@ export class KafkaService implements ConsumerServiceDelegateInterface {
|
|
|
115
116
|
});
|
|
116
117
|
}
|
|
117
118
|
|
|
119
|
+
public async startManualConsumer(
|
|
120
|
+
topics: (string | RegExp)[],
|
|
121
|
+
callback: (topic: string, message: Message) => Promise<void>
|
|
122
|
+
): Promise<void> {
|
|
123
|
+
await this._setManualConsume();
|
|
124
|
+
|
|
125
|
+
const promises = [];
|
|
126
|
+
for (const topic of topics) {
|
|
127
|
+
promises.push(
|
|
128
|
+
this._kafkaConsumer.subscribe({ topic, fromBeginning: true })
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
try {
|
|
132
|
+
await Promise.all(promises);
|
|
133
|
+
|
|
134
|
+
await this._ensureTopicsExist(topics);
|
|
135
|
+
|
|
136
|
+
const results = [
|
|
137
|
+
new Promise((resolve) => {
|
|
138
|
+
this._kafkaConsumer.run({
|
|
139
|
+
eachMessage: async (messagePayload: EachMessagePayload) => {
|
|
140
|
+
const { topic, partition, message } = messagePayload;
|
|
141
|
+
await callback(topic, message);
|
|
142
|
+
},
|
|
143
|
+
});
|
|
144
|
+
}),
|
|
145
|
+
];
|
|
146
|
+
await Promise.all(results);
|
|
147
|
+
} catch (e) {
|
|
148
|
+
this.logger.error(e.message, e.trace);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
118
152
|
private async _ensureTopicsExist(topics: (string | RegExp)[]): Promise<void> {
|
|
119
153
|
const stringTopics = [];
|
|
120
154
|
for (const topic of topics) {
|
|
@@ -165,4 +199,115 @@ export class KafkaService implements ConsumerServiceDelegateInterface {
|
|
|
165
199
|
messages,
|
|
166
200
|
});
|
|
167
201
|
}
|
|
202
|
+
|
|
203
|
+
private async _setManualConsume(): Promise<void> {
|
|
204
|
+
/* Based on solution provided here:
|
|
205
|
+
* https://github.com/tulios/kafkajs/issues/825#issuecomment-674106799
|
|
206
|
+
*
|
|
207
|
+
* 1. We need to know which partitions we are assigned.
|
|
208
|
+
* 2. Which partitions have we consumed the last offset for
|
|
209
|
+
* 3. If all partitions have 0 lag, we exit.
|
|
210
|
+
*/
|
|
211
|
+
|
|
212
|
+
/*
|
|
213
|
+
* `consumedTopicPartitions` will be an object of all topic-partitions
|
|
214
|
+
* and a boolean indicating whether or not we have consumed all
|
|
215
|
+
* messages in that topic-partition. For example:
|
|
216
|
+
*
|
|
217
|
+
* {
|
|
218
|
+
* "topic-test-0": false,
|
|
219
|
+
* "topic-test-1": false,
|
|
220
|
+
* "topic-test-2": false
|
|
221
|
+
* }
|
|
222
|
+
*/
|
|
223
|
+
let consumedTopicPartitions = {};
|
|
224
|
+
this._kafkaConsumer.on(
|
|
225
|
+
this._kafkaConsumer.events.GROUP_JOIN,
|
|
226
|
+
async ({ payload }) => {
|
|
227
|
+
const { memberAssignment } = payload;
|
|
228
|
+
|
|
229
|
+
consumedTopicPartitions = Object.entries(memberAssignment).reduce(
|
|
230
|
+
(topics, [topic, partitions]) => {
|
|
231
|
+
for (const partition in partitions) {
|
|
232
|
+
this.logger.debug("topic-partition: ", `${topic}-${partition}`);
|
|
233
|
+
topics[`${topic}-${partition}`] = false;
|
|
234
|
+
}
|
|
235
|
+
return topics;
|
|
236
|
+
},
|
|
237
|
+
{}
|
|
238
|
+
);
|
|
239
|
+
}
|
|
240
|
+
);
|
|
241
|
+
|
|
242
|
+
/*
|
|
243
|
+
* This is extremely unergonomic, but if we are currently caught up to the head
|
|
244
|
+
* of all topic-partitions, we won't actually get any batches, which means we'll
|
|
245
|
+
* never find out that we are actually caught up. So as a workaround, what we can do
|
|
246
|
+
* is to check in `FETCH_START` if we have previously made a fetch without
|
|
247
|
+
* processing any batches in between. If so, it means that we received empty
|
|
248
|
+
* fetch responses, meaning there was no more data to fetch.
|
|
249
|
+
*
|
|
250
|
+
* We need to initially set this to true, or we would immediately exit.
|
|
251
|
+
*/
|
|
252
|
+
let processedBatch = true;
|
|
253
|
+
this._kafkaConsumer.on(this._kafkaConsumer.events.FETCH_START, async () => {
|
|
254
|
+
if (processedBatch === false) {
|
|
255
|
+
await this._kafkaConsumer.disconnect();
|
|
256
|
+
process.exit(0);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
processedBatch = false;
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
/*
|
|
263
|
+
* Now whenever we have finished processing a batch, we'll update `consumedTopicPartitions`
|
|
264
|
+
* and exit if all topic-partitions have been consumed,
|
|
265
|
+
*/
|
|
266
|
+
this._kafkaConsumer.on(
|
|
267
|
+
this._kafkaConsumer.events.END_BATCH_PROCESS,
|
|
268
|
+
async ({ payload }) => {
|
|
269
|
+
const { topic, partition, offsetLag } = payload;
|
|
270
|
+
|
|
271
|
+
consumedTopicPartitions[`${topic}-${partition}`] = offsetLag === "0";
|
|
272
|
+
|
|
273
|
+
if (
|
|
274
|
+
Object.values(consumedTopicPartitions).every((consumed) =>
|
|
275
|
+
Boolean(consumed)
|
|
276
|
+
)
|
|
277
|
+
) {
|
|
278
|
+
await this._kafkaConsumer.disconnect();
|
|
279
|
+
process.exit(0);
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
processedBatch = true;
|
|
283
|
+
}
|
|
284
|
+
);
|
|
285
|
+
|
|
286
|
+
// Graceful shutdown
|
|
287
|
+
const errorTypes = ["unhandledRejection", "uncaughtException"];
|
|
288
|
+
const signalTraps: NodeJS.Signals[] = ["SIGTERM", "SIGINT", "SIGUSR2"];
|
|
289
|
+
|
|
290
|
+
errorTypes.map((type) => {
|
|
291
|
+
process.on(type, async (e) => {
|
|
292
|
+
try {
|
|
293
|
+
this.logger.debug(`process.on ${type}`);
|
|
294
|
+
this.logger.error(e);
|
|
295
|
+
await this.disconnect();
|
|
296
|
+
process.exit(0);
|
|
297
|
+
} catch (_) {
|
|
298
|
+
process.exit(1);
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
});
|
|
302
|
+
|
|
303
|
+
signalTraps.map((type) => {
|
|
304
|
+
process.once(type, async () => {
|
|
305
|
+
try {
|
|
306
|
+
await this.disconnect();
|
|
307
|
+
} finally {
|
|
308
|
+
process.kill(process.pid, type);
|
|
309
|
+
}
|
|
310
|
+
});
|
|
311
|
+
});
|
|
312
|
+
}
|
|
168
313
|
}
|