transporter.producer.callbacks.ready(); // Trigger the `resolve` return p; });
this.producer.createTopics(topics, true, (err) => { this.consumer = new Kafka.ConsumerGroup(consumerOptions, topics); this.consumer.on("error", e => { this.logger.error("Kafka Consumer error", e.message); this.logger.debug(e); }); this.consumer.on("message", message => { const topic = message.topic; const cmd = topic.split(".")[1]; this.receive(cmd, message.value); }); this.consumer.on("connect", () => { resolve(); });
transporter.producer.callbacks.ready(); // Trigger the `resolve` transporter.incomingMessage = jest.fn(); return p; expect(transporter.producer.createTopics).toHaveBeenCalledWith(["MOL-TEST.REQ.node", "MOL-TEST.RES.node"], true, jasmine.any(Function)); expect(Kafka.ConsumerGroup).toHaveBeenCalledTimes(1); expect(Kafka.ConsumerGroup).toHaveBeenCalledWith( { "encoding": "buffer", "fromOffset": "latest",
this.producer.send([{ topic: this.getTopicName(packet.type, packet.target), messages: [data],
init() { assert(this.config.kafkaHost, '[egg-kafka] kafkaHost is required on config'); this.client = new kafka.KafkaClient(this.config); this.producers(); }
createTopics(topics) { assert(Array.isArray(topics), '[egg-kafka] createTopics opction must be Array.'); this.client.createTopics(topics, error => { if (error) this.app.coreLogger.error(`[egg-kafka] createTopics have error ${error}`); }); }
consumerGroup(type = 'web', fn) { assert(type, '[egg-kafka] consumers type argument must be required'); const kafkaConfig = this.app.config.kafka; const kafkaHost = kafkaConfig.client.kafkaHost; const consumerOption = kafkaConfig.consumerGroup[type] || {}; const topic = consumerOption.topic; consumerOption.kafkaHost = kafkaHost; const ConsumerGroup = kafka.ConsumerGroup; const _consumer = new ConsumerGroup(consumerOption, topic); _consumer.on('error', err => { this.app.coreLogger.error(`[egg-kafka] consumer have error ${err}`); }); _consumer.on('message', message => { fn && fn(message); }); }
consumer(type = 'web', fn) { assert(type, '[egg-kafka] consumers type argument must be required'); const kafkaConfig = this.app.config.kafka; const consumer = kafkaConfig.consumer[type] || {}; const consumers = Array.isArray(consumer) ? consumer : [ consumer ]; const Consumer = kafka.Consumer; const _consumer = new Consumer( this.client, consumers, { autoCommit: true, } ); _consumer.on('error', err => { this.app.coreLogger.error(`[egg-kafka] consumer have error ${err}`); }); _consumer.on('message', message => { fn && fn(message); }); }
init() { assert(this.config.kafkaHost, '[egg-kafka] kafkaHost is required on config'); this.client = new kafka.KafkaClient(this.config); this.producers(); }
createTopics(topics) { assert(Array.isArray(topics), '[egg-kafka] createTopics opction must be Array.'); this.client.createTopics(topics, error => { if (error) this.app.coreLogger.error(`[egg-kafka] createTopics have error ${error}`); }); }
consumerGroup(type = 'web', fn) { assert(type, '[egg-kafka] consumers type argument must be required'); const kafkaConfig = this.app.config.kafka; const kafkaHost = kafkaConfig.client.kafkaHost; const consumerOption = kafkaConfig.consumerGroup[type] || {}; const topic = consumerOption.topic; consumerOption.kafkaHost = kafkaHost; const ConsumerGroup = kafka.ConsumerGroup; const _consumer = new ConsumerGroup(consumerOption, topic); _consumer.on('error', err => { this.app.coreLogger.error(`[egg-kafka] consumer have error ${err}`); }); _consumer.on('message', message => { fn && fn(message); }); }