我正在尝试使用Spring Cloud和Kafka Avro Serializer在Kafka上产生一个事件。
在我的application.yml中,我具有以下配置,但是当序列化器尝试生成消息时,它以字节为单位生成,因为传递给KafkaSerializer中的getScheme方法的对象是字节数组,并且不是GenericRecord。我认为我在Spring Cloud中需要特定的MessageConverter,但没有找到任何内容。
cloud:
stream:
kafka:
binder:
brokers:
- 'localhost:9092'
useNativeDecoding: true
bindings:
Ptr-output:
producer:
configuration:
schema.registry.url: 'http://localhost:8081'
key.serializer: org.apache.kafka.common.serialization.StringSerializer
value.serializer: com.abc.message.ptr.KafkaSerializer
schemaRegistryClient:
endpoint: 'http://localhost:8081'
bindings:
Ptr-output:
contentType: application/*+avro
destination: Ptr
schema:
avro:
schema-locations: 'classpath:avro/Ptr.avsc'
dynamic-schema-generation-enabled: false
我该怎么办?我该怎么解决?
答案 0 :(得分:0)
请参见the documentation,尤其是,您需要设置生产者属性useNativeEncoding
。
useNativeEncoding
设置为true时,出站消息由客户端库直接序列化,必须进行相应配置(例如,设置适当的Kafka生产者值序列化程序)。使用此配置时,出站邮件编组不是基于绑定的contentType。使用本机编码时,消费者有责任使用适当的解码器(例如,Kafka消费者值反序列化器)对入站消息进行反序列化。另外,使用本机编码和解码时,headerMode = embeddedHeaders属性将被忽略,并且标头不会嵌入消息中。请参阅使用者属性useNativeDecoding。
答案 1 :(得分:0)
尝试将序列化器设置为class AlgoException : public std::exception {}
class NewAlgoException : public AlgoException {}
try
{
throw NewAlgoException ();
}
catch (AlgoException ) { std::cout << 2; }
catch (NewAlgoException ) { std::cout << 3; }
catch (std::exception) { std::cout << 1; }