public EventConsumer(IEventDeserializer eventDeserializer, EventConsumerConfig config, ILogger <EventConsumer <TA, TKey> > logger) { _eventDeserializer = eventDeserializer; _logger = logger; var aggregateType = typeof(TA); var consumerConfig = new ConsumerConfig { GroupId = config.ConsumerGroup, BootstrapServers = config.KafkaConnectionString, AutoOffsetReset = AutoOffsetReset.Earliest, EnablePartitionEof = true }; var consumerBuilder = new ConsumerBuilder <TKey, string>(consumerConfig); var keyDeserializerFactory = new KeyDeserializerFactory(); consumerBuilder.SetKeyDeserializer(keyDeserializerFactory.Create <TKey>()); _consumer = consumerBuilder.Build(); var topicName = $"{config.TopicBaseName}-{aggregateType.Name}"; _consumer.Subscribe(topicName); }
public static IServiceCollection AddKafka(this IServiceCollection services, EventConsumerConfig consumerConfig) { return(services.AddSingleton(consumerConfig) .AddSingleton(typeof(IEventConsumer <,>), typeof(EventConsumer <,>)) .AddKafkaEventProducer <Customer, Guid>(consumerConfig) .AddKafkaEventProducer <Account, Guid>(consumerConfig)); }
private static IServiceCollection AddKafkaEventProducer <TA, TK>(this IServiceCollection services, EventConsumerConfig configuration) where TA : class, IAggregateRoot <TK> { return(services.AddSingleton <IEventProducer <TA, TK> >(ctx => { var logger = ctx.GetRequiredService <ILogger <EventProducer <TA, TK> > >(); return new EventProducer <TA, TK>(configuration.TopicBaseName, configuration.KafkaConnectionString, logger); })); }