在单个集成流程中使用多个AWS Outbound适配器

时间:2019-09-04 21:37:14

标签: spring-integration spring-integration-aws

***强文本***我想在单个集成流程中使用2个AWS Outbound适配器。一个是出站S3适配器,一个是出站SQS适配器。我必须将文件从smb share移到S3存储桶,然后使用转换器,然后使用SQS适配器将转换后的消息发送到SQS队列。我可以通过2个集成流程来实现此目的,但我只想通过一个集成流程来实现。如果我将一个流的两个出站适配器部分都添加进来,那么只有其中一个正在工作

1 个答案:

答案 0 :(得分:1)

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

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

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

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

更新

由于在.enrichHeaders(h->h.header("bucketName”,”mybucket”))之前已经有一个publishSubscribeChannel(),因此事实上,这两个下游订户都可以使用。

要从s3MessageHandler对其进行访问,必须按以下方式对其进行配置:

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

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