@midwayjs/kafka 3.18.2 → 3.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/configuration.d.ts +0 -1
- package/dist/configuration.js +10 -2
- package/dist/decorator.d.ts +3 -0
- package/dist/decorator.js +15 -0
- package/dist/framework.d.ts +9 -3
- package/dist/framework.js +129 -14
- package/dist/index.d.ts +5 -3
- package/dist/index.js +6 -4
- package/dist/interface.d.ts +67 -8
- package/dist/manager.d.ts +10 -0
- package/dist/manager.js +22 -0
- package/dist/service.d.ts +22 -0
- package/dist/service.js +131 -0
- package/index.d.ts +8 -0
- package/package.json +4 -4
package/dist/configuration.d.ts
CHANGED
package/dist/configuration.js
CHANGED
|
@@ -9,7 +9,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
9
9
|
exports.KafkaConfiguration = void 0;
|
|
10
10
|
const core_1 = require("@midwayjs/core");
|
|
11
11
|
let KafkaConfiguration = class KafkaConfiguration {
|
|
12
|
-
async onReady() { }
|
|
13
12
|
};
|
|
14
13
|
KafkaConfiguration = __decorate([
|
|
15
14
|
(0, core_1.Configuration)({
|
|
@@ -17,7 +16,16 @@ KafkaConfiguration = __decorate([
|
|
|
17
16
|
importConfigs: [
|
|
18
17
|
{
|
|
19
18
|
default: {
|
|
20
|
-
kafka: {
|
|
19
|
+
kafka: {
|
|
20
|
+
contextLoggerApplyLogger: 'kafkaLogger',
|
|
21
|
+
},
|
|
22
|
+
midwayLogger: {
|
|
23
|
+
clients: {
|
|
24
|
+
kafkaLogger: {
|
|
25
|
+
fileLogName: 'midway-kafka.log',
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
},
|
|
21
29
|
},
|
|
22
30
|
},
|
|
23
31
|
],
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KafkaConsumer = exports.KAFKA_DECORATOR_KEY = void 0;
|
|
4
|
+
const core_1 = require("@midwayjs/core");
|
|
5
|
+
exports.KAFKA_DECORATOR_KEY = 'rpc:kafka';
|
|
6
|
+
function KafkaConsumer(consumerName) {
|
|
7
|
+
return target => {
|
|
8
|
+
(0, core_1.saveModule)(exports.KAFKA_DECORATOR_KEY, target);
|
|
9
|
+
(0, core_1.saveClassMetadata)(exports.KAFKA_DECORATOR_KEY, consumerName, target);
|
|
10
|
+
(0, core_1.Scope)(core_1.ScopeEnum.Request)(target);
|
|
11
|
+
(0, core_1.Provide)()(target);
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
exports.KafkaConsumer = KafkaConsumer;
|
|
15
|
+
//# sourceMappingURL=decorator.js.map
|
package/dist/framework.d.ts
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
|
-
import { BaseFramework, MidwayFrameworkType } from '@midwayjs/core';
|
|
2
|
-
import { IMidwayKafkaContext } from './interface';
|
|
1
|
+
import { BaseFramework, MidwayFrameworkType, ILogger, TypedResourceManager } from '@midwayjs/core';
|
|
2
|
+
import { IKafkaConsumerInitOptions, IKafkaConsumer, IMidwayKafkaContext } from './interface';
|
|
3
|
+
import { Kafka, Consumer } from 'kafkajs';
|
|
3
4
|
export declare class MidwayKafkaFramework extends BaseFramework<any, IMidwayKafkaContext, any> {
|
|
5
|
+
protected LogCreator: any;
|
|
6
|
+
protected typedResourceManager: TypedResourceManager<Consumer, IKafkaConsumerInitOptions, IKafkaConsumer>;
|
|
4
7
|
configure(): any;
|
|
8
|
+
kafKaLogger: ILogger;
|
|
5
9
|
applicationInitialize(): Promise<void>;
|
|
6
10
|
run(): Promise<void>;
|
|
7
|
-
private
|
|
11
|
+
private loadLegacySubscriber;
|
|
12
|
+
getConsumer(subscriberNameOrInstanceName: string): any;
|
|
13
|
+
getKafka(instanceName: string): Kafka;
|
|
8
14
|
getFrameworkName(): string;
|
|
9
15
|
protected beforeStop(): Promise<void>;
|
|
10
16
|
getFrameworkType(): MidwayFrameworkType;
|
package/dist/framework.js
CHANGED
|
@@ -5,33 +5,131 @@ 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
|
+
};
|
|
8
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
12
|
exports.MidwayKafkaFramework = void 0;
|
|
10
13
|
const core_1 = require("@midwayjs/core");
|
|
11
14
|
const kafka_1 = require("./kafka");
|
|
15
|
+
const decorator_1 = require("./decorator");
|
|
16
|
+
const kafkajs_1 = require("kafkajs");
|
|
17
|
+
const manager_1 = require("./manager");
|
|
18
|
+
const toMidwayLogLevel = level => {
|
|
19
|
+
switch (level) {
|
|
20
|
+
case kafkajs_1.logLevel.NOTHING:
|
|
21
|
+
return 'none';
|
|
22
|
+
case kafkajs_1.logLevel.ERROR:
|
|
23
|
+
return 'error';
|
|
24
|
+
case kafkajs_1.logLevel.WARN:
|
|
25
|
+
return 'warn';
|
|
26
|
+
case kafkajs_1.logLevel.INFO:
|
|
27
|
+
return 'info';
|
|
28
|
+
case kafkajs_1.logLevel.DEBUG:
|
|
29
|
+
return 'debug';
|
|
30
|
+
}
|
|
31
|
+
};
|
|
12
32
|
let MidwayKafkaFramework = class MidwayKafkaFramework extends core_1.BaseFramework {
|
|
13
33
|
configure() {
|
|
14
34
|
return this.configService.getConfiguration('kafka');
|
|
15
35
|
}
|
|
16
36
|
async applicationInitialize() {
|
|
37
|
+
this.LogCreator = logLevel => {
|
|
38
|
+
const logger = this.kafKaLogger;
|
|
39
|
+
return ({ level, log }) => {
|
|
40
|
+
const lvl = toMidwayLogLevel(level);
|
|
41
|
+
const { message, ...extra } = log;
|
|
42
|
+
logger === null || logger === void 0 ? void 0 : logger[lvl](message, extra);
|
|
43
|
+
};
|
|
44
|
+
};
|
|
17
45
|
// Create a connection manager
|
|
18
|
-
this.
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
46
|
+
if (this.configurationOptions['kafkaConfig']) {
|
|
47
|
+
this.app = new kafka_1.KafkaConsumerServer({
|
|
48
|
+
logger: this.kafKaLogger,
|
|
49
|
+
...this.configurationOptions,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
this.app = {};
|
|
54
|
+
}
|
|
22
55
|
}
|
|
23
56
|
async run() {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
57
|
+
if (this.configurationOptions['kafkaConfig']) {
|
|
58
|
+
try {
|
|
59
|
+
await this.app.connect(this.configurationOptions.kafkaConfig, this.configurationOptions.consumerConfig);
|
|
60
|
+
await this.loadLegacySubscriber();
|
|
61
|
+
this.kafKaLogger.info('Kafka consumer server start success');
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
this.kafKaLogger.error('Kafka consumer connect fail', error);
|
|
65
|
+
await this.app.closeConnection();
|
|
66
|
+
}
|
|
28
67
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
68
|
+
else {
|
|
69
|
+
const { consumer } = this.configurationOptions;
|
|
70
|
+
if (!consumer)
|
|
71
|
+
return;
|
|
72
|
+
const subscriberMap = {};
|
|
73
|
+
// find subscriber
|
|
74
|
+
const subscriberModules = (0, core_1.listModule)(decorator_1.KAFKA_DECORATOR_KEY);
|
|
75
|
+
for (const subscriberModule of subscriberModules) {
|
|
76
|
+
const subscriberName = (0, core_1.getClassMetadata)(decorator_1.KAFKA_DECORATOR_KEY, subscriberModule);
|
|
77
|
+
subscriberMap[subscriberName] = subscriberModule;
|
|
78
|
+
}
|
|
79
|
+
this.typedResourceManager = new core_1.TypedResourceManager({
|
|
80
|
+
initializeValue: consumer,
|
|
81
|
+
initializeClzProvider: subscriberMap,
|
|
82
|
+
resourceInitialize: async (resourceInitializeConfig, resourceName) => {
|
|
83
|
+
let client;
|
|
84
|
+
if (resourceInitializeConfig.kafkaInstanceRef) {
|
|
85
|
+
client = manager_1.KafkaManager.getInstance().getKafkaInstance(resourceInitializeConfig.kafkaInstanceRef);
|
|
86
|
+
if (!client) {
|
|
87
|
+
throw new core_1.MidwayCommonError(`kafka instance ${resourceInitializeConfig.kafkaInstanceRef} not found`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
client = new kafkajs_1.Kafka({
|
|
92
|
+
logCreator: this.LogCreator,
|
|
93
|
+
...resourceInitializeConfig.connectionOptions,
|
|
94
|
+
});
|
|
95
|
+
manager_1.KafkaManager.getInstance().addKafkaInstance(resourceName, client);
|
|
96
|
+
}
|
|
97
|
+
const consumer = client.consumer(resourceInitializeConfig.consumerOptions);
|
|
98
|
+
await consumer.connect();
|
|
99
|
+
await consumer.subscribe(resourceInitializeConfig.subscribeOptions);
|
|
100
|
+
return consumer;
|
|
101
|
+
},
|
|
102
|
+
resourceBinding: async (ClzProvider, resourceInitializeConfig, consumer) => {
|
|
103
|
+
const runMethod = ClzProvider.prototype['eachBatch']
|
|
104
|
+
? 'eachBatch'
|
|
105
|
+
: 'eachMessage';
|
|
106
|
+
const runConfig = {
|
|
107
|
+
...resourceInitializeConfig.consumerRunConfig,
|
|
108
|
+
};
|
|
109
|
+
runConfig[runMethod] = async (payload) => {
|
|
110
|
+
const ctx = this.app.createAnonymousContext();
|
|
111
|
+
const fn = await this.applyMiddleware(async (ctx) => {
|
|
112
|
+
ctx.payload = payload;
|
|
113
|
+
ctx.consumer = consumer;
|
|
114
|
+
const instance = await ctx.requestContext.getAsync(ClzProvider);
|
|
115
|
+
return await instance[runMethod].call(instance, payload, ctx);
|
|
116
|
+
});
|
|
117
|
+
return await fn(ctx);
|
|
118
|
+
};
|
|
119
|
+
return runConfig;
|
|
120
|
+
},
|
|
121
|
+
resourceStart: async (resource, resourceInitializeConfig, resourceBindingResult) => {
|
|
122
|
+
await resource.run(resourceBindingResult);
|
|
123
|
+
},
|
|
124
|
+
resourceDestroy: async (resource) => {
|
|
125
|
+
await resource.disconnect();
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
await this.typedResourceManager.init();
|
|
129
|
+
await this.typedResourceManager.start();
|
|
32
130
|
}
|
|
33
131
|
}
|
|
34
|
-
async
|
|
132
|
+
async loadLegacySubscriber() {
|
|
35
133
|
const subscriberModules = (0, core_1.listModule)(core_1.MS_CONSUMER_KEY, module => {
|
|
36
134
|
const metadata = (0, core_1.getClassMetadata)(core_1.MS_CONSUMER_KEY, module);
|
|
37
135
|
return metadata.type === core_1.MSListenerType.KAFKA;
|
|
@@ -62,7 +160,8 @@ let MidwayKafkaFramework = class MidwayKafkaFramework extends core_1.BaseFramewo
|
|
|
62
160
|
topics: topicTitles,
|
|
63
161
|
}, e.subscription));
|
|
64
162
|
await this.app.connection.run(Object.assign(e.runConfig, {
|
|
65
|
-
eachMessage: async (
|
|
163
|
+
eachMessage: async (payload) => {
|
|
164
|
+
const { topic, partition, message } = payload;
|
|
66
165
|
let propertyKey;
|
|
67
166
|
for (const methodBindListeners of data) {
|
|
68
167
|
for (const listenerOptions of methodBindListeners) {
|
|
@@ -81,6 +180,8 @@ let MidwayKafkaFramework = class MidwayKafkaFramework extends core_1.BaseFramewo
|
|
|
81
180
|
},
|
|
82
181
|
]);
|
|
83
182
|
},
|
|
183
|
+
payload,
|
|
184
|
+
consumer: this.app.connection,
|
|
84
185
|
};
|
|
85
186
|
this.app.createAnonymousContext(ctx);
|
|
86
187
|
if (typeof propertyKey === 'string') {
|
|
@@ -121,16 +222,30 @@ let MidwayKafkaFramework = class MidwayKafkaFramework extends core_1.BaseFramewo
|
|
|
121
222
|
});
|
|
122
223
|
}
|
|
123
224
|
}
|
|
225
|
+
getConsumer(subscriberNameOrInstanceName) {
|
|
226
|
+
if (this.typedResourceManager) {
|
|
227
|
+
return this.typedResourceManager.getResource(subscriberNameOrInstanceName);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
getKafka(instanceName) {
|
|
231
|
+
return manager_1.KafkaManager.getInstance().getKafkaInstance(instanceName);
|
|
232
|
+
}
|
|
124
233
|
getFrameworkName() {
|
|
125
234
|
return 'midway:kafka';
|
|
126
235
|
}
|
|
127
236
|
async beforeStop() {
|
|
128
|
-
|
|
237
|
+
if (this.typedResourceManager) {
|
|
238
|
+
await this.typedResourceManager.destroy();
|
|
239
|
+
}
|
|
129
240
|
}
|
|
130
241
|
getFrameworkType() {
|
|
131
242
|
return core_1.MidwayFrameworkType.MS_KAFKA;
|
|
132
243
|
}
|
|
133
244
|
};
|
|
245
|
+
__decorate([
|
|
246
|
+
(0, core_1.Logger)('kafkaLogger'),
|
|
247
|
+
__metadata("design:type", Object)
|
|
248
|
+
], MidwayKafkaFramework.prototype, "kafKaLogger", void 0);
|
|
134
249
|
MidwayKafkaFramework = __decorate([
|
|
135
250
|
(0, core_1.Framework)()
|
|
136
251
|
], MidwayKafkaFramework);
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as KafkaJS from 'kafkajs';
|
|
2
2
|
export { MidwayKafkaFramework as Framework } from './framework';
|
|
3
|
-
export * from './interface';
|
|
4
3
|
export { KafkaConfiguration as Configuration } from './configuration';
|
|
5
|
-
export
|
|
4
|
+
export * from './interface';
|
|
5
|
+
export * from './decorator';
|
|
6
|
+
export * from './service';
|
|
7
|
+
export { KafkaJS };
|
|
6
8
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -14,12 +14,14 @@ 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.
|
|
18
|
-
const
|
|
19
|
-
exports.
|
|
17
|
+
exports.KafkaJS = exports.Configuration = exports.Framework = void 0;
|
|
18
|
+
const KafkaJS = require("kafkajs");
|
|
19
|
+
exports.KafkaJS = KafkaJS;
|
|
20
20
|
var framework_1 = require("./framework");
|
|
21
21
|
Object.defineProperty(exports, "Framework", { enumerable: true, get: function () { return framework_1.MidwayKafkaFramework; } });
|
|
22
|
-
__exportStar(require("./interface"), exports);
|
|
23
22
|
var configuration_1 = require("./configuration");
|
|
24
23
|
Object.defineProperty(exports, "Configuration", { enumerable: true, get: function () { return configuration_1.KafkaConfiguration; } });
|
|
24
|
+
__exportStar(require("./interface"), exports);
|
|
25
|
+
__exportStar(require("./decorator"), exports);
|
|
26
|
+
__exportStar(require("./service"), exports);
|
|
25
27
|
//# sourceMappingURL=index.js.map
|
package/dist/interface.d.ts
CHANGED
|
@@ -1,15 +1,27 @@
|
|
|
1
|
-
import { IConfigurationOptions, IMidwayApplication, IMidwayContext, NextFunction as BaseNextFunction } from
|
|
2
|
-
import { Kafka, KafkaConfig } from 'kafkajs';
|
|
1
|
+
import { IConfigurationOptions, IMidwayApplication, IMidwayContext, NextFunction as BaseNextFunction, ServiceFactoryConfigOption } from "@midwayjs/core";
|
|
2
|
+
import { AdminConfig, Consumer, ConsumerConfig, ConsumerRunConfig, ConsumerSubscribeTopic, ConsumerSubscribeTopics, EachBatchHandler, EachBatchPayload, EachMessageHandler, EachMessagePayload, Kafka, KafkaConfig, ProducerConfig } from 'kafkajs';
|
|
3
3
|
export interface IKafkaApplication {
|
|
4
4
|
}
|
|
5
5
|
export type IMidwayKafkaApplication = IMidwayApplication<IMidwayKafkaContext> & IKafkaApplication;
|
|
6
|
-
export interface IMidwayKafkaConfigurationOptions extends IConfigurationOptions, KafkaConfig {
|
|
7
|
-
}
|
|
8
6
|
export type IMidwayKafkaContext = IMidwayContext<{
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
/**
|
|
8
|
+
* @deprecated please use `ctx.payload` instead
|
|
9
|
+
*/
|
|
10
|
+
topic?: any;
|
|
11
|
+
/**
|
|
12
|
+
* @deprecated please use `ctx.payload` instead
|
|
13
|
+
*/
|
|
14
|
+
partition?: any;
|
|
15
|
+
/**
|
|
16
|
+
* @deprecated please use `ctx.payload` instead
|
|
17
|
+
*/
|
|
18
|
+
message?: any;
|
|
19
|
+
/**
|
|
20
|
+
* @deprecated please use `ctx.consumer.commitOffsets` instead
|
|
21
|
+
*/
|
|
22
|
+
commitOffsets?(data: any): void;
|
|
23
|
+
payload: EachMessagePayload | EachBatchPayload;
|
|
24
|
+
consumer: Consumer;
|
|
13
25
|
}>;
|
|
14
26
|
export type Application = IMidwayKafkaApplication;
|
|
15
27
|
export interface Context extends IMidwayKafkaContext {
|
|
@@ -18,10 +30,57 @@ export type NextFunction = BaseNextFunction;
|
|
|
18
30
|
export type DefaultConfig = string | Kafka;
|
|
19
31
|
/**
|
|
20
32
|
* 客户端的相关配置,在midwayjs的自定义配置项
|
|
33
|
+
* @deprecated
|
|
21
34
|
*/
|
|
22
35
|
export interface IMidwayConsumerConfig {
|
|
23
36
|
topic: string;
|
|
24
37
|
subscription: any;
|
|
25
38
|
runConfig: any;
|
|
26
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* The options for the kafka consumer initialization in midway
|
|
42
|
+
*/
|
|
43
|
+
export interface IKafkaConsumerInitOptions {
|
|
44
|
+
/**
|
|
45
|
+
* The connection options for the kafka instance
|
|
46
|
+
*/
|
|
47
|
+
connectionOptions: KafkaConfig;
|
|
48
|
+
/**
|
|
49
|
+
* The consumer options for the kafka consumer
|
|
50
|
+
*/
|
|
51
|
+
consumerOptions: ConsumerConfig;
|
|
52
|
+
subscribeOptions: ConsumerSubscribeTopics | ConsumerSubscribeTopic;
|
|
53
|
+
consumerRunConfig: ConsumerRunConfig;
|
|
54
|
+
kafkaInstanceRef?: string;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* The options for the kafka producer initialization in midway
|
|
58
|
+
*/
|
|
59
|
+
export interface IMidwayKafkaProducerInitOptions {
|
|
60
|
+
connectionOptions: KafkaConfig;
|
|
61
|
+
producerOptions: ProducerConfig;
|
|
62
|
+
kafkaInstanceRef?: string;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* The options for the kafka admin initialization in midway
|
|
66
|
+
*/
|
|
67
|
+
export interface IMidwayKafkaAdminInitOptions {
|
|
68
|
+
kafkaInstanceRef?: string;
|
|
69
|
+
connectionOptions: KafkaConfig;
|
|
70
|
+
/**
|
|
71
|
+
* The options for the kafka admin initialization
|
|
72
|
+
*/
|
|
73
|
+
adminOptions: AdminConfig;
|
|
74
|
+
}
|
|
75
|
+
export interface IMidwayKafkaConfigurationOptions extends IConfigurationOptions {
|
|
76
|
+
consumer: {
|
|
77
|
+
[name: string]: Partial<IKafkaConsumerInitOptions>;
|
|
78
|
+
};
|
|
79
|
+
producer: ServiceFactoryConfigOption<Partial<IMidwayKafkaProducerInitOptions>>;
|
|
80
|
+
admin: ServiceFactoryConfigOption<Partial<IMidwayKafkaAdminInitOptions>>;
|
|
81
|
+
}
|
|
82
|
+
export interface IKafkaConsumer {
|
|
83
|
+
eachBatch?: EachBatchHandler;
|
|
84
|
+
eachMessage?: EachMessageHandler;
|
|
85
|
+
}
|
|
27
86
|
//# sourceMappingURL=interface.d.ts.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Kafka } from 'kafkajs';
|
|
2
|
+
export declare class KafkaManager {
|
|
3
|
+
private kafkaInstanceMap;
|
|
4
|
+
private static instance;
|
|
5
|
+
private constructor();
|
|
6
|
+
getKafkaInstance(name: string): Kafka;
|
|
7
|
+
addKafkaInstance(name: string, kafka: Kafka): void;
|
|
8
|
+
static getInstance(): KafkaManager;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=manager.d.ts.map
|
package/dist/manager.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KafkaManager = void 0;
|
|
4
|
+
class KafkaManager {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.kafkaInstanceMap = new Map();
|
|
7
|
+
}
|
|
8
|
+
getKafkaInstance(name) {
|
|
9
|
+
return this.kafkaInstanceMap.get(name);
|
|
10
|
+
}
|
|
11
|
+
addKafkaInstance(name, kafka) {
|
|
12
|
+
this.kafkaInstanceMap.set(name, kafka);
|
|
13
|
+
}
|
|
14
|
+
static getInstance() {
|
|
15
|
+
if (!this.instance) {
|
|
16
|
+
this.instance = new KafkaManager();
|
|
17
|
+
}
|
|
18
|
+
return this.instance;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.KafkaManager = KafkaManager;
|
|
22
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ILogger, ServiceFactory, ServiceFactoryConfigOption } from '@midwayjs/core';
|
|
2
|
+
import { Producer, Admin } from 'kafkajs';
|
|
3
|
+
import { IMidwayKafkaAdminInitOptions, IMidwayKafkaProducerInitOptions } from './interface';
|
|
4
|
+
export declare class KafkaProducerFactory extends ServiceFactory<Producer> {
|
|
5
|
+
logger: ILogger;
|
|
6
|
+
pubConfig: ServiceFactoryConfigOption<IMidwayKafkaProducerInitOptions>;
|
|
7
|
+
getName(): string;
|
|
8
|
+
init(): Promise<void>;
|
|
9
|
+
protected createClient(config: IMidwayKafkaProducerInitOptions, clientName: any): Promise<Producer>;
|
|
10
|
+
destroyClient(producer: Producer, name: string): Promise<void>;
|
|
11
|
+
destroy(): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
export declare class KafkaAdminFactory extends ServiceFactory<Admin> {
|
|
14
|
+
logger: ILogger;
|
|
15
|
+
adminConfig: ServiceFactoryConfigOption<IMidwayKafkaProducerInitOptions>;
|
|
16
|
+
getName(): string;
|
|
17
|
+
init(): Promise<void>;
|
|
18
|
+
protected createClient(config: IMidwayKafkaAdminInitOptions, clientName: any): Promise<Admin>;
|
|
19
|
+
destroyClient(admin: Admin, name: string): Promise<void>;
|
|
20
|
+
destroy(): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=service.d.ts.map
|
package/dist/service.js
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
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
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.KafkaAdminFactory = exports.KafkaProducerFactory = void 0;
|
|
13
|
+
const core_1 = require("@midwayjs/core");
|
|
14
|
+
const kafkajs_1 = require("kafkajs");
|
|
15
|
+
const manager_1 = require("./manager");
|
|
16
|
+
let KafkaProducerFactory = class KafkaProducerFactory extends core_1.ServiceFactory {
|
|
17
|
+
getName() {
|
|
18
|
+
return 'kafka:producer';
|
|
19
|
+
}
|
|
20
|
+
async init() {
|
|
21
|
+
await this.initClients(this.pubConfig);
|
|
22
|
+
}
|
|
23
|
+
async createClient(config, clientName) {
|
|
24
|
+
const { connectionOptions, producerOptions, kafkaInstanceRef } = config;
|
|
25
|
+
let client;
|
|
26
|
+
if (kafkaInstanceRef) {
|
|
27
|
+
client = manager_1.KafkaManager.getInstance().getKafkaInstance(kafkaInstanceRef);
|
|
28
|
+
if (!client) {
|
|
29
|
+
throw new core_1.MidwayCommonError(`[midway:kafka] kafka instance ${kafkaInstanceRef} not found`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
client = new kafkajs_1.Kafka(connectionOptions);
|
|
34
|
+
manager_1.KafkaManager.getInstance().addKafkaInstance(kafkaInstanceRef, client);
|
|
35
|
+
}
|
|
36
|
+
const producer = client.producer(producerOptions);
|
|
37
|
+
producer.on('producer.connect', () => {
|
|
38
|
+
this.logger.info('[midway:kafka] producer: %s is connect', clientName);
|
|
39
|
+
});
|
|
40
|
+
await producer.connect();
|
|
41
|
+
return producer;
|
|
42
|
+
}
|
|
43
|
+
async destroyClient(producer, name) {
|
|
44
|
+
await producer.disconnect();
|
|
45
|
+
this.logger.info('[midway:kafka] producer: %s is close', name);
|
|
46
|
+
}
|
|
47
|
+
async destroy() {
|
|
48
|
+
await super.stop();
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
__decorate([
|
|
52
|
+
(0, core_1.Logger)('kafkaLogger'),
|
|
53
|
+
__metadata("design:type", Object)
|
|
54
|
+
], KafkaProducerFactory.prototype, "logger", void 0);
|
|
55
|
+
__decorate([
|
|
56
|
+
(0, core_1.Config)('kafka.producer'),
|
|
57
|
+
__metadata("design:type", Object)
|
|
58
|
+
], KafkaProducerFactory.prototype, "pubConfig", void 0);
|
|
59
|
+
__decorate([
|
|
60
|
+
(0, core_1.Init)(),
|
|
61
|
+
__metadata("design:type", Function),
|
|
62
|
+
__metadata("design:paramtypes", []),
|
|
63
|
+
__metadata("design:returntype", Promise)
|
|
64
|
+
], KafkaProducerFactory.prototype, "init", null);
|
|
65
|
+
__decorate([
|
|
66
|
+
(0, core_1.Destroy)(),
|
|
67
|
+
__metadata("design:type", Function),
|
|
68
|
+
__metadata("design:paramtypes", []),
|
|
69
|
+
__metadata("design:returntype", Promise)
|
|
70
|
+
], KafkaProducerFactory.prototype, "destroy", null);
|
|
71
|
+
KafkaProducerFactory = __decorate([
|
|
72
|
+
(0, core_1.Singleton)()
|
|
73
|
+
], KafkaProducerFactory);
|
|
74
|
+
exports.KafkaProducerFactory = KafkaProducerFactory;
|
|
75
|
+
let KafkaAdminFactory = class KafkaAdminFactory extends core_1.ServiceFactory {
|
|
76
|
+
getName() {
|
|
77
|
+
return 'kafka:admin';
|
|
78
|
+
}
|
|
79
|
+
async init() {
|
|
80
|
+
await this.initClients(this.adminConfig);
|
|
81
|
+
}
|
|
82
|
+
async createClient(config, clientName) {
|
|
83
|
+
const { connectionOptions, adminOptions, kafkaInstanceRef } = config;
|
|
84
|
+
let client;
|
|
85
|
+
if (kafkaInstanceRef) {
|
|
86
|
+
client = manager_1.KafkaManager.getInstance().getKafkaInstance(kafkaInstanceRef);
|
|
87
|
+
if (!client) {
|
|
88
|
+
throw new core_1.MidwayCommonError(`[midway:kafka] kafka instance ${kafkaInstanceRef} not found`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
client = new kafkajs_1.Kafka(connectionOptions);
|
|
93
|
+
manager_1.KafkaManager.getInstance().addKafkaInstance(kafkaInstanceRef, client);
|
|
94
|
+
}
|
|
95
|
+
const admin = client.admin(adminOptions);
|
|
96
|
+
await admin.connect();
|
|
97
|
+
return admin;
|
|
98
|
+
}
|
|
99
|
+
async destroyClient(admin, name) {
|
|
100
|
+
await admin.disconnect();
|
|
101
|
+
this.logger.info('[midway:kafka] admin: %s is close', name);
|
|
102
|
+
}
|
|
103
|
+
async destroy() {
|
|
104
|
+
await super.stop();
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
__decorate([
|
|
108
|
+
(0, core_1.Logger)('kafkaLogger'),
|
|
109
|
+
__metadata("design:type", Object)
|
|
110
|
+
], KafkaAdminFactory.prototype, "logger", void 0);
|
|
111
|
+
__decorate([
|
|
112
|
+
(0, core_1.Config)('kafka.admin'),
|
|
113
|
+
__metadata("design:type", Object)
|
|
114
|
+
], KafkaAdminFactory.prototype, "adminConfig", void 0);
|
|
115
|
+
__decorate([
|
|
116
|
+
(0, core_1.Init)(),
|
|
117
|
+
__metadata("design:type", Function),
|
|
118
|
+
__metadata("design:paramtypes", []),
|
|
119
|
+
__metadata("design:returntype", Promise)
|
|
120
|
+
], KafkaAdminFactory.prototype, "init", null);
|
|
121
|
+
__decorate([
|
|
122
|
+
(0, core_1.Destroy)(),
|
|
123
|
+
__metadata("design:type", Function),
|
|
124
|
+
__metadata("design:paramtypes", []),
|
|
125
|
+
__metadata("design:returntype", Promise)
|
|
126
|
+
], KafkaAdminFactory.prototype, "destroy", null);
|
|
127
|
+
KafkaAdminFactory = __decorate([
|
|
128
|
+
(0, core_1.Singleton)()
|
|
129
|
+
], KafkaAdminFactory);
|
|
130
|
+
exports.KafkaAdminFactory = KafkaAdminFactory;
|
|
131
|
+
//# sourceMappingURL=service.js.map
|
package/index.d.ts
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import { IMidwayKafkaConfigurationOptions } from './dist';
|
|
2
2
|
export * from './dist/index';
|
|
3
|
+
export {
|
|
4
|
+
EachMessagePayload,
|
|
5
|
+
EachBatchPayload,
|
|
6
|
+
Consumer,
|
|
7
|
+
Kafka,
|
|
8
|
+
Producer,
|
|
9
|
+
Admin,
|
|
10
|
+
} from 'kafkajs';
|
|
3
11
|
|
|
4
12
|
declare module '@midwayjs/core/dist/interface' {
|
|
5
13
|
interface MidwayConfig {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@midwayjs/kafka",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.19.0",
|
|
4
4
|
"description": "Midway Framework for kafka",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"typings": "index.d.ts",
|
|
@@ -33,8 +33,8 @@
|
|
|
33
33
|
},
|
|
34
34
|
"homepage": "https://github.com/midwayjs/midway#readme",
|
|
35
35
|
"devDependencies": {
|
|
36
|
-
"@midwayjs/core": "^3.
|
|
37
|
-
"@midwayjs/mock": "^3.
|
|
36
|
+
"@midwayjs/core": "^3.19.0",
|
|
37
|
+
"@midwayjs/mock": "^3.19.0"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
40
|
"kafkajs": "2.2.4"
|
|
@@ -42,5 +42,5 @@
|
|
|
42
42
|
"engines": {
|
|
43
43
|
"node": ">=12"
|
|
44
44
|
},
|
|
45
|
-
"gitHead": "
|
|
45
|
+
"gitHead": "437e92d9375b0e375f83aa363f3e6a60187c7109"
|
|
46
46
|
}
|