public ISubscription Subscribe(IMessageHandler messageHandler, string groupId, params string[] topics)
        {
            if (messageHandler == null)
            {
                throw new ArgumentNullException(nameof(messageHandler));
            }

            if (groupId == null)
            {
                throw new ArgumentNullException(nameof(groupId));
            }

            if (topics == null)
            {
                throw new ArgumentNullException(nameof(topics));
            }

            if (topics.Length < 1)
            {
                throw new ArgumentException("At least one topic is necessary to subscribe.", nameof(topics));
            }

            var kafkaConsumerWrapper = new KafkaConsumerWrapper(configuration, loggerFactory, groupId);

            consumers.Add(kafkaConsumerWrapper);

            return(new KafkaSubscription(kafkaConsumerWrapper, messageHandler, groupId, topics));

            //return Task.Run(() => kafkaConsumerWrapper.SubscribeAndStartPoll(messageHandler, topics, cancellationToken));
        }
 public KafkaSubscription(KafkaConsumerWrapper kafkaConsumerWrapper, IMessageHandler messageHandler, string groupId, string[] topics)
 {
     this.kafkaConsumerWrapper = kafkaConsumerWrapper ?? throw new System.ArgumentNullException(nameof(kafkaConsumerWrapper));
     this.messageHandler       = messageHandler ?? throw new System.ArgumentNullException(nameof(messageHandler));
     this.groupId = groupId ?? throw new System.ArgumentNullException(nameof(groupId));
     this.topics  = topics;
 }
        public IMessage ReadSingle(IDictionary <string, object> messageAddress)
        {
            if (messageAddress == null)
            {
                throw new ArgumentNullException(nameof(messageAddress));
            }

            if (readFromParticularAddressConsumer == null)
            {
                readFromParticularAddressConsumer = new KafkaConsumerWrapper(configuration, loggerFactory, ReadFromParticularAddressGroup);
            }

            return(readFromParticularAddressConsumer.ReadFromParticularAddress(messageAddress));
        }