按照官网的例子发现我的代码中获取不到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();
}
}
}