Spring 云中的反序列化
Deserialization in Spring Cloud
我有一个内容类型配置如下的制作人
spring:
cloud:
stream:
bindings:
eventOut:
destination: lab_csi
content-type: application/json
在消费者方面,我使用 spring 集成 (KinesisMessageDrivenChannelAdapter) 将事件路由到不同的 channels.When 我在监听器 class 上收到消息,如下所示:
@ServiceActivator(inputChannel = "channelA")
void handleMessage(Message<?> msg) {
objectMapper.readValue(msg.getPayload(), MyEvent.class);
}
编组到 MyEvent 失败。在堆栈错误中,我可以看到内容类型是有效负载的一部分,并且有效负载仍未从 json 反序列化为 POJO。
我想知道如何在进行任何其他转换之前反序列化消息。我找不到任何可以将 MessageConverter 设置为适配器的方法。
感谢您的帮助。
谢谢
听起来您的生产者是 Spring Cloud Stream,但消费者只是普通的 KinesisMessageDrivenChannelAdapter
。不清楚为什么不使用 Spring Cloud Stream 消费者,但无论如何......
您的问题是 SCSt 生产者将消息 headers 连同有效负载一起序列化到 Kinesis 记录 body 中。仅仅因为 AWS Kinesis 本身不支持 headers。
如果您真的对消费者端的 headers 不感兴趣,您可以禁用生产者端的嵌入 headers:
spring:
cloud:
stream:
bindings:
eventOut:
destination: lab_csi
producer:
headerMode: none
否则,除非您手动使用 EmbeddedHeaderUtils
,否则您在普通 KinesisMessageDrivenChannelAdapter
方面别无选择。
我有一个内容类型配置如下的制作人
spring:
cloud:
stream:
bindings:
eventOut:
destination: lab_csi
content-type: application/json
在消费者方面,我使用 spring 集成 (KinesisMessageDrivenChannelAdapter) 将事件路由到不同的 channels.When 我在监听器 class 上收到消息,如下所示:
@ServiceActivator(inputChannel = "channelA")
void handleMessage(Message<?> msg) {
objectMapper.readValue(msg.getPayload(), MyEvent.class);
}
编组到 MyEvent 失败。在堆栈错误中,我可以看到内容类型是有效负载的一部分,并且有效负载仍未从 json 反序列化为 POJO。
我想知道如何在进行任何其他转换之前反序列化消息。我找不到任何可以将 MessageConverter 设置为适配器的方法。
感谢您的帮助。
谢谢
听起来您的生产者是 Spring Cloud Stream,但消费者只是普通的 KinesisMessageDrivenChannelAdapter
。不清楚为什么不使用 Spring Cloud Stream 消费者,但无论如何......
您的问题是 SCSt 生产者将消息 headers 连同有效负载一起序列化到 Kinesis 记录 body 中。仅仅因为 AWS Kinesis 本身不支持 headers。
如果您真的对消费者端的 headers 不感兴趣,您可以禁用生产者端的嵌入 headers:
spring:
cloud:
stream:
bindings:
eventOut:
destination: lab_csi
producer:
headerMode: none
否则,除非您手动使用 EmbeddedHeaderUtils
,否则您在普通 KinesisMessageDrivenChannelAdapter
方面别无选择。