Example #1
0
        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);
     }));
 }