Spring integration 在单个集成流中使用多个aws出站适配器

Spring integration 在单个集成流中使用多个aws出站适配器,spring-integration,spring-integration-aws,Spring Integration,Spring Integration Aws,***强文本***我想在单个集成流中使用2个aws出站适配器。一个是出站S3适配器,一个是出站SQS适配器。我必须将文件从smb共享移动到S3存储桶,然后使用转换器,然后使用SQS适配器将转换后的消息发送到SQS队列。我可以用2个集成流实现这一点,但我只想用一个集成流实现这一点。如果我将两个出站适配器都添加到一个流中,那么只有一个出站适配器工作没错,两个出站通道适配器不能一个接一个地工作。这仅仅是因为单向组件不返回任何要作为有效负载发送到输出通道的内容 您可能需要熟悉发布-订阅模式: 在Inte

***强文本***我想在单个集成流中使用2个aws出站适配器。一个是出站S3适配器,一个是出站SQS适配器。我必须将文件从smb共享移动到S3存储桶,然后使用转换器,然后使用SQS适配器将转换后的消息发送到SQS队列。我可以用2个集成流实现这一点,但我只想用一个集成流实现这一点。如果我将两个出站适配器都添加到一个流中,那么只有一个出站适配器工作

没错,两个出站通道适配器不能一个接一个地工作。这仅仅是因为单向组件不返回任何要作为有效负载发送到输出通道的内容

您可能需要熟悉发布-订阅模式:

在IntegrationFlow中,您只需要配置一个publishSubscribeChannel,其中两个订阅服务器作为不同通道适配器的子流

有关更多信息,请参阅文档:

更新

因为在publishSubscribeChannel之前已经有了一个.EnrichHeaders->h.headerbucketName”,“mybucket”,所以这一个将对下游的两个订阅者都可用

要从s3MessageHandler访问它,必须如下配置:

public MessageHandler s3MessageHandler() {
    S3MessageHandler handler = new S3MessageHandler(amazonS3, 
             new FunctionExpression<>(m -> m.getHeaders().get(”mybucket”)));
    return handler;
}

要为下一个SQS订户部件访问该报头,您需要更改转换方法签名以接受整个消息,这样您就可以再次访问报头,以便为SQS构建一些自定义消息。

好的,最好的方法是在发送到publishSubscribeChannel之前将该信息存储在报头中。因此,S3出站通道适配器将使用它们来存储远程文件,而SQS通道适配器将为其目标重用相同的信息?在S3MessageHandler上配置bucketExpression和keyExpression有什么坏处?请编辑您的问题。注释中的代码片段不可读。???我说:编辑你的问题,而不是我的答案。请小心,尊重他人。你还需要记住,我们也有我们的工作要做。因此,我们在这里的帮助是宝贵的。谢谢你的理解。请将其作为代码发布,而不是图片。它将有助于复制/粘贴和编辑。不,它仍然不可读。编辑自己的问题有什么错?S3通道适配器在哪里?你的变形金刚是做什么的?因为你的代码,有很多问题。我不知道如何从这里帮助你。。。很抱歉