Spring integration springcloud中的反序列化

Spring integration springcloud中的反序列化,spring-integration,amazon-kinesis,spring-cloud-stream,spring-integration-aws,Spring Integration,Amazon Kinesis,Spring Cloud Stream,Spring Integration Aws,我有一个内容类型配置如下的生产者 spring: cloud: stream: bindings: eventOut: destination: lab_csi content-type: application/json 在消费者方面,我使用spring集成(KinesisMessageDrivenChannelAdapter)将事件路由到不同的通道。当我在侦听器类上收到消息时,如下所示: @ServiceAct

我有一个内容类型配置如下的生产者

spring:
  cloud:
    stream:
      bindings:
        eventOut:
          destination: lab_csi
          content-type: application/json
在消费者方面,我使用spring集成(KinesisMessageDrivenChannelAdapter)将事件路由到不同的通道。当我在侦听器类上收到消息时,如下所示:

@ServiceActivator(inputChannel = "channelA")
    void handleMessage(Message<?> msg) {
        objectMapper.readValue(msg.getPayload(), MyEvent.class);
    }
@ServiceActivator(inputChannel=“channelA”)
无效handleMessage(消息消息消息){
readValue(msg.getPayload(),MyEvent.class);
}
到MyEvent的编组失败。在堆栈错误中,我可以看到内容类型是有效负载的一部分,并且有效负载仍然没有从json反序列化到POJO

我想知道如何在进行任何其他转换之前对消息进行反序列化。我找不到任何可以将MessageConverter设置为适配器的方法

我感谢你的帮助


谢谢

听起来你的制作人是Spring Cloud Stream,但消费者只是普通的
动画片。这还不清楚为什么不使用SpringCloudStream消费者,但无论如何

您的问题是,SCSt producer将消息头与负载一起序列化到Kinesis记录体中。只是因为AWS Kinesis本身不支持标题

如果您确实对使用者端的头不感兴趣,可以禁用生产者端的嵌入头:

spring:
  cloud:
    stream:
      bindings:
        eventOut:
          destination: lab_csi
        producer:
        headerMode: none

否则,除非您手动使用
嵌入的HeaderUtils
,否则您在普通
动画片消息驱动ChannelAdapter
侧没有选择。

谢谢Artem!你完全正确,用户SpringCloud用于生产,SpringIntegration用于消费端没有多大意义。原因是我发现SpringCloudProducer很容易用于测试目的。我只想将事件发布到流媒体。您对生产者端使用spring integration有什么建议吗?
KinesismMessageHandler
@Bean
使用
@ServiceActivator
来配置发送到AWS Kinesis的通道。然而,您几乎已经做到了:只需在生产者端配置
headerMode:none