如何使用spring-boot配置Kafka类型映射,maven构建成功但包含错误



我查看了文档,发现了以下内容:

spring.kafka.producer.properties.spring.json.type.mapping=cat:com.mycat.Cat,hat:com.myhat.Hat

我的生产者属性:

spring.kafka.producer.bootstrap-server=localhost:9092
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.springframework.kafka.support.serializer.JsonSerializer 
spring.kafka.producer.properties.spring.json.type.mapping=com.producerservice.dto.UserDTO:UserDTO

maven安装成功运行。

消费者属性:

spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consumer.value-deserializer=org.springframework.kafka.support.serializer.JsonDeserializer
spring.kafka.consumer.properties.spring.json.type.mapping=UserDTO:com.consumerservice.dto.UserDTO
spring.kafka.consumer.properties.spring.json.trusted.packages=*

maven是成功的,但有一个错误,我不知道当错误存在时它传递了什么:

java.lang.IllegalStateException: This error handler cannot process 'SerializationException's directly; please consider configuring an 'ErrorHandlingDeserializer' in the value and/or key deserializer

错误还在继续,报告了生产者类:

Caused by: org.springframework.messaging.converter.MessageConversionException: failed to resolve class name. Class not found [com.producerservice.dto.UserDTO]; nested exception is java.lang.ClassNotFoundException: com.producerservice.dto.UserDTO
at org.springframework.kafka.support.mapping.DefaultJackson2JavaTypeMapper.getClassIdType(DefaultJackson2JavaTypeMapper.java:142) ~[spring-kafka-2.8.8.jar:2.8.8]
at org.springframework.kafka.support.mapping.DefaultJackson2JavaTypeMapper.toJavaType(DefaultJackson2JavaTypeMapper.java:103) ~[spring-kafka-2.8.8.jar:2.8.8]
at org.springframework.kafka.support.serializer.JsonDeserializer.deserialize(JsonDeserializer.java:572) ~[spring-kafka-2.8.8.jar:2.8.8]
at org.apache.kafka.clients.consumer.internals.Fetcher.parseRecord(Fetcher.java:1439) ~[kafka-clients-3.1.1.jar:na]
... 15 common frames omitted
Caused by: java.lang.ClassNotFoundException: com.producerservice.dto.UserDTO
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:636) ~[na:na]
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:182) ~[na:na]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519) ~[na:na]
at java.base/java.lang.Class.forName0(Native Method) ~[na:na]
at java.base/java.lang.Class.forName(Class.java:466) ~[na:na]
at org.springframework.util.ClassUtils.forName(ClassUtils.java:284) ~[spring-core-5.3.22.jar:5.3.22]
at org.springframework.kafka.support.mapping.DefaultJackson2JavaTypeMapper.getClassIdType(DefaultJackson2JavaTypeMapper.java:138) ~[spring-kafka-2.8.8.jar:2.8.8]
... 18 common frames omitted

找不到生产者类的类?当然没有,我在消费者里

更新

我已将生产者属性更改为:

spring.kafka.producer.properties.spring.json.type.mapping=UserDTO:com.producerservice.dto.UserDTO

同样的错误仍然存在。

当然没有发现我在消费者中

生产者和消费者需要共享数据类的依赖关系。

您有一个运行时错误,Maven无法检测到,因为您在Kafka反序列化程序中有动态类加载,但如果您将UserDTO添加到@KafkaListener方法参数中,它可以检测到。

所以这至少解决了maven构建:

userDto:com.my.example.UserDTO 

我有

userDTO

所以,令牌是问题所在,令牌是变量名在侦听器消费方法中使用的。

为了理解代币的主要问题,这个问题有助于:类类型映射中的令牌是什么

但仅凭这一点并没有解决问题,我不得不阻止动物园管理员和经纪人删除所有日志猜猜双方的构建是否成功。明天会发短信,太累了。

最新更新