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