简体   繁体   English

如何暂停 Nest.js Kafka 消费者

[英]How to pause Nest.js Kafka consumer

I am using Kafka.js in a Nest.js project.我在 Nest.js 项目中使用 Kafka.js。 This is how I initialise KafkaClient:这就是我初始化 KafkaClient 的方式:


@Module({
...
providers: [{
      provide: 'KAFKA_CLIENT',
      useFactory: async (configService: KafkaClientConfigService) => {

        const kafkaOptions = configService.getKafkaOptions();
        return ClientProxyFactory.create(kafkaOptions);
      },
      inject: [KafkaClientConfigService],
    },
  ]
...
})

Now I inject KafkaClient to my Controller, and I wish to consume messages with intervals.现在我将 KafkaClient 注入到我的控制器中,并且我希望使用间隔消息。 While there is a way to do it with Kafka.js using consumer.pause() I could not find any reference to such option in KafkaClient.虽然有一种方法可以使用consumer.pause()在 Kafka.js 中做到这一点,但我在 KafkaClient 中找不到对此类选项的任何引用。

Is there any option to do so either by pausing or by throttling the consumer?是否有任何选择可以通过暂停或限制消费者来做到这一点?

The ClientKafka has a protected consumer property. ClientKafka具有protected consumer财产。 On the consumer itself you can call pause() and resume() .在消费者本身上,您可以调用pause()resume()

To use these methods I'm currently extending the ClientKafka with a custom class and use it as provider instead.为了使用这些方法,我目前正在使用自定义类扩展ClientKafka ,并将其用作提供者。

import { ClientKafka, KafkaOptions } from '@nestjs/microservices'

export class KafkaClient extends ClientKafka {
  pause() {
    this.consumer.pause()
    // ...
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM