首页 > 解决方案 > 在单个集成流中使用多个 aws 出站适配器

问题描述

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

标签: spring-integrationspring-integration-aws

解决方案


确实如此,两个Outbound channel Adapters一个接一个是不行的。仅仅因为单向组件不返回任何内容作为有效负载发送到输出通道。

您可能需要熟悉该publish-subscribe模式:https ://www.enterpriseintegrationpatterns.com/patterns/messaging/PublishSubscribeChannel.html 。

在其中,IntegrationFlow您只需要配置publishSubscribeChannel具有两个订阅者的 a 作为不同通道适配器的子流。

有关更多信息,请参阅文档:https ://docs.spring.io/spring-integration/docs/5.1.7.RELEASE/reference/html/#java-dsl-subflows

更新

由于您已经有一个.enrichHeaders(h->h.header("bucketName”,”mybucket”))before publishSubscribeChannel(),事实是这个将可供下游的两个订阅者使用。

要从 访问它s3MessageHandler,您必须像这样配置它:

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

要为您的下一个 SQS 订阅者部分访问该标头,您需要更改您的transform()方法签名以接受整个Message<>,因此您可以再次访问标头以为 SQS 构建一些自定义消息。


推荐阅读