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}");
        }
Esempio n. 2
0
        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();
            }
        }