Spring integration 如何从spring cloud stream(aws kinesis binder)将自定义标题发送到;“遗产”;spring集成消费者

Spring integration 如何从spring cloud stream(aws kinesis binder)将自定义标题发送到;“遗产”;spring集成消费者,spring-integration,spring-cloud-stream,spring-integration-aws,Spring Integration,Spring Cloud Stream,Spring Integration Aws,我有两个应用程序——第一个是使用AWS Kinesis Binder的spring cloud stream/function生成消息的应用程序,第二个是基于spring集成构建的用于消费消息的应用程序。两者之间的通信不是问题——我可以从“流”发送消息,并在“集成”中轻松处理 当我想发送一个自定义标题时,就会出现一个问题。报头作为使用“新”格式的嵌入式报头到达消费者(在开始处有一个0xff等)-请参阅AbstractMessageChannelBinder#serializeAndEmbedHe

我有两个应用程序——第一个是使用AWS Kinesis Binder的spring cloud stream/function生成消息的应用程序,第二个是基于spring集成构建的用于消费消息的应用程序。两者之间的通信不是问题——我可以从“流”发送消息,并在“集成”中轻松处理

当我想发送一个自定义标题时,就会出现一个问题。报头作为使用“新”格式的嵌入式报头到达消费者(在开始处有一个0xff等)-请参阅AbstractMessageChannelBinder#serializeAndEmbedHeadersIfApplicable in spring cloud stream

然而,KinesisMessageDrivenChannelAdapter(spring integration aws)似乎并不理解“新”的嵌入头形式。它使用EmbeddedJsonHeadersMessageMapper(请参阅#toMessage),无法“解码”消息。它抛出一个
com.fasterxml.jackson.core.JsonParseException:无法识别的标记“ÿ”:应为(JSON字符串、数字、数组、对象或标记“null”、“true”或“false”)
,因为嵌入的头中包含其他信息(0xff等)

我需要通过导线发送标头(标头用于在另一侧进行路由),因此不能在生产者上“关闭”标头。我看不到使用“旧”嵌入头的方法

我想在制作人方面使用SpringCloud流/函数——这太棒了。我希望我能重做消费者,但是

我可以编写我自己的嵌入式头映射器来理解新的格式(使用EmbeddedHeaderUtils),并将其连接到KinesismMessageDrivenChannelAdapter中

考虑到SpringCloudStream和SpringIntegration之间的密切关系,我一定是做错了什么。Spring集成是否有一个理解新嵌入表单的OutboundMessageMapper

或者有没有办法强制SpringCloudStream使用不同的嵌入策略

我可以在制作端使用Spring集成。(悲伤的脸)

有什么想法吗?提前谢谢

了解新格式

它不是一种“新”格式,它是SpringCloudStream创建的一种格式,最初是为Kafka创建的,它只在0.11中添加了头支持

我可以编写自己的嵌入式头映射器,以理解新格式(使用
EmbeddedHeaderUtils
),并将其连接到
kinesismsessagedrivenchannelAdapter

我建议您这样做,并考虑<代码> EmbeddedJsonHeadersMessageMapper <代码>,以便它可以与不支持头的所有技术一起使用。