我正在使用spring-integration-kafka消费消息,使用message-driven-channel-adapter
:
<int-kafka:message-driven-channel-adapter
id="kafkaListener"
listener-container="container1"
channel="outputFromKafka"
error-channel="errorChannel"/>
容器使用JsonDeserializer
将传入的JSON反序列化为对象:
<beans:bean id="container1" class="org.springframework.kafka.listener.KafkaMessageListenerContainer">
<beans:constructor-arg>
<beans:bean class="org.springframework.kafka.core.DefaultKafkaConsumerFactory">
<beans:constructor-arg>
<beans:map>
<beans:entry key="bootstrap.servers" value="localhost:9092" />
<beans:entry key="key.deserializer" value="org.apache.kafka.common.serialization.StringDeserializer" />
<beans:entry key="group.id" value="mygroup" />
</beans:map>
</beans:constructor-arg>
<beans:property name="valueDeserializer">
<beans:bean class="org.springframework.kafka.support.serializer.JsonDeserializer">
<beans:constructor-arg value="com.foo.MyType"/>
</beans:bean>
</beans:property>
</beans:bean>
</beans:constructor-arg>
<beans:constructor-arg>
<beans:bean class="org.springframework.kafka.listener.config.ContainerProperties">
<beans:constructor-arg name="topics" value="foo" />
</beans:bean>
</beans:constructor-arg>
</beans:bean>
如果无法成功解析消息(例如,因为消费者意外使用了错误的类型),则会抛出异常:
ERROR org.apache.kafka.clients.NetworkClient - Uncaught error in request completion: org.apache.kafka.common.errors.SerializationException: Can't deserialize data ...
在此之后,适配器再次收到相同的消息(可能是因为最后一个没有提交?),并且以完全相同的方式失败,导致无休止的异常流。
看起来未使用配置的error-channel
。
有哪些选项可以处理这样的错误,以及如何在XML中配置?
答案 0 :(得分:0)
看起来没有使用配置的错误通道。
是什么让你相信?
我刚刚运行了一个测试,错误通道设置为errorChannel
(默认情况下,使用日志记录适配器)......
12:06:08.366 [container-kafka-consumer-1] ERROR o.s.i.handler.LoggingHandler - ...
您是否可以为显示失败的org.springframework.integration
提供调试日志片段?
修改强>
哦,对不起......
ERROR org.apache.kafka.clients.NetworkClient - Uncaught error in request completion: org.apache.kafka.common.errors.SerializationException: Can't deserialize data ...
在Spring Integration收到消息之前,堆栈中的内容要低得多。