[英]Not able to consume kafka events remotely Error: connect ECONNREFUSED 5.6.7.8:9092
[英]fail to consume kafka events with nestjs
我想使用 Kafka 消息,因此我首先调用了emit()
消息,它成功地将消息存储在 Kafka 中。
我可以通过运行批处理文件看到: bin/windows/kafka-console-consumer.bat --topic signals --from-beginning --bootstrap-server localhost:9092
并记录新消息。 {“botId”:“TKS”,“emailToken”:“38fhsf29h”,“pair”:“xy”,“size”:100}
这是我的 nodejs/nestjs 服务文件。 我的脚本中缺少什么——因为同一个脚本成功写入了 Kafka? 我试过@MessagePattern
和@EventPattern
来使用消息。 有任何想法吗?
import { Injectable, OnModuleInit } from '@nestjs/common';
import { TVSignal } from './tvsignal';
import { Client, ClientKafka, EventPattern, MessagePattern, Payload, Transport } from "@nestjs/microservices";
import { Logger } from '@nestjs/common';
import { EventEmitter2 } from '@nestjs/event-emitter';
@Injectable()
export class AppService implements OnModuleInit {
constructor(private eventEmitter: EventEmitter2) {}
@Client({
transport: Transport.KAFKA,
options: {
client: {
clientId: 'trading-signal-receiver',
brokers: ['localhost:9092'],
},
consumer: {
groupId: 'signals',
allowAutoTopicCreation: true
},
producer: {
}
}
})
kafkaClient: ClientKafka;
async onModuleInit() {
this.kafkaClient.subscribeToResponseOf('signals');
await this.kafkaClient.connect();
Logger.log("consumer assignments: " + JSON.stringify(this.kafkaClient.getConsumerAssignments()))
}
// DOES NOT WORK
@EventPattern('signals')
async handleEntityCreated(payload: any) {
Logger.log("RECEIVED NEW: "+ JSON.stringify(payload));
}
getTradingSignals(): string {
return ""
}
// DOES NOT WORK
@MessagePattern('signals') // Our topic name
getMessage(@Payload() message) {
Logger.log("RECEIVED KAFKA MSG" + message.value);
return 'Hello World';
}
// WORKS
storeSignal(signal: TVSignal){
Logger.log("STORED: " + JSON.stringify(signal))
Logger.log("consumer assignments: " + JSON.stringify(this.kafkaClient.getConsumerAssignments()))
// send message to OnEvent
this.eventEmitter.emit('signal.saved', signal);
// store obj in kafka
return this.kafkaClient.emit('signals', signal); // args - topic, message
}
}
我无法使用它们的原因是因为我错过了调用app.startAllMicroservices()
(KAFKA 是其中之一)。
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { microserviceConfig} from "./msKafkaConfig";
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.enableCors();
app.connectMicroservice(microserviceConfig);
await app.startAllMicroservices();
await app.listen(3000);
}
bootstrap();
这是您可以附加到应用程序实例中的连接的KafkaOptions
。 基本上我们将消费者的配置设置为微服务。
import { Transport, KafkaOptions } from '@nestjs/microservices';
const {
streaming_kafka_msk_notification_bootstrap_brokers: brokerNotification,
} = process.env;
export const KAFKA = {
topic: process.env.streaming_kafka_msk_notification_topic_name,
broker: process.env.streaming_kafka_msk_notification_bootstrap_brokers,
};
export const microServiceKafka: KafkaOptions = {
transport: Transport.KAFKA,
options: {
consumer: {
groupId: 'notifications-ms',
},
client: {
brokers: brokerNotification.split(','),
},
subscribe: {
fromBeginning: true,
},
},
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.