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
!