Apache kafka Kafka Spring云流批处理消耗-无法将类强制转换为消息

Apache kafka Kafka Spring云流批处理消耗-无法将类强制转换为消息,apache-kafka,spring-kafka,spring-cloud-stream,Apache Kafka,Spring Kafka,Spring Cloud Stream,在Spring Cloud Stream批处理模式下使用KafkAvroSerialized消息时出现以下错误消息。这是早期在非批处理模式下可以正常工作的 下面是将现有应用程序转换为批处理模式所做的两项更改- 在application.yml启用的属性批处理模式中:true 2)修改了列表的参数,该参数以前是一条消息 错误消息:org.springframework.messaging.MessageException:调用MyConsumer#consume[1 args]时引发异常;嵌套异常

在Spring Cloud Stream批处理模式下使用KafkAvroSerialized消息时出现以下错误消息。这是早期在非批处理模式下可以正常工作的

下面是将现有应用程序转换为批处理模式所做的两项更改-

  • 在application.yml启用的属性批处理模式中:true 2)修改了列表的参数,该参数以前是一条消息

    错误消息:org.springframework.messaging.MessageException:调用MyConsumer#consume[1 args]时引发异常;嵌套异常为java.lang.ClassCastException:SomeClass不能强制转换为org.springframework.messaging.Message


  • 请帮助解决此问题。

    我已成功以批处理模式获取标题,但它们已包装在列表中

    如果需要访问元数据和其他标题,则不能使用@StreamListener,需要使用函数式编程方法编写使用者函数,例如:

    @Bean
    Consumer<Message<List<String>>> input() {
        return list -> {
            System.out.println(list);
        };
    }
    
    参考:


    我注意到的区别是,以前在非批处理模式下,我使用kafka头接收GenericMessage,但在批处理模式下,我直接接收没有kafka头的有效负载。我发现@StreamListener不能使用批处理模式。我指的是这里提到的例子。但是,我不确定Spring如何知道在同一应用程序中多个绑定消耗多个主题时调用哪个方法。但我面临的唯一问题是我失去了卡夫卡的头球。我直接得到的是有效载荷,不再是一般信息。我面临着类似的问题,你的解决方案有效吗?
    spring:
      profiles: dev
      cloud:
        stream:
          function:
            definition: input
          bindings:
            input-in-0:
              destination: yourDestination
              group: yourGroup