cdm-kafkaconnector 1.1.3 → 2.0.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.
@@ -1,42 +1,82 @@
1
- import {ConsumerGroupOptions, KafkaClient, KafkaClientOptions, ProducerOptions} from "kafka-node";
2
- import {KafkaProducer} from "./kafkaProducer";
3
- import {KafkaConsumer} from "./kafkaConsumer";
1
+ import { KafkaProducer } from "./kafkaProducer";
2
+ import { KafkaConsumer, KafkaMessageCallback } from "./kafkaConsumer";
4
3
 
4
+ export interface KafkaBusinessLogicOptions {
5
+ clientId?: string;
6
+ brokers?: string[];
7
+ }
8
+
9
+ export interface KafkaConsumerSetupOptions {
10
+ groupId?: string;
11
+ }
5
12
 
6
13
  export class KafkaBusinessLogic {
7
- static kafkaOptions: KafkaClientOptions;
8
- static producer: KafkaProducer;
9
- static async init(kafkaOptions?: KafkaClientOptions): Promise<void> {
10
- this.kafkaOptions = {
11
- kafkaHost: kafkaOptions?.kafkaHost ?? 'localhost:9092',
12
- ...kafkaOptions
13
- };
14
- console.log(this.kafkaOptions, kafkaOptions)
14
+ private static brokers: string[] = ["kafka:9092"];
15
+ private static clientId = "app-client";
16
+
17
+ private static producer?: KafkaProducer;
18
+ private static consumers: KafkaConsumer[] = [];
19
+
20
+ static async init(options?: KafkaBusinessLogicOptions): Promise<void> {
21
+ this.brokers = options?.brokers ?? ["kafka:9092"];
22
+ this.clientId = options?.clientId ?? "app-client";
23
+
24
+ console.log("KafkaBusinessLogic initialized", {
25
+ brokers: this.brokers,
26
+ clientId: this.clientId,
27
+ });
15
28
  }
16
29
 
17
- static async setKafkaProducer(callback?: (error: any, data: any) => void, producerOption?: ProducerOptions): Promise<void> {
18
- this.producer = new KafkaProducer(new KafkaClient(this.kafkaOptions), producerOption, callback);
30
+ static async setKafkaProducer(
31
+ callback?: (error?: any, data?: any) => void
32
+ ): Promise<void> {
33
+ this.producer = new KafkaProducer(
34
+ this.brokers,
35
+ this.clientId,
36
+ callback
37
+ );
38
+
39
+ await this.producer.connect();
19
40
  }
20
41
 
21
- static async produceMessage(payloads: any, topic: string): Promise<void> {
42
+ static async produceMessage(payload: any, topic: string): Promise<void> {
22
43
  if (!this.producer) {
23
- throw new Error('Kafka Producer not initialized');
44
+ throw new Error("Kafka Producer not initialized");
24
45
  }
25
- this.producer.produceMessage(payloads, topic);
26
- }
27
46
 
28
- static async setKafkaConsumer(topic: string, callback: (message: any, done: Function) => void, consumerOption?: ConsumerGroupOptions): Promise<void> {
29
- consumerOption = {
30
- kafkaHost: this.kafkaOptions.kafkaHost,
31
- autoCommit: consumerOption?.autoCommit ?? false,
32
- groupId: consumerOption?.groupId ?? 'groupId1',
33
- fromOffset: consumerOption?.fromOffset ?? 'latest',
34
- ...consumerOption,
35
- };
36
- new KafkaConsumer(topic, callback, consumerOption);
47
+ await this.producer.produceMessage(payload, topic);
37
48
  }
38
49
 
39
50
  static async closeProducer(): Promise<void> {
40
- this.producer.close();
51
+ if (this.producer) {
52
+ await this.producer.close();
53
+ this.producer = undefined;
54
+ }
55
+ }
56
+
57
+ static async setKafkaConsumer(
58
+ topic: string | string[],
59
+ callback: KafkaMessageCallback,
60
+ options?: KafkaConsumerSetupOptions
61
+ ): Promise<void> {
62
+ const consumer = new KafkaConsumer(
63
+ topic,
64
+ callback,
65
+ {
66
+ clientId: this.clientId,
67
+ brokers: this.brokers,
68
+ groupId: options?.groupId ?? "groupId1",
69
+ }
70
+ );
71
+
72
+ await consumer.start();
73
+ this.consumers.push(consumer);
74
+ }
75
+
76
+ static async closeConsumers(): Promise<void> {
77
+ for (const consumer of this.consumers) {
78
+ await consumer.close();
79
+ }
80
+ this.consumers = [];
41
81
  }
42
82
  }
@@ -1,56 +1,80 @@
1
- import {ConsumerGroup, ConsumerGroupOptions} from "kafka-node";
1
+ import { Kafka, Consumer, EachMessagePayload } from 'kafkajs';
2
2
 
3
+ export type KafkaMessageCallback = (
4
+ message: EachMessagePayload,
5
+ done: () => Promise<void>
6
+ ) => Promise<void> | void;
7
+
8
+ export interface KafkaConsumerOptions {
9
+ clientId: string;
10
+ brokers: string[];
11
+ groupId: string;
12
+ }
3
13
 
4
14
  export class KafkaConsumer {
5
- consumer: ConsumerGroup;
6
- topic: string | string[];
7
- callback: Function;
15
+ private consumer: Consumer;
16
+ private topic: string | string[];
17
+ private callback: KafkaMessageCallback;
8
18
 
9
- constructor(topic: string | string[], callback: Function, consumerOptions: ConsumerGroupOptions) {
10
- this.callback = callback ?? this.defaultCallBack;
11
- this.consumer = new ConsumerGroup(consumerOptions, topic);
19
+ constructor(
20
+ topic: string | string[],
21
+ callback: KafkaMessageCallback,
22
+ options: KafkaConsumerOptions
23
+ ) {
12
24
  this.topic = topic;
13
- this.initConsumerEvents();
14
- }
15
-
16
- defaultCallBack(message: string, done: Function): void {
17
- done();
18
- }
19
-
20
- private initConsumerEvents(): void {
21
- this.consumer.on('message', (message: any): void => {
22
- console.log(`Message arrived from topic [${this.topic}] with offset [${message.offset}]`);
23
- this.callback(message, () => {
24
- const offset = {
25
- topic: message.topic,
26
- partition: message.partition,
27
- offset: message.offset + 1,
28
- metadata: 'updated offset'
29
- };
30
- this.consumer.sendOffsetCommitRequest([offset], (err: any, data: any) => {
31
- if (err) {
32
- this.logError(err);
33
- }
34
- });
35
- });
36
- });
25
+ this.callback = callback ?? this.defaultCallback;
37
26
 
38
- this.consumer.on('connect', ()=>{
39
- console.log('Consumer connected');
27
+ const kafka = new Kafka({
28
+ clientId: options.clientId,
29
+ brokers: options.brokers,
40
30
  });
41
31
 
42
- this.consumer.on('error', (error: any): void => {
43
- this.logError(JSON.stringify(error));
32
+ this.consumer = kafka.consumer({
33
+ groupId: options.groupId,
34
+ allowAutoTopicCreation: false,
44
35
  });
45
36
  }
46
37
 
47
- private logError(error: any): void {
48
- console.error(`ERROR: kafka consumer failed to consume message from topic [${this.topic}]. ${error}`);
38
+ private async defaultCallback(
39
+ _payload: EachMessagePayload,
40
+ done: () => Promise<void>
41
+ ): Promise<void> {
42
+ await done();
49
43
  }
50
44
 
51
- close(): void {
52
- this.consumer.close(true, () => {
53
- console.log(`Consumer for topic [${this.topic}] closed`);
45
+ async start(): Promise<void> {
46
+ await this.consumer.connect();
47
+ console.log('Consumer connected');
48
+
49
+ const topics = Array.isArray(this.topic) ? this.topic : [this.topic];
50
+ for (const t of topics) {
51
+ await this.consumer.subscribe({ topic: t, fromBeginning: false });
52
+ }
53
+
54
+ await this.consumer.run({
55
+ autoCommit: false,
56
+ eachMessage: async (payload) => {
57
+ const { topic, partition, message } = payload;
58
+
59
+ console.log(
60
+ `Message arrived from topic [${topic}] with offset [${message.offset}]`
61
+ );
62
+
63
+ await this.callback(payload, async () => {
64
+ await this.consumer.commitOffsets([
65
+ {
66
+ topic,
67
+ partition,
68
+ offset: (Number(message.offset) + 1).toString(),
69
+ },
70
+ ]);
71
+ });
72
+ },
54
73
  });
55
74
  }
56
- }
75
+
76
+ async close(): Promise<void> {
77
+ await this.consumer.disconnect();
78
+ console.log(`Consumer for topic [${this.topic}] closed`);
79
+ }
80
+ }
@@ -1,35 +1,54 @@
1
- import {KafkaClient, Producer, ProducerOptions} from "kafka-node";
1
+ import { Kafka, Producer, logLevel } from "kafkajs";
2
2
 
3
3
  export class KafkaProducer {
4
- client: KafkaClient;
5
- producer: Producer;
6
- callback: (error: any, data: any) => void;
4
+ private kafka: Kafka;
5
+ private producer: Producer;
6
+ private readonly callback: (error?: any, data?: any) => void;
7
7
 
8
- constructor(client: KafkaClient, producerOptions?: ProducerOptions, callback?: (error?: any, data?: any) => void) {
9
- this.client = client;
10
- this.producer = new Producer(client, producerOptions);
8
+ constructor(
9
+ brokers: string[],
10
+ clientId: string,
11
+ callback?: (error?: any, data?: any) => void
12
+ ) {
13
+ this.kafka = new Kafka({
14
+ clientId,
15
+ brokers,
16
+ logLevel: logLevel.ERROR,
17
+ });
18
+
19
+ this.producer = this.kafka.producer();
11
20
  this.callback = callback ?? this.defaultCallback;
12
- this.initProducerEvents();
13
21
  }
14
22
 
15
- private defaultCallback(error: any, data: any): void {
16
-
23
+ private defaultCallback(error?: any, data?: any): void {
24
+ if (error) {
25
+ console.error("Kafka producer error:", error);
26
+ }
17
27
  }
18
28
 
19
- private initProducerEvents(): void {
20
- this.producer.on('ready', () => {
21
- console.log(`Kafka producer is ready`);
22
- });
23
- this.producer.on('error', (error: any): void => {
24
- console.error(`ERROR: kafka producer failed to send message. ${JSON.stringify(error)}`);
25
- });
29
+ public async connect(): Promise<void> {
30
+ await this.producer.connect();
31
+ console.log("Kafka producer is ready");
26
32
  }
27
33
 
28
- public produceMessage(payloads: any, topic: string): void {
29
- this.producer.send([{topic: topic , messages: JSON.stringify(payloads)}], this.callback);
34
+ public async produceMessage(payload: any, topic: string): Promise<void> {
35
+ try {
36
+ const result = await this.producer.send({
37
+ topic,
38
+ messages: [
39
+ {
40
+ value: JSON.stringify(payload),
41
+ },
42
+ ],
43
+ });
44
+
45
+ this.callback(undefined, result);
46
+ } catch (error) {
47
+ this.callback(error);
48
+ }
30
49
  }
31
50
 
32
- public close(): void {
33
- this.producer.close();
51
+ public async close(): Promise<void> {
52
+ await this.producer.disconnect();
34
53
  }
35
54
  }
Binary file
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.KafkaBusinessLogic = void 0;
13
+ const kafkaProducer_1 = require("./kafkaProducer");
14
+ const kafkaConsumer_1 = require("./kafkaConsumer");
15
+ class KafkaBusinessLogic {
16
+ static init(options) {
17
+ return __awaiter(this, void 0, void 0, function* () {
18
+ var _a, _b;
19
+ this.brokers = (_a = options === null || options === void 0 ? void 0 : options.brokers) !== null && _a !== void 0 ? _a : ["kafka:9092"];
20
+ this.clientId = (_b = options === null || options === void 0 ? void 0 : options.clientId) !== null && _b !== void 0 ? _b : "app-client";
21
+ console.log("KafkaBusinessLogic initialized", {
22
+ brokers: this.brokers,
23
+ clientId: this.clientId,
24
+ });
25
+ });
26
+ }
27
+ static setKafkaProducer(callback) {
28
+ return __awaiter(this, void 0, void 0, function* () {
29
+ this.producer = new kafkaProducer_1.KafkaProducer(this.brokers, this.clientId, callback);
30
+ yield this.producer.connect();
31
+ });
32
+ }
33
+ static produceMessage(payload, topic) {
34
+ return __awaiter(this, void 0, void 0, function* () {
35
+ if (!this.producer) {
36
+ throw new Error("Kafka Producer not initialized");
37
+ }
38
+ yield this.producer.produceMessage(payload, topic);
39
+ });
40
+ }
41
+ static closeProducer() {
42
+ return __awaiter(this, void 0, void 0, function* () {
43
+ if (this.producer) {
44
+ yield this.producer.close();
45
+ this.producer = undefined;
46
+ }
47
+ });
48
+ }
49
+ static setKafkaConsumer(topic, callback, options) {
50
+ return __awaiter(this, void 0, void 0, function* () {
51
+ var _a;
52
+ const consumer = new kafkaConsumer_1.KafkaConsumer(topic, callback, {
53
+ clientId: this.clientId,
54
+ brokers: this.brokers,
55
+ groupId: (_a = options === null || options === void 0 ? void 0 : options.groupId) !== null && _a !== void 0 ? _a : "groupId1",
56
+ });
57
+ yield consumer.start();
58
+ this.consumers.push(consumer);
59
+ });
60
+ }
61
+ static closeConsumers() {
62
+ return __awaiter(this, void 0, void 0, function* () {
63
+ for (const consumer of this.consumers) {
64
+ yield consumer.close();
65
+ }
66
+ this.consumers = [];
67
+ });
68
+ }
69
+ }
70
+ exports.KafkaBusinessLogic = KafkaBusinessLogic;
71
+ KafkaBusinessLogic.brokers = ["kafka:9092"];
72
+ KafkaBusinessLogic.clientId = "app-client";
73
+ KafkaBusinessLogic.consumers = [];
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.KafkaConsumer = void 0;
13
+ const kafkajs_1 = require("kafkajs");
14
+ class KafkaConsumer {
15
+ constructor(topic, callback, options) {
16
+ this.topic = topic;
17
+ this.callback = callback !== null && callback !== void 0 ? callback : this.defaultCallback;
18
+ const kafka = new kafkajs_1.Kafka({
19
+ clientId: options.clientId,
20
+ brokers: options.brokers,
21
+ });
22
+ this.consumer = kafka.consumer({
23
+ groupId: options.groupId,
24
+ allowAutoTopicCreation: false,
25
+ });
26
+ }
27
+ defaultCallback(_payload, done) {
28
+ return __awaiter(this, void 0, void 0, function* () {
29
+ yield done();
30
+ });
31
+ }
32
+ start() {
33
+ return __awaiter(this, void 0, void 0, function* () {
34
+ yield this.consumer.connect();
35
+ console.log('Consumer connected');
36
+ const topics = Array.isArray(this.topic) ? this.topic : [this.topic];
37
+ for (const t of topics) {
38
+ yield this.consumer.subscribe({ topic: t, fromBeginning: false });
39
+ }
40
+ yield this.consumer.run({
41
+ autoCommit: false,
42
+ eachMessage: (payload) => __awaiter(this, void 0, void 0, function* () {
43
+ const { topic, partition, message } = payload;
44
+ console.log(`Message arrived from topic [${topic}] with offset [${message.offset}]`);
45
+ yield this.callback(payload, () => __awaiter(this, void 0, void 0, function* () {
46
+ yield this.consumer.commitOffsets([
47
+ {
48
+ topic,
49
+ partition,
50
+ offset: (Number(message.offset) + 1).toString(),
51
+ },
52
+ ]);
53
+ }));
54
+ }),
55
+ });
56
+ });
57
+ }
58
+ close() {
59
+ return __awaiter(this, void 0, void 0, function* () {
60
+ yield this.consumer.disconnect();
61
+ console.log(`Consumer for topic [${this.topic}] closed`);
62
+ });
63
+ }
64
+ }
65
+ exports.KafkaConsumer = KafkaConsumer;
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.KafkaProducer = void 0;
13
+ const kafkajs_1 = require("kafkajs");
14
+ class KafkaProducer {
15
+ constructor(brokers, clientId, callback) {
16
+ this.kafka = new kafkajs_1.Kafka({
17
+ clientId,
18
+ brokers,
19
+ logLevel: kafkajs_1.logLevel.ERROR,
20
+ });
21
+ this.producer = this.kafka.producer();
22
+ this.callback = callback !== null && callback !== void 0 ? callback : this.defaultCallback;
23
+ }
24
+ defaultCallback(error, data) {
25
+ if (error) {
26
+ console.error("Kafka producer error:", error);
27
+ }
28
+ }
29
+ connect() {
30
+ return __awaiter(this, void 0, void 0, function* () {
31
+ yield this.producer.connect();
32
+ console.log("Kafka producer is ready");
33
+ });
34
+ }
35
+ produceMessage(payload, topic) {
36
+ return __awaiter(this, void 0, void 0, function* () {
37
+ try {
38
+ const result = yield this.producer.send({
39
+ topic,
40
+ messages: [
41
+ {
42
+ value: JSON.stringify(payload),
43
+ },
44
+ ],
45
+ });
46
+ this.callback(undefined, result);
47
+ }
48
+ catch (error) {
49
+ this.callback(error);
50
+ }
51
+ });
52
+ }
53
+ close() {
54
+ return __awaiter(this, void 0, void 0, function* () {
55
+ yield this.producer.disconnect();
56
+ });
57
+ }
58
+ }
59
+ exports.KafkaProducer = KafkaProducer;
package/index.ts CHANGED
@@ -1,2 +1,11 @@
1
- export {KafkaBusinessLogic} from "./businessLogic/kafkaBl";
2
- export {KafkaClientOptions, ProducerOptions, ConsumerGroupOptions, ConsumerOptions} from "kafka-node";
1
+ export { KafkaBusinessLogic } from "./businessLogic/kafkaBl";
2
+
3
+ export type {
4
+ KafkaBusinessLogicOptions,
5
+ KafkaConsumerSetupOptions,
6
+ } from "./businessLogic/kafkaBl";
7
+
8
+ export type {
9
+ KafkaMessageCallback,
10
+ KafkaConsumerOptions,
11
+ } from "./businessLogic/kafkaConsumer";
package/packAndSend.js ADDED
@@ -0,0 +1,53 @@
1
+ const { execSync } = require('child_process');
2
+ const fs = require('fs');
3
+ const path = require('path');
4
+
5
+ // Run TypeScript compilation and npm pack
6
+ execSync('tsc && npm pack', { stdio: 'inherit' });
7
+
8
+ // Get the generated .tgz file name and the new version from package.json
9
+ const packageJson = require('./package.json');
10
+ const packageName = `${packageJson.name}-${packageJson.version}.tgz`;
11
+ const newVersion = packageJson.version;
12
+ const servicesDir = '../../services/';
13
+
14
+ // Define target directories (root directories for each service)
15
+ const targetDirs = [
16
+ 'itemService',
17
+ 'userService',
18
+ 'scannerManagerService',
19
+ 'scannerService',
20
+ 'clientUpdater'
21
+ ];
22
+
23
+ // Copy the .tgz file, update package.json, and run npm install for each directory
24
+ targetDirs.forEach(dir => {
25
+ const packagePath = path.join(servicesDir, dir, 'packages', packageName);
26
+
27
+ // Copy the .tgz file to the 'packages' folder within each service
28
+ const packagesDir = path.join(servicesDir, dir, 'packages');
29
+ if (!fs.existsSync(packagesDir)) {
30
+ fs.mkdirSync(packagesDir, { recursive: true });
31
+ }
32
+ fs.copyFileSync(packageName, packagePath);
33
+ console.log(`Copied to ${packagePath}`);
34
+
35
+ // Update the package.json version in the root of the service
36
+ const packageJsonPath = path.join(servicesDir, dir, 'package.json');
37
+ const targetPackageJson = require(packageJsonPath);
38
+
39
+ if (targetPackageJson.dependencies && targetPackageJson.dependencies[packageJson.name]) {
40
+ targetPackageJson.dependencies[packageJson.name] = `file:packages/${packageName}`;
41
+
42
+ // Write the updated package.json back to the file system
43
+ fs.writeFileSync(packageJsonPath, JSON.stringify(targetPackageJson, null, 2));
44
+ console.log(`Updated version in ${packageJsonPath} to ^${newVersion}`);
45
+
46
+ // Run npm install in the service root directory
47
+ execSync('npm install', { stdio: 'inherit', cwd: path.join(servicesDir, dir) });
48
+ console.log(`Ran npm install in ${dir}`);
49
+ } else {
50
+ console.log(`Package ${packageJson.name} not found in dependencies for ${dir}`);
51
+ }
52
+ });
53
+
package/package.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "cdm-kafkaconnector",
3
- "version": "1.1.3",
3
+ "version": "2.0.0",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
7
7
  "test": "echo \"Error: no test specified\" && exit 1",
8
- "pack": "tsc"
8
+ "pack": "tsc && npm pack"
9
9
  },
10
- "author": "Chaim-Dovid-M",
10
+ "author": "",
11
11
  "license": "ISC",
12
12
  "dependencies": {
13
- "kafka-node": "^5.0.0"
13
+ "kafkajs": "^2.2.4"
14
14
  }
15
15
  }
package/tsconfig.json CHANGED
@@ -55,7 +55,7 @@
55
55
  // "sourceMap": true, /* Create source map files for emitted JavaScript files. */
56
56
  // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
57
57
  // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
58
- // "outDir": "./dist", /* Specify an output folder for all emitted files. */
58
+ "outDir": "./dist", /* Specify an output folder for all emitted files. */
59
59
  // "removeComments": true, /* Disable emitting comments. */
60
60
  // "noEmit": true, /* Disable emitting files from a compilation. */
61
61
  // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
@@ -1,50 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.KafkaBusinessLogic = void 0;
13
- const kafka_node_1 = require("kafka-node");
14
- const kafkaProducer_1 = require("./kafkaProducer");
15
- const kafkaConsumer_1 = require("./kafkaConsumer");
16
- class KafkaBusinessLogic {
17
- static init(kafkaOptions) {
18
- var _a;
19
- return __awaiter(this, void 0, void 0, function* () {
20
- this.kafkaOptions = Object.assign({ kafkaHost: (_a = kafkaOptions === null || kafkaOptions === void 0 ? void 0 : kafkaOptions.kafkaHost) !== null && _a !== void 0 ? _a : 'localhost:9092' }, kafkaOptions);
21
- console.log(this.kafkaOptions, kafkaOptions);
22
- });
23
- }
24
- static setKafkaProducer(callback, producerOption) {
25
- return __awaiter(this, void 0, void 0, function* () {
26
- this.producer = new kafkaProducer_1.KafkaProducer(new kafka_node_1.KafkaClient(this.kafkaOptions), producerOption, callback);
27
- });
28
- }
29
- static produceMessage(payloads, topic) {
30
- return __awaiter(this, void 0, void 0, function* () {
31
- if (!this.producer) {
32
- throw new Error('Kafka Producer not initialized');
33
- }
34
- this.producer.produceMessage(payloads, topic);
35
- });
36
- }
37
- static setKafkaConsumer(topic, callback, consumerOption) {
38
- var _a, _b, _c;
39
- return __awaiter(this, void 0, void 0, function* () {
40
- consumerOption = Object.assign({ kafkaHost: this.kafkaOptions.kafkaHost, autoCommit: (_a = consumerOption === null || consumerOption === void 0 ? void 0 : consumerOption.autoCommit) !== null && _a !== void 0 ? _a : false, groupId: (_b = consumerOption === null || consumerOption === void 0 ? void 0 : consumerOption.groupId) !== null && _b !== void 0 ? _b : 'groupId1', fromOffset: (_c = consumerOption === null || consumerOption === void 0 ? void 0 : consumerOption.fromOffset) !== null && _c !== void 0 ? _c : 'latest' }, consumerOption);
41
- new kafkaConsumer_1.KafkaConsumer(topic, callback, consumerOption);
42
- });
43
- }
44
- static closeProducer() {
45
- return __awaiter(this, void 0, void 0, function* () {
46
- this.producer.close();
47
- });
48
- }
49
- }
50
- exports.KafkaBusinessLogic = KafkaBusinessLogic;
@@ -1,48 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.KafkaConsumer = void 0;
4
- const kafka_node_1 = require("kafka-node");
5
- class KafkaConsumer {
6
- constructor(topic, callback, consumerOptions) {
7
- this.callback = callback !== null && callback !== void 0 ? callback : this.defaultCallBack;
8
- this.consumer = new kafka_node_1.ConsumerGroup(consumerOptions, topic);
9
- this.topic = topic;
10
- this.initConsumerEvents();
11
- }
12
- defaultCallBack(message, done) {
13
- done();
14
- }
15
- initConsumerEvents() {
16
- this.consumer.on('message', (message) => {
17
- console.log(`Message arrived from topic [${this.topic}] with offset [${message.offset}]`);
18
- this.callback(message, () => {
19
- const offset = {
20
- topic: message.topic,
21
- partition: message.partition,
22
- offset: message.offset + 1,
23
- metadata: 'updated offset'
24
- };
25
- this.consumer.sendOffsetCommitRequest([offset], (err, data) => {
26
- if (err) {
27
- this.logError(err);
28
- }
29
- });
30
- });
31
- });
32
- this.consumer.on('connect', () => {
33
- console.log('Consumer connected');
34
- });
35
- this.consumer.on('error', (error) => {
36
- this.logError(JSON.stringify(error));
37
- });
38
- }
39
- logError(error) {
40
- console.error(`ERROR: kafka consumer failed to consume message from topic [${this.topic}]. ${error}`);
41
- }
42
- close() {
43
- this.consumer.close(true, () => {
44
- console.log(`Consumer for topic [${this.topic}] closed`);
45
- });
46
- }
47
- }
48
- exports.KafkaConsumer = KafkaConsumer;
@@ -1,29 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.KafkaProducer = void 0;
4
- const kafka_node_1 = require("kafka-node");
5
- class KafkaProducer {
6
- constructor(client, producerOptions, callback) {
7
- this.client = client;
8
- this.producer = new kafka_node_1.Producer(client, producerOptions);
9
- this.callback = callback !== null && callback !== void 0 ? callback : this.defaultCallback;
10
- this.initProducerEvents();
11
- }
12
- defaultCallback(error, data) {
13
- }
14
- initProducerEvents() {
15
- this.producer.on('ready', () => {
16
- console.log(`Kafka producer is ready`);
17
- });
18
- this.producer.on('error', (error) => {
19
- console.error(`ERROR: kafka producer failed to send message. ${JSON.stringify(error)}`);
20
- });
21
- }
22
- produceMessage(payloads, topic) {
23
- this.producer.send([{ topic: topic, messages: JSON.stringify(payloads) }], this.callback);
24
- }
25
- close() {
26
- this.producer.close();
27
- }
28
- }
29
- exports.KafkaProducer = KafkaProducer;
File without changes