使用Spring-kafka的@KafkaListener报错信息Listener method could not be invoked with the incoming message
问题背景
先说一下背景,我在写一个kafka消费项目的时候,为了方便就用的spring-kafka依赖包,启动项目报了这个错,百度好几遍都没找到解决办法,后面再stack overflow找到答案了,在此记录一下,错误如下:
我个人觉得这个错误信息很关键:
Listener method could not be invoked with the incoming message
还有一个错误是非常关键的:
Endpoint handler details:
Method [public void com.kingdee.finance.kafka.consumer.handler.AckConsume.onMessage(org.apache.kafka.clients.consumer.ConsumerRecord<java.lang.String, java.lang.Object>,org.springframework.kafka.support.Acknowledgment)]
再来看看我的消费者是怎么写的,比较简单,直接@KafkaListener注解和实现AcknowledgingMessageListener接口类
报错原因
在消费端并不支持使用Acknowledgment作为接收参数,要使用ack模式的话,配置文件也要设置相应的ack-mode,所以最后的原因就是没有设置相应的ack-mode。
解决办法
在配置文件yml中设置ack策略,设置为manual或者manual_immediate,问题解决!
参考链接:https://stackoverflow.com/questions/44788188/acknowledgement-acknowledge-throwing-exception-in-spring-kafka-kafkalistener