我正在使用 NestJS adapters 实现 kafka 适配器。 在这个适配器中,我需要能够发布和订阅 Kafka 主题。适配器类不是控制器,所以我不能在那里添加 @EventPattern() 方法。 我可以注入 kafkaClient 并且只能发送消息:
export class KafkaAdapter extends IoAdapter {
constructor(
private readonly app: INestApplicationContext,
private kafkaClient: ClientKafka,
) {
super(app);
}
createIOServer(port: number, options?: any): any {
const server: Server = super.createIOServer(port, options);
const client = this.kafkaClient;
server.adapter(function (nsp) {
// using kafkaClient to send/emit messages
});
return server;
}
}
但似乎我无法使用此 kafkaClient 订阅 Kafka 主题。消费者已创建但未公开给公共 KafkaClient 接口。所以我被迫初始化另一个自定义消费者,它正在创建一个到 Kafka 的单独连接,我不喜欢它。
有什么方法可以在控制器之外订阅 Kafka 主题?