Kafka Producer Error: ' Value serializer not specified and there is no default serializer defined for type ...'
Kafka Producer Error: ' Value serializer not specified and there is no default serializer defined for type ...'
我刚开始使用 Kafka 并遇到了以下菜鸟错误:
'Value cannot be null.
Parameter name: Value serializer not specified and there is no default serializer defined for type ActMessage.'
当尝试发送 class 对象 ActMessage 对象而不是示例附带的简单字符串时会发生这种情况。引发错误的代码行是:
using (var p = new ProducerBuilder<Null, ActMessage>(config ).Build()
我正在使用 .net client.
我的理解是我需要在第一个类型参数中使用默认序列化之一,Kafka 客户端随附的序列化,如 here 所述,但无法在此 .net 包中找到它们.
我想我可以建造一个,但那会浪费时间。
这是一个可重现的例子:
public class ActMessage {
public int SomeId {get;set;}
public string SomeContent {get;set;}
}
class Tester {
void send(){
var config = new ProducerConfig { BootstrapServers = "localhost:9092" };
using (var p = new ProducerBuilder<Null, ActMessage>(config).Build()) //throws error here
{
var dr = p.ProduceAsync("news", new Message<Null, ActMessage>
{
Value = new ActMessage { SomeId = 1, SomeContent="hi" },
}
).Result;
}
}
}
我建议查看该存储库中的工作 examples/
目录以查看可以复制到您自己的项目中的工作代码。
如果您有自己的 class,则需要实现 ISerializer
和 IDeserializer
接口。
或者您可以使用 built-in ones
但是,另一种方法是 use Avro
这需要编写一个 Avro schema file,然后使用 avrogen
创建您的 class,而不是手动编写。例如
dotnet tool install --global Apache.Avro.Tools
avrogen -s User.avsc .
我刚开始使用 Kafka 并遇到了以下菜鸟错误:
'Value cannot be null.
Parameter name: Value serializer not specified and there is no default serializer defined for type ActMessage.'
当尝试发送 class 对象 ActMessage 对象而不是示例附带的简单字符串时会发生这种情况。引发错误的代码行是:
using (var p = new ProducerBuilder<Null, ActMessage>(config ).Build()
我正在使用 .net client.
我的理解是我需要在第一个类型参数中使用默认序列化之一,Kafka 客户端随附的序列化,如 here 所述,但无法在此 .net 包中找到它们. 我想我可以建造一个,但那会浪费时间。
这是一个可重现的例子:
public class ActMessage {
public int SomeId {get;set;}
public string SomeContent {get;set;}
}
class Tester {
void send(){
var config = new ProducerConfig { BootstrapServers = "localhost:9092" };
using (var p = new ProducerBuilder<Null, ActMessage>(config).Build()) //throws error here
{
var dr = p.ProduceAsync("news", new Message<Null, ActMessage>
{
Value = new ActMessage { SomeId = 1, SomeContent="hi" },
}
).Result;
}
}
}
我建议查看该存储库中的工作 examples/
目录以查看可以复制到您自己的项目中的工作代码。
如果您有自己的 class,则需要实现 ISerializer
和 IDeserializer
接口。
或者您可以使用 built-in ones
但是,另一种方法是 use Avro
这需要编写一个 Avro schema file,然后使用 avrogen
创建您的 class,而不是手动编写。例如
dotnet tool install --global Apache.Avro.Tools
avrogen -s User.avsc .