@loipv/nestjs-kafka 0.0.4 → 0.0.5-beta.1

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/README.md CHANGED
@@ -133,6 +133,108 @@ KafkaModule.forRootAsync({
133
133
  });
134
134
  ```
135
135
 
136
+ ### Multi-Connection (Multiple Kafka Clusters)
137
+
138
+ Connect to multiple Kafka clusters simultaneously:
139
+
140
+ ```typescript
141
+ // Option 1: Multiple forRoot() calls
142
+ @Module({
143
+ imports: [
144
+ // Primary cluster (default connection)
145
+ KafkaModule.forRoot({
146
+ name: 'default', // Optional, 'default' is the default
147
+ clientId: 'my-app',
148
+ brokers: ['primary-kafka:9092'],
149
+ }),
150
+ // Secondary cluster
151
+ KafkaModule.forRoot({
152
+ name: 'analytics',
153
+ clientId: 'my-app-analytics',
154
+ brokers: ['analytics-kafka:9092'],
155
+ }),
156
+ ConsumerModule,
157
+ ],
158
+ })
159
+ export class AppModule {}
160
+
161
+ // Option 2: forRootMultiple() for cleaner setup
162
+ @Module({
163
+ imports: [
164
+ KafkaModule.forRootMultiple([
165
+ {
166
+ name: 'default',
167
+ clientId: 'my-app',
168
+ brokers: ['primary-kafka:9092'],
169
+ },
170
+ {
171
+ name: 'analytics',
172
+ clientId: 'my-app-analytics',
173
+ brokers: ['analytics-kafka:9092'],
174
+ },
175
+ ]),
176
+ ConsumerModule,
177
+ ],
178
+ })
179
+ export class AppModule {}
180
+ ```
181
+
182
+ **Using named connections in Consumer:**
183
+
184
+ ```typescript
185
+ @Injectable()
186
+ export class EventConsumer {
187
+ // Default connection
188
+ @Consumer('orders')
189
+ async handleOrders(message: KafkaMessagePayload) {
190
+ // Uses 'default' connection
191
+ }
192
+
193
+ // Specific connection
194
+ @Consumer('analytics-events', { connection: 'analytics' })
195
+ async handleAnalytics(message: KafkaMessagePayload) {
196
+ // Uses 'analytics' connection
197
+ }
198
+ }
199
+ ```
200
+
201
+ **Using named connections in Producer:**
202
+
203
+ ```typescript
204
+ @Injectable()
205
+ export class EventService {
206
+ constructor(
207
+ // Method 1: Use @InjectKafkaClient decorator
208
+ @InjectKafkaClient() private readonly kafka: KafkaClient,
209
+ @InjectKafkaClient('analytics') private readonly analyticsKafka: ConnectionBoundClient,
210
+ ) {}
211
+
212
+ async sendToDefault() {
213
+ await this.kafka.send('orders', { value: data });
214
+ }
215
+
216
+ async sendToAnalytics() {
217
+ await this.analyticsKafka.send('events', { value: data });
218
+ }
219
+ }
220
+
221
+ // Method 2: Use forConnection() fluent API
222
+ @Injectable()
223
+ export class AnotherService {
224
+ constructor(private readonly kafka: KafkaClient) {}
225
+
226
+ async sendToAnalytics() {
227
+ const analyticsClient = this.kafka.forConnection('analytics');
228
+ await analyticsClient.send('events', { value: data });
229
+ }
230
+
231
+ async sendWithOptions() {
232
+ // Or specify connection in options
233
+ await this.kafka.send('orders', { value: data }, { connection: 'analytics' });
234
+ }
235
+ }
236
+ ```
237
+
136
238
  ## Consumer Options
137
239
 
138
240
  ### Basic Consumer
@@ -291,6 +393,9 @@ async handleOrders(message: KafkaMessagePayload) {
291
393
 
292
394
  ```typescript
