Spring boot 春季卡夫卡消费品';由于分析错误,未调用的侦听器方法

Spring boot 春季卡夫卡消费品';由于分析错误,未调用的侦听器方法,spring-boot,spring-kafka,Spring Boot,Spring Kafka,我正在尝试使用Kafka Spring(Spring boot)实现Kafka消费者。我使用生产者发送消息,但Spring引发异常,并且由于此异常而未调用我的侦听器方法。 以下是我的侦听器方法: @服务 公共类KafkaExchangeApi{ @KafkaListener(topics=ORDER\u TOPIC,groupId=“group\u id”) 公共无效handleOrderResponse(@Payload GatewayOrder response){ 系统.println(“

我正在尝试使用Kafka Spring(Spring boot)实现Kafka消费者。我使用生产者发送消息,但Spring引发异常,并且由于此异常而未调用我的侦听器方法。
以下是我的侦听器方法:

@服务
公共类KafkaExchangeApi{
@KafkaListener(topics=ORDER\u TOPIC,groupId=“group\u id”)
公共无效handleOrderResponse(@Payload GatewayOrder response){
系统.println(“订单捕获”);
}
}
@AllArgsConstructor
@NoArgsConstructor(力=真)
@建筑商
@吸气剂
@托斯特林
公共类网关命令{
私人最终长uid;
私有最终长orderId;
私有最终int-userCookie;
私人最终长尺寸;
私人最终命令行动;
私有最终OrderType OrderType;
私有最终字符串符号;
//可变场
私有列表交易=新建ArrayList();
@塞特
私人价格;
@塞特
私人长满;
@塞特
私有网关状态;
}
这是我的配置:

server:
  port: 9000
spring:
  kafka:
    consumer:
      bootstrap-servers: 192.168.1.3:9092
      group-id: group-id
      auto-offset-reset: earliest
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
    producer:
      bootstrap-servers: 192.168.1.3:9092
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
我认为制作人发送的JSON消息格式不正确,我测试了它是否可以使用JSON解析器解析,并确认它可以解析…
那么,为什么我会得到这个例外

