protected override async Task ExecuteAsync(CancellationToken stoppingToken) { using (var scope = _serviceScopeFactory.CreateScope()) { _handler = scope.ServiceProvider.GetRequiredService <IKafkaHandler <TK, TV> >(); var builder = new ConsumerBuilder <TK, TV>(_config).SetValueDeserializer(new KafkaDeserializer <TV>()); using (IConsumer <TK, TV> consumer = builder.Build()) { consumer.Subscribe(_config.Topic); while (!stoppingToken.IsCancellationRequested) { var result = consumer.Consume(TimeSpan.FromMilliseconds(1000)); if (result != null) { await _handler.HandleAsync(result.Message.Key, result.Message.Value); consumer.Commit(result); consumer.StoreOffset(result); } } } } }
public BackgroundKafkaConsumer(IOptions <KafkaConsumerConfig <TK, TV> > config, IKafkaHandler <TK, TV> handler) { _handler = handler; _config = config.Value; }