293
395
  interface ConsumerOptions {
396
+ // Multi-connection
397
+ connection?: string; // Default: 'default'
398
+
294
399
  // Enable/disable consumer
295
400
  disabled?: boolean; // Default: false (skip registration when true)
296
401
 
@@ -1,2 +1,3 @@
1
1
  export * from './constants';
2
2
  export { Consumer, ConsumerMethodMetadata } from './consumer.decorator';
3
+ export { InjectKafkaClient } from './inject-kafka-client.decorator';
@@ -14,8 +14,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.Consumer = void 0;
17
+ exports.InjectKafkaClient = exports.Consumer = void 0;
18
18
  __exportStar(require("./constants"), exports);
19
19
  var consumer_decorator_1 = require("./consumer.decorator");
20
20
  Object.defineProperty(exports, "Consumer", { enumerable: true, get: function () { return consumer_decorator_1.Consumer; } });
21
+ var inject_kafka_client_decorator_1 = require("./inject-kafka-client.decorator");
22
+ Object.defineProperty(exports, "InjectKafkaClient", { enumerable: true, get: function () { return inject_kafka_client_decorator_1.InjectKafkaClient; } });
21
23
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/decorators/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,2DAAwE;AAA/D,8GAAA,QAAQ,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/decorators/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,2DAAwE;AAA/D,8GAAA,QAAQ,OAAA;AACjB,iFAAoE;AAA3D,kIAAA,iBAAiB,OAAA"}
@@ -0,0 +1 @@
1
+ export declare function InjectKafkaClient(connectionName?: string): ParameterDecorator;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InjectKafkaClient = InjectKafkaClient;
4
+ const common_1 = require("@nestjs/common");
5
+ const interfaces_1 = require("../interfaces");
6
+ function InjectKafkaClient(connectionName = interfaces_1.DEFAULT_KAFKA_CONNECTION) {
7
+ return (0, common_1.Inject)((0, interfaces_1.getKafkaClientToken)(connectionName));
8
+ }
9
+ //# sourceMappingURL=inject-kafka-client.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inject-kafka-client.decorator.js","sourceRoot":"","sources":["../../lib/decorators/inject-kafka-client.decorator.ts"],"names":[],"mappings":";;AAmBA,8CAIC;AAvBD,2CAAwC;AACxC,8CAA8E;AAkB9E,SAAgB,iBAAiB,CAC/B,iBAAyB,qCAAwB;IAEjD,OAAO,IAAA,eAAM,EAAC,IAAA,gCAAmB,EAAC,cAAc,CAAC,CAAC,CAAC;AACrD,CAAC"}
@@ -14,6 +14,7 @@ exports.ConsumerDiscoveryService = void 0;
14
14
  const common_1 = require("@nestjs/common");
15
15
  const core_1 = require("@nestjs/core");
16
16
  const constants_1 = require("../decorators/constants");
17
+ const interfaces_1 = require("../interfaces");
17
18
  let ConsumerDiscoveryService = ConsumerDiscoveryService_1 = class ConsumerDiscoveryService {
18
19
  discoveryService;
19
20
  reflector;
@@ -53,17 +54,20 @@ let ConsumerDiscoveryService = ConsumerDiscoveryService_1 = class ConsumerDiscov
53
54
  this.logger.log(`Skipping disabled consumer: ${metatype.name}.${methodName} for topic: ${metadata.topic}`);
54
55
  continue;
55
56
  }
57
+ const connection = metadata.options.connection || interfaces_1.DEFAULT_KAFKA_CONNECTION;
56
58
  const consumerMetadata = {
57
59
  topic: metadata.topic,
60
+ connection,
58
61
  options: {
59
62
  ...metadata.options,
60
63
  topic: metadata.topic,
64
+ connection,
61
65
  },
62
66
  target: instance,
63
67
  methodName,
64
68
  };
65
69
  this.discoveredConsumers.push(consumerMetadata);
66
- this.logger.log(`Discovered consumer: ${metatype.name}.${methodName} for topic: ${metadata.topic}`);
70
+ this.logger.log(`Discovered consumer: ${metatype.name}.${methodName} for topic: ${metadata.topic} (connection: ${connection})`);
67
71
  }
68
72
  }
69
73
  return this.discoveredConsumers;
@@ -1 +1 @@
1
- {"version":3,"file":"consumer-discovery.service.js","sourceRoot":"","sources":["../../lib/discovery/consumer-discovery.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAkE;AAClE,uCAA4E;AAC5E,uDAAkE;AAK3D,IAAM,wBAAwB,gCAA9B,MAAM,wBAAwB;IAKhB;IACA;IACA;IANF,MAAM,GAAG,IAAI,eAAM,CAAC,0BAAwB,CAAC,IAAI,CAAC,CAAC;IAC5D,mBAAmB,GAAuB,EAAE,CAAC;IAErD,YACmB,gBAAkC,EAClC,SAAoB,EACpB,eAAgC;QAFhC,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,cAAS,GAAT,SAAS,CAAW;QACpB,oBAAe,GAAf,eAAe,CAAiB;IAChD,CAAC;IAEJ,YAAY;QACV,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAED,iBAAiB;QACf,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC,mBAAmB,CAAC;QAClC,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC;QAEvD,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;YAEhC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;YAEvC,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC3B,SAAS;YACX,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAW,CAAC;YAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAEtE,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;gBACrC,MAAM,SAAS,GAAG,SAAS,CAAC,UAAoC,CAAC,CAAC;gBAElE,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE,CAAC;oBACpC,SAAS;gBACX,CAAC;gBAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CACjC,mCAAuB,EACvB,SAAS,CACV,CAAC;gBAEF,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,SAAS;gBACX,CAAC;gBAGD,IAAI,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAC9B,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,+BAA+B,QAAQ,CAAC,IAAI,IAAI,UAAU,eAAe,QAAQ,CAAC,KAAK,EAAE,CAC1F,CAAC;oBACF,SAAS;gBACX,CAAC;gBAED,MAAM,gBAAgB,GAAqB;oBACzC,KAAK,EAAE,QAAQ,CAAC,KAAK;oBACrB,OAAO,EAAE;wBACP,GAAG,QAAQ,CAAC,OAAO;wBACnB,KAAK,EAAE,QAAQ,CAAC,KAAK;qBACtB;oBAED,MAAM,EAAE,QAAQ;oBAChB,UAAU;iBACX,CAAC;gBAEF,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBAChD,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,wBAAwB,QAAQ,CAAC,IAAI,IAAI,UAAU,eAAe,QAAQ,CAAC,KAAK,EAAE,CACnF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;CACF,CAAA;AAhFY,4DAAwB;mCAAxB,wBAAwB;IADpC,IAAA,mBAAU,GAAE;qCAM0B,uBAAgB;QACvB,gBAAS;QACH,sBAAe;GAPxC,wBAAwB,CAgFpC"}
1
+ {"version":3,"file":"consumer-discovery.service.js","sourceRoot":"","sources":["../../lib/discovery/consumer-discovery.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAkE;AAClE,uCAA4E;AAC5E,uDAAkE;AAElE,8CAA2E;AAGpE,IAAM,wBAAwB,gCAA9B,MAAM,wBAAwB;IAKhB;IACA;IACA;IANF,MAAM,GAAG,IAAI,eAAM,CAAC,0BAAwB,CAAC,IAAI,CAAC,CAAC;IAC5D,mBAAmB,GAAuB,EAAE,CAAC;IAErD,YACmB,gBAAkC,EAClC,SAAoB,EACpB,eAAgC;QAFhC,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,cAAS,GAAT,SAAS,CAAW;QACpB,oBAAe,GAAf,eAAe,CAAiB;IAChD,CAAC;IAEJ,YAAY;QACV,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAED,iBAAiB;QACf,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC,mBAAmB,CAAC;QAClC,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC;QAEvD,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;YAEhC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;YAEvC,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC3B,SAAS;YACX,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAW,CAAC;YAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAEtE,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;gBACrC,MAAM,SAAS,GAAG,SAAS,CAAC,UAAoC,CAAC,CAAC;gBAElE,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE,CAAC;oBACpC,SAAS;gBACX,CAAC;gBAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CACjC,mCAAuB,EACvB,SAAS,CACV,CAAC;gBAEF,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,SAAS;gBACX,CAAC;gBAGD,IAAI,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAC9B,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,+BAA+B,QAAQ,CAAC,IAAI,IAAI,UAAU,eAAe,QAAQ,CAAC,KAAK,EAAE,CAC1F,CAAC;oBACF,SAAS;gBACX,CAAC;gBAED,MAAM,UAAU,GACd,QAAQ,CAAC,OAAO,CAAC,UAAU,IAAI,qCAAwB,CAAC;gBAE1D,MAAM,gBAAgB,GAAqB;oBACzC,KAAK,EAAE,QAAQ,CAAC,KAAK;oBACrB,UAAU;oBACV,OAAO,EAAE;wBACP,GAAG,QAAQ,CAAC,OAAO;wBACnB,KAAK,EAAE,QAAQ,CAAC,KAAK;wBACrB,UAAU;qBACX;oBAED,MAAM,EAAE,QAAQ;oBAChB,UAAU;iBACX,CAAC;gBAEF,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBAChD,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,wBAAwB,QAAQ,CAAC,IAAI,IAAI,UAAU,eAAe,QAAQ,CAAC,KAAK,iBAAiB,UAAU,GAAG,CAC/G,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;CACF,CAAA;AArFY,4DAAwB;mCAAxB,wBAAwB;IADpC,IAAA,mBAAU,GAAE;qCAM0B,uBAAgB;QACvB,gBAAS;QACH,sBAAe;GAPxC,wBAAwB,CAqFpC"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export { KafkaModule } from './kafka.module';
2
2
  export { ConsumerModule } from './consumer.module';
3
- export { Consumer } from './decorators';
4
- export { KafkaClient } from './services/kafka-client.service';
3
+ export { Consumer, InjectKafkaClient } from './decorators';
4
+ export { KafkaClient, ConnectionBoundClient, } from './services/kafka-client.service';
5
5
  export { KafkaHealthIndicator } from './health/kafka-health-indicator';
6
6
  export * from './interfaces';
package/dist/index.js CHANGED
@@ -14,15 +14,17 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.KafkaHealthIndicator = exports.KafkaClient = exports.Consumer = exports.ConsumerModule = exports.KafkaModule = void 0;
17
+ exports.KafkaHealthIndicator = exports.ConnectionBoundClient = exports.KafkaClient = exports.InjectKafkaClient = exports.Consumer = exports.ConsumerModule = exports.KafkaModule = void 0;
18
18
  var kafka_module_1 = require("./kafka.module");
19
19
  Object.defineProperty(exports, "KafkaModule", { enumerable: true, get: function () { return kafka_module_1.KafkaModule; } });
20
20
  var consumer_module_1 = require("./consumer.module");
21
21
  Object.defineProperty(exports, "ConsumerModule", { enumerable: true, get: function () { return consumer_module_1.ConsumerModule; } });
22
22
  var decorators_1 = require("./decorators");
23
23
  Object.defineProperty(exports, "Consumer", { enumerable: true, get: function () { return decorators_1.Consumer; } });
24
+ Object.defineProperty(exports, "InjectKafkaClient", { enumerable: true, get: function () { return decorators_1.InjectKafkaClient; } });
24
25
  var kafka_client_service_1 = require("./services/kafka-client.service");
25
26
  Object.defineProperty(exports, "KafkaClient", { enumerable: true, get: function () { return kafka_client_service_1.KafkaClient; } });
27
+ Object.defineProperty(exports, "ConnectionBoundClient", { enumerable: true, get: function () { return kafka_client_service_1.ConnectionBoundClient; } });
26
28
  var kafka_health_indicator_1 = require("./health/kafka-health-indicator");
27
29
  Object.defineProperty(exports, "KafkaHealthIndicator", { enumerable: true, get: function () { return kafka_health_indicator_1.KafkaHealthIndicator; } });
28
30
  __exportStar(require("./interfaces"), exports);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AACpB,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AAGvB,2CAAwC;AAA/B,sGAAA,QAAQ,OAAA;AAGjB,wEAA8D;AAArD,mHAAA,WAAW,OAAA;AAGpB,0EAAuE;AAA9D,8HAAA,oBAAoB,OAAA;AAG7B,+CAA6B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AACpB,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AAGvB,2CAA2D;AAAlD,sGAAA,QAAQ,OAAA;AAAE,+GAAA,iBAAiB,OAAA;AAGpC,wEAGyC;AAFvC,mHAAA,WAAW,OAAA;AACX,6HAAA,qBAAqB,OAAA;AAIvB,0EAAuE;AAA9D,8HAAA,oBAAoB,OAAA;AAG7B,+CAA6B"}
@@ -17,6 +17,7 @@ export interface ConsumerRetryOptions {
17
17
  }
18
18
  export interface ConsumerOptions {
19
19
  topic?: string;
20
+ connection?: string;
20
21
  disabled?: boolean;
21
22
  deserialize?: boolean;
22
23
  groupId?: string;
@@ -42,6 +43,7 @@ export interface ConsumerOptions {
42
43
  }
43
44
  export interface ConsumerMetadata {
44
45
  topic: string;
46
+ connection: string;
45
47
  options: ConsumerOptions;
46
48
  target: any;
47
49
  methodName: string;
@@ -17,7 +17,9 @@ export interface ProducerConfig {
17
17
  transactionTimeout?: number;
18
18
  maxInFlightRequests?: number;
19
19
  }
20
+ export declare const DEFAULT_KAFKA_CONNECTION: string;
20
21
  export interface KafkaModuleOptions {
22
+ name?: string;
21
23
  clientId: string;
22
24
  brokers: string[] | (() => string[] | Promise<string[]>);
23
25
  ssl?: boolean | object;
@@ -31,6 +33,7 @@ export interface KafkaModuleOptions {
31
33
  logLevel?: 'NOTHING' | 'ERROR' | 'WARN' | 'INFO' | 'DEBUG';
32
34
  }
33
35
  export interface KafkaModuleAsyncOptions extends Pick<ModuleMetadata, 'imports'> {
36
+ name?: string;
34
37
  useFactory?: (...args: any[]) => Promise<KafkaModuleOptions> | KafkaModuleOptions;
35
38
  inject?: any[];
36
39
  useClass?: Type<KafkaOptionsFactory>;
@@ -41,3 +44,6 @@ export interface KafkaOptionsFactory {
41
44
  createKafkaOptions(): Promise<KafkaModuleOptions> | KafkaModuleOptions;
42
45
  }
43
46
  export declare const KAFKA_MODULE_OPTIONS: unique symbol;
47
+ export declare function getKafkaOptionsToken(name?: string): string;
48
+ export declare function getKafkaCoreToken(name?: string): string;
49
+ export declare function getKafkaClientToken(name?: string): string;
@@ -1,5 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.KAFKA_MODULE_OPTIONS = void 0;
3
+ exports.KAFKA_MODULE_OPTIONS = exports.DEFAULT_KAFKA_CONNECTION = void 0;
4
+ exports.getKafkaOptionsToken = getKafkaOptionsToken;
5
+ exports.getKafkaCoreToken = getKafkaCoreToken;
6
+ exports.getKafkaClientToken = getKafkaClientToken;
7
+ exports.DEFAULT_KAFKA_CONNECTION = 'default';
4
8
  exports.KAFKA_MODULE_OPTIONS = Symbol('KAFKA_MODULE_OPTIONS');
9
+ function getKafkaOptionsToken(name) {
10
+ return `KAFKA_OPTIONS_${name || exports.DEFAULT_KAFKA_CONNECTION}`;
11
+ }
12
+ function getKafkaCoreToken(name) {
13
+ return `KAFKA_CORE_${name || exports.DEFAULT_KAFKA_CONNECTION}`;
14
+ }
15
+ function getKafkaClientToken(name) {
16
+ return `KAFKA_CLIENT_${name || exports.DEFAULT_KAFKA_CONNECTION}`;
17
+ }
5
18
  //# sourceMappingURL=kafka-module-options.interface.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"kafka-module-options.interface.js","sourceRoot":"","sources":["../../lib/interfaces/kafka-module-options.interface.ts"],"names":[],"mappings":";;;AA2Da,QAAA,oBAAoB,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC"}
1
+ {"version":3,"file":"kafka-module-options.interface.js","sourceRoot":"","sources":["../../lib/interfaces/kafka-module-options.interface.ts"],"names":[],"mappings":";;;AAoEA,oDAEC;AAGD,8CAEC;AAGD,kDAEC;AA1DY,QAAA,wBAAwB,GAAW,SAAS,CAAC;AA2C7C,QAAA,oBAAoB,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC;AAGnE,SAAgB,oBAAoB,CAAC,IAAa;IAChD,OAAO,iBAAiB,IAAI,IAAI,gCAAwB,EAAE,CAAC;AAC7D,CAAC;AAGD,SAAgB,iBAAiB,CAAC,IAAa;IAC7C,OAAO,cAAc,IAAI,IAAI,gCAAwB,EAAE,CAAC;AAC1D,CAAC;AAGD,SAAgB,mBAAmB,CAAC,IAAa;IAC/C,OAAO,gBAAgB,IAAI,IAAI,gCAAwB,EAAE,CAAC;AAC5D,CAAC"}
@@ -1,7 +1,14 @@
1
- import { DynamicModule } from '@nestjs/common';
1
+ import { DynamicModule, OnModuleInit } from '@nestjs/common';
2
2
  import { KafkaModuleOptions, KafkaModuleAsyncOptions } from './interfaces';
3
- export declare class KafkaModule {
3
+ import { KafkaCoreService } from './services/kafka-core.service';
4
+ export declare class KafkaModule implements OnModuleInit {
5
+ private readonly kafkaCore;
6
+ private readonly connectionNames?;
7
+ private static isFirstModule;
8
+ constructor(kafkaCore: KafkaCoreService, connectionNames?: string[] | undefined);
9
+ onModuleInit(): void;
4
10
  static forRoot(options: KafkaModuleOptions): DynamicModule;
11
+ static forRootMultiple(optionsArray: KafkaModuleOptions[]): DynamicModule;
5
12
  static forRootAsync(options: KafkaModuleAsyncOptions): DynamicModule;
6
13
  private static createAsyncProviders;
7
14
  }
@@ -5,6 +5,12 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
5
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
6
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
7
  };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
8
14
  var KafkaModule_1;
9
15
  Object.defineProperty(exports, "__esModule", { value: true });
10
16
  exports.KafkaModule = void 0;
@@ -21,66 +27,178 @@ const pressure_manager_service_1 = require("./services/pressure-manager.service"
21
27
  const dlq_service_1 = require("./services/dlq.service");
22
28
  const kafka_health_indicator_1 = require("./health/kafka-health-indicator");
23
29
  const terminus_1 = require("@nestjs/terminus");
24
- let KafkaModule = KafkaModule_1 = class KafkaModule {
30
+ const KAFKA_CONNECTION_NAMES = Symbol('KAFKA_CONNECTION_NAMES');
31
+ let KafkaModule = class KafkaModule {
32
+ static { KafkaModule_1 = this; }
33
+ kafkaCore;
34
+ connectionNames;
35
+ static isFirstModule = true;
36
+ constructor(kafkaCore, connectionNames) {
37
+ this.kafkaCore = kafkaCore;
38
+ this.connectionNames = connectionNames;
39
+ }
40
+ onModuleInit() {
41
+ }
25
42
  static forRoot(options) {
26
- const optionsProvider = {
27
- provide: interfaces_1.KAFKA_MODULE_OPTIONS,
28
- useValue: options,
29
- };
43
+ const connectionName = options.name || interfaces_1.DEFAULT_KAFKA_CONNECTION;
44
+ const optionsToken = (0, interfaces_1.getKafkaOptionsToken)(connectionName);
45
+ const clientToken = (0, interfaces_1.getKafkaClientToken)(connectionName);
46
+ const providers = [
47
+ {
48
+ provide: optionsToken,
49
+ useValue: options,
50
+ },
51
+ {
52
+ provide: `KAFKA_INIT_${connectionName}`,
53
+ useFactory: (kafkaCore) => {
54
+ kafkaCore.registerConnection(options);
55
+ return true;
56
+ },
57
+ inject: [kafka_core_service_1.KafkaCoreService],
58
+ },
59
+ {
60
+ provide: clientToken,
61
+ useFactory: (kafkaClient) => {
62
+ if (connectionName === interfaces_1.DEFAULT_KAFKA_CONNECTION) {
63
+ return kafkaClient;
64
+ }
65
+ return kafkaClient.forConnection(connectionName);
66
+ },
67
+ inject: [kafka_client_service_1.KafkaClient],
68
+ },
69
+ ];
70
+ if (this.isFirstModule) {
71
+ this.isFirstModule = false;
72
+ providers.push({
73
+ provide: interfaces_1.KAFKA_MODULE_OPTIONS,
74
+ useValue: options,
75
+ }, kafka_core_service_1.KafkaCoreService, kafka_client_service_1.KafkaClient, consumer_discovery_service_1.ConsumerDiscoveryService, consumer_registry_service_1.ConsumerRegistryService, batch_processor_service_1.BatchProcessorService, idempotency_service_1.IdempotencyService, pressure_manager_service_1.PressureManagerService, dlq_service_1.DlqService, kafka_health_indicator_1.KafkaHealthIndicator);
76
+ }
30
77
  return {
31
78
  module: KafkaModule_1,
32
79
  imports: [core_1.DiscoveryModule, terminus_1.TerminusModule],
33
- providers: [
34
- optionsProvider,
35
- kafka_core_service_1.KafkaCoreService,
36
- kafka_client_service_1.KafkaClient,
37
- consumer_discovery_service_1.ConsumerDiscoveryService,
38
- consumer_registry_service_1.ConsumerRegistryService,
39
- batch_processor_service_1.BatchProcessorService,
40
- idempotency_service_1.IdempotencyService,
41
- pressure_manager_service_1.PressureManagerService,
42
- dlq_service_1.DlqService,
43
- kafka_health_indicator_1.KafkaHealthIndicator,
44
- ],
80
+ providers,
45
81
  exports: [
82
+ optionsToken,
83
+ clientToken,
84
+ kafka_core_service_1.KafkaCoreService,
46
85
  kafka_client_service_1.KafkaClient,
47
86
  kafka_health_indicator_1.KafkaHealthIndicator,
48
87
  consumer_discovery_service_1.ConsumerDiscoveryService,
49
88
  consumer_registry_service_1.ConsumerRegistryService,
50
- interfaces_1.KAFKA_MODULE_OPTIONS,
51
89
  ],
52
90
  };
53
91
  }
92
+ static forRootMultiple(optionsArray) {
93
+ const providers = [];
94
+ const exports = [
95
+ kafka_core_service_1.KafkaCoreService,
96
+ kafka_client_service_1.KafkaClient,
97
+ kafka_health_indicator_1.KafkaHealthIndicator,
98
+ consumer_discovery_service_1.ConsumerDiscoveryService,
99
+ consumer_registry_service_1.ConsumerRegistryService,
100
+ ];
101
+ for (const options of optionsArray) {
102
+ const connectionName = options.name || interfaces_1.DEFAULT_KAFKA_CONNECTION;
103
+ const optionsToken = (0, interfaces_1.getKafkaOptionsToken)(connectionName);
104
+ const clientToken = (0, interfaces_1.getKafkaClientToken)(connectionName);
105
+ providers.push({
106
+ provide: optionsToken,
107
+ useValue: options,
108
+ }, {
109
+ provide: `KAFKA_INIT_${connectionName}`,
110
+ useFactory: (kafkaCore) => {
111
+ kafkaCore.registerConnection(options);
112
+ return true;
113
+ },
114
+ inject: [kafka_core_service_1.KafkaCoreService],
115
+ }, {
116
+ provide: clientToken,
117
+ useFactory: (kafkaClient) => {
118
+ if (connectionName === interfaces_1.DEFAULT_KAFKA_CONNECTION) {
119
+ return kafkaClient;
120
+ }
121
+ return kafkaClient.forConnection(connectionName);
122
+ },
123
+ inject: [kafka_client_service_1.KafkaClient],
124
+ });
125
+ exports.push(optionsToken);
126
+ exports.push(clientToken);
127
+ }
128
+ const defaultOptions = optionsArray[0];
129
+ providers.push({
130
+ provide: interfaces_1.KAFKA_MODULE_OPTIONS,
131
+ useValue: defaultOptions,
132
+ }, {
133
+ provide: KAFKA_CONNECTION_NAMES,
134
+ useValue: optionsArray.map((o) => o.name || interfaces_1.DEFAULT_KAFKA_CONNECTION),
135
+ }, kafka_core_service_1.KafkaCoreService, kafka_client_service_1.KafkaClient, consumer_discovery_service_1.ConsumerDiscoveryService, consumer_registry_service_1.ConsumerRegistryService, batch_processor_service_1.BatchProcessorService, idempotency_service_1.IdempotencyService, pressure_manager_service_1.PressureManagerService, dlq_service_1.DlqService, kafka_health_indicator_1.KafkaHealthIndicator);
136
+ this.isFirstModule = false;
137
+ return {
138
+ module: KafkaModule_1,
139
+ imports: [core_1.DiscoveryModule, terminus_1.TerminusModule],
140
+ providers,
141
+ exports,
142
+ global: true,
143
+ };
144
+ }
54
145
  static forRootAsync(options) {
55
- const asyncProviders = this.createAsyncProviders(options);
146
+ const connectionName = options.name || interfaces_1.DEFAULT_KAFKA_CONNECTION;
147
+ const optionsToken = (0, interfaces_1.getKafkaOptionsToken)(connectionName);
148
+ const clientToken = (0, interfaces_1.getKafkaClientToken)(connectionName);
149
+ const asyncProviders = this.createAsyncProviders(options, optionsToken);
150
+ const providers = [
151
+ ...asyncProviders,
152
+ {
153
+ provide: `KAFKA_INIT_${connectionName}`,
154
+ useFactory: (kafkaCore, kafkaOptions) => {
155
+ kafkaCore.registerConnection({
156
+ ...kafkaOptions,
157
+ name: connectionName,
158
+ });
159
+ return true;
160
+ },
161
+ inject: [kafka_core_service_1.KafkaCoreService, optionsToken],
162
+ },
163
+ {
164
+ provide: clientToken,
165
+ useFactory: (kafkaClient) => {
166
+ if (connectionName === interfaces_1.DEFAULT_KAFKA_CONNECTION) {
167
+ return kafkaClient;
168
+ }
169
+ return kafkaClient.forConnection(connectionName);
170
+ },
171
+ inject: [kafka_client_service_1.KafkaClient],
172
+ },
173
+ ];
174
+ if (this.isFirstModule) {
175
+ this.isFirstModule = false;
176
+ providers.push(kafka_core_service_1.KafkaCoreService, kafka_client_service_1.KafkaClient, consumer_discovery_service_1.ConsumerDiscoveryService, consumer_registry_service_1.ConsumerRegistryService, batch_processor_service_1.BatchProcessorService, idempotency_service_1.IdempotencyService, pressure_manager_service_1.PressureManagerService, dlq_service_1.DlqService, kafka_health_indicator_1.KafkaHealthIndicator);
177
+ }
56
178
  return {
57
179
  module: KafkaModule_1,
58
- imports: [...(options.imports || []), core_1.DiscoveryModule],
59
- providers: [
60
- ...asyncProviders,
61
- kafka_core_service_1.KafkaCoreService,
62
- kafka_client_service_1.KafkaClient,
63
- consumer_discovery_service_1.ConsumerDiscoveryService,
64
- consumer_registry_service_1.ConsumerRegistryService,
65
- batch_processor_service_1.BatchProcessorService,
66
- idempotency_service_1.IdempotencyService,
67
- pressure_manager_service_1.PressureManagerService,
68
- dlq_service_1.DlqService,
69
- kafka_health_indicator_1.KafkaHealthIndicator,
70
- ],
180
+ imports: [...(options.imports || []), core_1.DiscoveryModule, terminus_1.TerminusModule],
181
+ providers,
71
182
  exports: [
183
+ optionsToken,
184
+ clientToken,
185
+ kafka_core_service_1.KafkaCoreService,
72
186
  kafka_client_service_1.KafkaClient,
73
187
  kafka_health_indicator_1.KafkaHealthIndicator,
74
188
  consumer_discovery_service_1.ConsumerDiscoveryService,
75
189
  consumer_registry_service_1.ConsumerRegistryService,
76
- interfaces_1.KAFKA_MODULE_OPTIONS,
77
190
  ],
78
191
  global: options.global ?? true,
79
192
  };
80
193
  }
81
- static createAsyncProviders(options) {
194
+ static createAsyncProviders(options, optionsToken) {
82
195
  if (options.useFactory) {
83
196
  return [
197
+ {
198
+ provide: optionsToken,
199
+ useFactory: options.useFactory,
200
+ inject: options.inject || [],
201
+ },
84
202
  {
85
203
  provide: interfaces_1.KAFKA_MODULE_OPTIONS,
86
204
  useFactory: options.useFactory,
@@ -93,6 +211,11 @@ let KafkaModule = KafkaModule_1 = class KafkaModule {
93
211
  throw new Error('Invalid KafkaModuleAsyncOptions');
94
212
  }
95
213
  return [
214
+ {
215
+ provide: optionsToken,
216
+ useFactory: async (optionsFactory) => await optionsFactory.createKafkaOptions(),
217
+ inject: [useClass],
218
+ },
96
219
  {
97
220
  provide: interfaces_1.KAFKA_MODULE_OPTIONS,
98
221
  useFactory: async (optionsFactory) => await optionsFactory.createKafkaOptions(),
@@ -105,6 +228,9 @@ let KafkaModule = KafkaModule_1 = class KafkaModule {
105
228
  exports.KafkaModule = KafkaModule;
106
229
  exports.KafkaModule = KafkaModule = KafkaModule_1 = __decorate([
107
230
  (0, common_1.Global)(),
108
- (0, common_1.Module)({})
231
+ (0, common_1.Module)({}),
232
+ __param(1, (0, common_1.Optional)()),
233
+ __param(1, (0, common_1.Inject)(KAFKA_CONNECTION_NAMES)),
234
+ __metadata("design:paramtypes", [kafka_core_service_1.KafkaCoreService, Array])
109
235
  ], KafkaModule);
110
236
  //# sourceMappingURL=kafka.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"kafka.module.js","sourceRoot":"","sources":["../lib/kafka.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAyE;AACzE,uCAA+C;AAC/C,6CAKsB;AACtB,sEAAiE;AACjE,0EAA8D;AAC9D,uFAAkF;AAClF,oFAA+E;AAC/E,gFAA2E;AAC3E,wEAAoE;AACpE,kFAA6E;AAC7E,wDAAoD;AACpD,4EAAuE;AACvE,+CAAkD;AAI3C,IAAM,WAAW,mBAAjB,MAAM,WAAW;IACtB,MAAM,CAAC,OAAO,CAAC,OAA2B;QACxC,MAAM,eAAe,GAAa;YAChC,OAAO,EAAE,iCAAoB;YAC7B,QAAQ,EAAE,OAAO;SAClB,CAAC;QAEF,OAAO;YACL,MAAM,EAAE,aAAW;YACnB,OAAO,EAAE,CAAC,sBAAe,EAAE,yBAAc,CAAC;YAC1C,SAAS,EAAE;gBACT,eAAe;gBACf,qCAAgB;gBAChB,kCAAW;gBACX,qDAAwB;gBACxB,mDAAuB;gBACvB,+CAAqB;gBACrB,wCAAkB;gBAClB,iDAAsB;gBACtB,wBAAU;gBACV,6CAAoB;aACrB;YACD,OAAO,EAAE;gBACP,kCAAW;gBACX,6CAAoB;gBACpB,qDAAwB;gBACxB,mDAAuB;gBACvB,iCAAoB;aACrB;SACF,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,OAAgC;QAClD,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAE1D,OAAO;YACL,MAAM,EAAE,aAAW;YACnB,OAAO,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,sBAAe,CAAC;YACtD,SAAS,EAAE;gBACT,GAAG,cAAc;gBACjB,qCAAgB;gBAChB,kCAAW;gBACX,qDAAwB;gBACxB,mDAAuB;gBACvB,+CAAqB;gBACrB,wCAAkB;gBAClB,iDAAsB;gBACtB,wBAAU;gBACV,6CAAoB;aACrB;YACD,OAAO,EAAE;gBACP,kCAAW;gBACX,6CAAoB;gBACpB,qDAAwB;gBACxB,mDAAuB;gBACvB,iCAAoB;aACrB;YACD,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;SAC/B,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,oBAAoB,CACjC,OAAgC;QAEhC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,OAAO;gBACL;oBACE,OAAO,EAAE,iCAAoB;oBAC7B,UAAU,EAAE,OAAO,CAAC,UAAU;oBAC9B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;iBAC7B;aACF,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC;QACzD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;QAED,OAAO;YACL;gBACE,OAAO,EAAE,iCAAoB;gBAC7B,UAAU,EAAE,KAAK,EAAE,cAAmC,EAAE,EAAE,CACxD,MAAM,cAAc,CAAC,kBAAkB,EAAE;gBAC3C,MAAM,EAAE,CAAC,QAAQ,CAAC;aACnB;YACD,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/D,CAAC;IACJ,CAAC;CACF,CAAA;AAzFY,kCAAW;sBAAX,WAAW;IAFvB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,WAAW,CAyFvB"}
1
+ {"version":3,"file":"kafka.module.js","sourceRoot":"","sources":["../lib/kafka.module.ts"],"names":[],"mappings":"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"}
@@ -40,11 +40,13 @@ let ConsumerRegistryService = ConsumerRegistryService_1 = class ConsumerRegistry
40
40
  }
41
41
  }
42
42
  registerConsumer(metadata) {
43
- const { topic, options, target, methodName } = metadata;
43
+ const { topic, connection, options, target, methodName } = metadata;
44
44
  const groupId = options.groupId || `${topic}-group`;
45
- let group = this.consumerGroups.get(groupId);
45
+ const connectionName = connection || interfaces_1.DEFAULT_KAFKA_CONNECTION;
46
+ const groupKey = `${connectionName}:${groupId}`;
47
+ let group = this.consumerGroups.get(groupKey);
46
48
  if (!group) {
47
- const consumer = this.kafkaCore.getKafka().consumer({
49
+ const consumer = this.kafkaCore.getKafka(connectionName).consumer({
48
50
  groupId,
49
51
  sessionTimeout: options.sessionTimeout,
50
52
  heartbeatInterval: options.heartbeatInterval,
@@ -62,27 +64,28 @@ let ConsumerRegistryService = ConsumerRegistryService_1 = class ConsumerRegistry
62
64
  });
63
65
  group = {
64
66
  groupId,
67
+ connection: connectionName,
65
68
  consumer,
66
69
  topics: new Map(),
67
70
  options,
68
71
  isRunning: false,
69
72
  hasBatchConsumer: false,
70
73
  };
71
- this.consumerGroups.set(groupId, group);
72
- this.pressureManager.register(groupId, consumer, {
74
+ this.consumerGroups.set(groupKey, group);
75
+ this.pressureManager.register(groupKey, consumer, {
73
76
  backPressureThreshold: options.backPressureThreshold || 80,
74
77
  resumeThreshold: 60,
75
78
  maxQueueSize: options.maxQueueSize || 1000,
76
79
  checkIntervalMs: 1000,
77
80
  });
78
- this.logger.log(`Created consumer group: ${groupId}`);
81
+ this.logger.log(`Created consumer group: ${groupId} (connection: ${connectionName})`);
79
82
  }
80
83
  if (options.batch) {
81
84
  group.hasBatchConsumer = true;
82
85
  }
83
86
  const handler = target[methodName].bind(target);
84
87
  group.topics.set(topic, { metadata, handler });
85
- this.logger.log(`Registered topic "${topic}" in group "${groupId}"`);
88
+ this.logger.log(`Registered topic "${topic}" in group "${groupId}" (connection: ${connectionName})`);
86
89
  }
87
90
  buildRestartOnFailure(retry) {
88
91
  if (!retry?.restartOnFailure) {