我们正在考虑在我们的消息传递中使用Kafka,并且我们的应用程序是使用Spring开发的。因此,我们计划使用spring-kafka。
生产者将消息作为HashMap对象放入队列。我们有JSON序列化程序,并且我们假设地图将被序列化并放入队列中。这是生产者配置。
spring:
kafka:
bootstrap-servers: localhost:9092
producer:
key-serializer: org.springframework.kafka.support.serializer.JsonSerializer
value-serializer: org.springframework.kafka.support.serializer.JsonSerializer
另一方面,我们有一个侦听器,用于侦听生产者发布消息的相同主题。这是使用者配置:
spring:
kafka:
consumer:
group-id: xyz
key-deserializer: org.springframework.kafka.support.serializer.JsonDeserializer
value-deserializer: org.springframework.kafka.support.serializer.JsonDeserializer
我们的侦听器方法:
public void listener(SomeClass abx)
我们期望json将被反序列化,并且将生成“ SomeClass”类型的对象。但是显然,它引发了反序列化异常。
我们看到的文章很少,建议做类似的事情:
@Bean
public ConsumerFactory<String, Car> consumerFactory() {
return new DefaultKafkaConsumerFactory<>(consumerConfigs(), new StringDeserializer(),
new JsonDeserializer<>(Car.class));
}
我们不想编写一些代码来创建反序列化器。有没有我们所缺少的样板东西? 任何帮助将不胜感激!!
答案 0 :(得分:3)
请参见.querySelector
。特别是:
您还可以如下配置Spring Kafka JsonDeserializer:
spring.kafka.consumer.value-deserializer=org.springframework.kafka.support.serializer.JsonDeserializer
spring.kafka.consumer.properties.spring.json.value.default.type=com.example.Invoice
spring.kafka.consumer.properties.spring.json.trusted.packages=com.example,org.acme
答案 1 :(得分:-1)
您可以看看Confluent:https://www.confluent.io/ 用另一个词可以说是另一个Kafka层,它使您可以控制Kafka数据。
融合功能之一是序列化,我以这种方式使用它没有问题:
import io.confluent.kafka.serializers.KafkaAvroDeserializerConfig;
import org.apache.kafka.clients.producer.ProducerConfig;
@Bean
public Map<String, Object> producerConfigs() {
Map<String, Object> props = new HashMap<>();
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, io.confluent.kafka.serializers.KafkaAvroSerializer.class);
props.put(KafkaAvroDeserializerConfig.SCHEMA_REGISTRY_URL_CONFIG, schemaRegistry);
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, io.confluent.kafka.serializers.KafkaAvroSerializer.class);
(...)
return props;
}
有了Producer和Consumer上的这些属性,您应该没有任何问题。