020-09-10 17:04:41.878  INFO 5946 --- [ntainer#1-0-C-1] o.a.k.c.c.internals.SubscriptionState    : [Consumer clientId=consumer-group_id-2, groupId=group_id] Resetting offset for partition order-0 to offset 0.
2020-09-10 17:04:41.879  INFO 5946 --- [ntainer#1-0-C-1] o.s.k.l.KafkaMessageListenerContainer    : group_id: partitions assigned: [order-0]
2020-09-10 17:04:55.250 ERROR 5946 --- [ntainer#1-0-C-1] o.s.k.l.SeekToCurrentErrorHandler        : Backoff none exhausted for ConsumerRecord(topic = order, partition = 0, leaderEpoch = 0, offset = 0, CreateTime = 1599746694173, serialized key size = -1, serialized value size = 160, headers = RecordHeaders(headers = [], isReadOnly = false), key = null, value = {"uid":1, "orderId":1, "userCookie": 0, "size": 1, "action": "ASK", "orderType": "IOC", "symbol": "ABC", "deals":null, "price":1, "filled": 0, "state":"ACTIVE"})

org.springframework.kafka.listener.ListenerExecutionFailedException: Listener method could not be invoked with the incoming message
Endpoint handler details:
Method [public void  tradeapi.service.KafkaExchangeApi.handleOrderResponse( tradeapi.model.internal.GatewayOrder)]
Bean [ tradeapi.service.KafkaExchangeApi@2143ea5e]; nested exception is org.springframework.messaging.converter.MessageConversionException: Cannot handle message; nested exception is org.springframework.messaging.converter.MessageConversionException: Cannot convert from [java.lang.String] to [ tradeapi.model.internal.GatewayOrder] for GenericMessage [payload={"uid":1, "orderId":1, "userCookie": 0, "size": 1, "action": "ASK", "orderType": "IOC", "symbol": "ABC", "deals":null, "price":1, "filled": 0, "state":"ACTIVE"}, headers={kafka_offset=0, kafka_consumer=org.apache.kafka.clients.consumer.KafkaConsumer@fb7548f, kafka_timestampType=CREATE_TIME, kafka_receivedPartitionId=0, kafka_receivedTopic=order, kafka_receivedTimestamp=1599746694173, kafka_groupId=group_id}], failedMessage=GenericMessage [payload={"uid":1, "orderId":1, "userCookie": 0, "size": 1, "action": "ASK", "orderType": "IOC", "symbol": "ABC", "deals":null, "price":1, "filled": 0, "state":"ACTIVE"}, headers={kafka_offset=0, kafka_consumer=org.apache.kafka.clients.consumer.KafkaConsumer@fb7548f, kafka_timestampType=CREATE_TIME, kafka_receivedPartitionId=0, kafka_receivedTopic=order, kafka_receivedTimestamp=1599746694173, kafka_groupId=group_id}]; nested exception is org.springframework.messaging.converter.MessageConversionException: Cannot handle message; nested exception is org.springframework.messaging.converter.MessageConversionException: Cannot convert from [java.lang.String] to [ tradeapi.model.internal.GatewayOrder] for GenericMessage [payload={"uid":1, "orderId":1, "userCookie": 0, "size": 1, "action": "ASK", "orderType": "IOC", "symbol": "ABC", "deals":null, "price":1, "filled": 0, "state":"ACTIVE"}, headers={kafka_offset=0, kafka_consumer=org.apache.kafka.clients.consumer.KafkaConsumer@fb7548f, kafka_timestampType=CREATE_TIME, kafka_receivedPartitionId=0, kafka_receivedTopic=order, kafka_receivedTimestamp=1599746694173, kafka_groupId=group_id}], failedMessage=GenericMessage [payload={"uid":1, "orderId":1, "userCookie": 0, "size": 1, "action": "ASK", "orderType": "IOC", "symbol": "ABC", "deals":null, "price":1, "filled": 0, "state":"ACTIVE"}, headers={kafka_offset=0, kafka_consumer=org.apache.kafka.clients.consumer.KafkaConsumer@fb7548f, kafka_timestampType=CREATE_TIME, kafka_receivedPartitionId=0, kafka_receivedTopic=order, kafka_receivedTimestamp=1599746694173, kafka_groupId=group_id}]
    at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.decorateException(KafkaMessageListenerContainer.java:1925) ~[spring-kafka-2.5.5.RELEASE.jar:2.5.5.RELEASE]
    at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeErrorHandler(KafkaMessageListenerContainer.java:1913) ~[spring-kafka-2.5.5.RELEASE.jar:2.5.5.RELEASE]
    at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.doInvokeRecordListener(KafkaMessageListenerContainer.java:1812) ~[spring-kafka-2.5.5.RELEASE.jar:2.5.5.RELEASE]
    at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.doInvokeWithRecords(KafkaMessageListenerContainer.java:1739) ~[spring-kafka-2.5.5.RELEASE.jar:2.5.5.RELEASE]
    at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeRecordListener(KafkaMessageListenerContainer.java:1636) ~[spring-kafka-2.5.5.RELEASE.jar:2.5.5.RELEASE]
    at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeListener(KafkaMessageListenerContainer.java:1366) ~[spring-kafka-2.5.5.RELEASE.jar:2.5.5.RELEASE]
    at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.pollAndInvoke(KafkaMessageListenerContainer.java:1082) ~[spring-kafka-2.5.5.RELEASE.jar:2.5.5.RELEASE]
    at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.run(KafkaMessageListenerContainer.java:990) ~[spring-kafka-2.5.5.RELEASE.jar:2.5.5.RELEASE]
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) ~[na:na]
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
    at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
Caused by: org.springframework.messaging.converter.MessageConversionException: Cannot handle message; nested exception is org.springframework.messaging.converter.MessageConversionException: Cannot convert from [java.lang.String] to [ tradeapi.model.internal.GatewayOrder] for GenericMessage [payload={"uid":1, "orderId":1, "userCookie": 0, "size": 1, "action": "ASK", "orderType": "IOC", "symbol": "ABC", "deals":null, "price":1, "filled": 0, "state":"ACTIVE"}, headers={kafka_offset=0, kafka_consumer=org.apache.kafka.clients.consumer.KafkaConsumer@fb7548f, kafka_timestampType=CREATE_TIME, kafka_receivedPartitionId=0, kafka_receivedTopic=order, kafka_receivedTimestamp=1599746694173, kafka_groupId=group_id}], failedMessage=GenericMessage [payload={"uid":1, "orderId":1, "userCookie": 0, "size": 1, "action": "ASK", "orderType": "IOC", "symbol": "ABC", "deals":null, "price":1, "filled": 0, "state":"ACTIVE"}, headers={kafka_offset=0, kafka_consumer=org.apache.kafka.clients.consumer.KafkaConsumer@fb7548f, kafka_timestampType=CREATE_TIME, kafka_receivedPartitionId=0, kafka_receivedTopic=order, kafka_receivedTimestamp=1599746694173, kafka_groupId=group_id}]
    at org.springframework.kafka.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:340) ~[spring-kafka-2.5.5.RELEASE.jar:2.5.5.RELEASE]
    at org.springframework.kafka.listener.adapter.RecordMessagingMessageListenerAdapter.onMessage(RecordMessagingMessageListenerAdapter.java:86) ~[spring-kafka-2.5.5.RELEASE.jar:2.5.5.RELEASE]
    at org.springframework.kafka.listener.adapter.RecordMessagingMessageListenerAdapter.onMessage(RecordMessagingMessageListenerAdapter.java:51) ~[spring-kafka-2.5.5.RELEASE.jar:2.5.5.RELEASE]
    at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.doInvokeOnMessage(KafkaMessageListenerContainer.java:1880) ~[spring-kafka-2.5.5.RELEASE.jar:2.5.5.RELEASE]
    at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeOnMessage(KafkaMessageListenerContainer.java:1862) ~[spring-kafka-2.5.5.RELEASE.jar:2.5.5.RELEASE]
    at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.doInvokeRecordListener(KafkaMessageListenerContainer.java:1799) ~[spring-kafka-2.5.5.RELEASE.jar:2.5.5.RELEASE]
    ... 8 common frames omitted
Caused by: org.springframework.messaging.converter.MessageConversionException: Cannot convert from [java.lang.String] to [ tradeapi.model.internal.GatewayOrder] for GenericMessage [payload={"uid":1, "orderId":1, "userCookie": 0, "size": 1, "action": "ASK", "orderType": "IOC", "symbol": "ABC", "deals":null, "price":1, "filled": 0, "state":"ACTIVE"}, headers={kafka_offset=0, kafka_consumer=org.apache.kafka.clients.consumer.KafkaConsumer@fb7548f, kafka_timestampType=CREATE_TIME, kafka_receivedPartitionId=0, kafka_receivedTopic=order, kafka_receivedTimestamp=1599746694173, kafka_groupId=group_id}]
    at org.springframework.messaging.handler.annotation.support.PayloadMethodArgumentResolver.resolveArgument(PayloadMethodArgumentResolver.java:145) ~[spring-messaging-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.kafka.annotation.KafkaListenerAnnotationBeanPostProcessor$KafkaNullAwarePayloadArgumentResolver.resolveArgument(KafkaListenerAnnotationBeanPostProcessor.java:901) ~[spring-kafka-2.5.5.RELEASE.jar:2.5.5.RELEASE]
    at org.springframework.messaging.handler.invocation.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:117) ~[spring-messaging-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:148) ~[spring-messaging-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:116) ~[spring-messaging-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.kafka.listener.adapter.HandlerAdapter.invoke(HandlerAdapter.java:48) ~[spring-kafka-2.5.5.RELEASE.jar:2.5.5.RELEASE]
    at org.springframework.kafka.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:329) ~[spring-kafka-2.5.5.RELEASE.jar:2.5.5.RELEASE]
    ... 13 common frames omitted

使用
StringDeserializer
时,需要向应用程序添加
JsonMessageConverter
@Bean
。请参阅-Boot将自动将其配置到侦听器容器工厂中

使用
ByteArraydSerializer
可以更有效地避免不必要的
字节[]
字符串的转换

或者,您可以使用适当配置的
JsonDeserializer
对kafka使用者配置进行修改


无论哪种方式,您都需要将Jackson添加到类路径。

使用
StringDeserializer
您需要向应用程序添加
JsonMessageConverter
@Bean
。请参阅-Boot将自动将其配置到侦听器容器工厂中

使用
ByteArraydSerializer
可以更有效地避免不必要的
字节[]
字符串的转换

或者,您可以使用适当配置的
JsonDeserializer
对kafka使用者配置进行修改


无论哪种方式,您都需要将Jackson添加到类路径。

您可以发布消息和类网关顺序吗。也张贴configurations@TusharJajodia谢谢我已经编辑了我的问题并添加了您告诉我的信息。显示完整的堆栈trrace。@GaryRussell谢谢,为问题添加了堆栈跟踪。您能发布消息和类GatewayOrder吗。也张贴configurations@TusharJajodia谢谢我已经编辑了我的问题,并添加了您告诉我的信息。显示完整的堆栈跟踪。@GaryRussell谢谢,为问题添加了堆栈跟踪。