コード例 #1
0
        public ConsumerSettings ToLongRunning(TimeSpan?maxHandlingTime = default)
        {
            var clone = new ConsumerSettings(this);

            clone.SetLongRunning(maxHandlingTime);

            return(clone);
        }
コード例 #2
0
        public KafkaConsumer(
            IObserverFactory observerFactory,
            IEventDeserializer deserializer,
            ConsumerSettings settings,
            ILoggerFactory loggerFactory)
        {
            if (deserializer == null)
            {
                throw new ArgumentNullException(nameof(deserializer));
            }
            if (settings == null)
            {
                throw new ArgumentNullException(nameof(settings));
            }

            _observerFactory = observerFactory ?? throw new ArgumentNullException(nameof(observerFactory));

            _logger = loggerFactory.CreateLogger <KafkaConsumer>();


            if (string.IsNullOrWhiteSpace(settings.Config.BootstrapServers))
            {
                throw new InvalidOperationException("Brokers not specified.");
            }

            if (string.IsNullOrEmpty(settings.Topic))
            {
                throw new InvalidOperationException("Topics not specified.");
            }

            if (string.IsNullOrEmpty(settings.Config.GroupId))
            {
                throw new InvalidOperationException("Group Id not specified.");
            }

            _consumer = new ConsumerBuilder <Guid, IStreamEvent>(settings.Config)
                        .SetKeyDeserializer(KeyDeserializer)
                        .SetValueDeserializer(new ValueObjectDeserializer(deserializer))
                        .SetErrorHandler((_, e) => _logger.LogError(
                                             $"KafkaConsumer internal error: Topic: {settings.Topic}, {e.Reason}, Fatal={e.IsFatal}," +
                                             $" IsLocal= {e.IsLocalError}, IsBroker={e.IsBrokerError}"))
                        .Build();

            _consumer.Subscribe(settings.Topic);
        }
コード例 #3
0
 private ConsumerSettings(ConsumerSettings other)
 {
     Config = other.Config;
     Topic  = other.Topic;
 }