[英]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.