private void Start() { _started = true; _stateStorage = new ConsumerStateStorage(_stateStorageDirectory); _streamState = _stateStorage.ReadStreamState(Topic, "default-group", Partitions); var task = Task.Factory.StartNew(() => { var consumer = new PartitionConsumer(_brokerAddress, _context); var offsetByPartition = new Dictionary <Int32, Int32>(); foreach (var pair in _streamState.OffsetByPartition) { offsetByPartition.Add(pair.Key, pair.Value); } while (true) { // If we already have enough messages in queue - wait if (Messages.Count > 100) { continue; } var result = consumer.Load(Topic, offsetByPartition, 300); var messageCount = 0; foreach (var tuple in result) { Messages.Enqueue(tuple); offsetByPartition[tuple.Item1] += Message.CalculateOnDiskMessageLength(tuple.Item2.Payload.Length); messageCount++; } // Wait for 500 msecond, if there is no new messages // This value should be configurable if (messageCount == 0) { Thread.Sleep(500); } } }); }
private void Start() { _started = true; _stateStorage = new ConsumerStateStorage(_stateStorageDirectory); _streamState = _stateStorage.ReadStreamState(Topic, "default-group", Partitions); var task = Task.Factory.StartNew(() => { var consumer = new PartitionConsumer(_brokerAddress, _context); var offsetByPartition = new Dictionary<Int32, Int32>(); foreach (var pair in _streamState.OffsetByPartition) offsetByPartition.Add(pair.Key, pair.Value); while(true) { // If we already have enough messages in queue - wait if (Messages.Count > 100) continue; var result = consumer.Load(Topic, offsetByPartition, 300); var messageCount = 0; foreach (var tuple in result) { Messages.Enqueue(tuple); offsetByPartition[tuple.Item1] += Message.CalculateOnDiskMessageLength(tuple.Item2.Payload.Length); messageCount++; } // Wait for 500 msecond, if there is no new messages // This value should be configurable if (messageCount == 0) Thread.Sleep(500); } }); }