C#使用Confluent.Kafka 接收到的消息Key为空的问题

本文讲述了作者在使用Kafka Consumer时遇到的问题,通过将`<Ignore,string>`改为`<string,string>`类型,解决了key值获取问题。详细展示了如何配置和调试Consumer,并提供了关键代码片段。
摘要由CSDN通过智能技术生成

按照官网的例子发现我的代码中获取不到key的值。发现需要将Ignore 改为string就可以了。

 using (var c = new ConsumerBuilder<Ignore, string>(conf).Build())  //这种写法 key值为空

 using (var c = new ConsumerBuilder<string, string>(conf).Build())  //这种写法,可以取得key的值

   public async void ConsumeMessage()
        {
            App.Log.Debug($" 消费消息");
            var conf = new ConsumerConfig
            {
                GroupId = "group-consumer-jsjpmessage",
                BootstrapServers = MyConfig.GetInstance().GetConfig("KafkaIP") + ":" + MyConfig.GetInstance().GetConfig("KafkaPort"),
                AutoOffsetReset = AutoOffsetReset.Earliest
            };

            using (var c = new ConsumerBuilder<string, string>(conf).Build())
            { 
                c.Subscribe("JSJP.InfusionBag.Message");

                CancellationTokenSource cts = new CancellationTokenSource();
                Console.CancelKeyPress += (_, e) =>
                {
                    e.Cancel = true; // prevent the process from terminating.
                    cts.Cancel();
                };

                try
                {
                    while (true)
                    {
                        try
                        {
                            var cr = c.Consume(cts.Token);
                            string msg = cr.Value;                
                            App.Log.Debug($"kafka 消费 消息 ~{cr.Message.Key}~ ~{cr.Message.Value}~ -{cr.Key}- \'{msg}\' at: \'{cr.TopicPartitionOffset}\'.");
              

                            MessageModel mm = new MessageModel();
                            string JsonStr = cr.Value;
                            JsonStr = JsonStr.TrimStart('\"');
                            JsonStr = JsonStr.TrimEnd('\"');
                            JsonStr = JsonStr.Replace("\\", "");
                            mm = JsonConvert.DeserializeObject<MessageModel>(JsonStr);

                           // SQLiteCommon.DeleteConsumerKafkaMessage(mm.ID);

                          //  HandyControl.Controls.Growl.Success(mm.Message, "");

                           // GlobalValue.SetFormLog(mm.Message);

                        }
                        catch (ConsumeException e)
                        {
                            App.Log.Error($"KafkaConsumer 消费消息异常: {e.Error.Reason}"); 
                        }
                    }
                }
                catch (OperationCanceledException)
                {
                    c.Close();
                }
            }
        }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值