public void InsertKafkaConsumerMessage(KafkaConsumerMessage message) { Console.WriteLine($"Insert {message.KafkaConsumerMessageId.ToString()}: {message.Content}"); context.KafkaConsumerMessage.Add(message); context.SaveChanges(); Console.WriteLine($"Saved {message.KafkaConsumerMessageId.ToString()}: {message.Content}"); }
private static void Consume() { var kafkaRepo = new KafkaConsumerRepository(); bool fromBeginning = Boolean.Parse(ConfigurationManager.AppSettings["FromBeginning"]); var router = InitDefaultConfig(); var consumer = new Consumer(new ConsumerOptions(_topic, router)); //如果我们不想从头开始,使用最新偏移量 if (!fromBeginning) { var maxOffsetByPartition = kafkaRepo.GetOffsetPositionByTopic(_topic); //如果我们得到一个结果使用它,否则默认 if (maxOffsetByPartition.Any()) { var offsets = new List <OffsetPosition>(); foreach (var m in maxOffsetByPartition) { var o = new OffsetPosition(m.Partition, (long)m.MaxOffset + 1); offsets.Add(o); } consumer.SetOffsetPosition(offsets.ToArray()); } else { consumer.SetOffsetPosition(new OffsetPosition()); } } //消耗返回一个阻塞IEnumerable(ie:从没有结束流) foreach (var message in consumer.Consume()) { var messageContent = Encoding.UTF8.GetString(message.Value); Console.WriteLine($"处理带有内容的消息:{messageContent}"); kafkaRepo = new KafkaConsumerRepository(); var consumerMessage = new KafkaConsumerMessage() { Topic = _topic, Offset = (int)message.Meta.Offset, Partition = message.Meta.PartitionId, Content = messageContent, CreatedTime = DateTime.UtcNow }; kafkaRepo.InsertKafkaConsumerMessage(consumerMessage); kafkaRepo.Dispose(); } }