[英]Mid-flow file sourcing with Spring Integration DSL
我需要创建一个流程,每当一个文件夹收到一个文件时,它就会从不同的文件夹中提取一些其他预先存在的文件,使用相同的transformer
转换所有文件(包括新接收的文件)和然后聚合它们以创建单个输出。 我想我可以使用splitter
- aggregator
方法来执行转换和聚合步骤; 但我不知道我可以使用什么 SI 组件类型(如果有)将新文件(从启动流程执行的原始MessageSource
收到的文件)与同一流程中的现有文件合并。
我正在处理的项目使用spring-integration-core-5.0.11.RELEASE
和spring-integration-file-5.0.11.RELEASE
,我们正在使用 Spring Integration DSL 创建流。
请考虑使用a。 .enrich()
EIP 方法:
/**
* Populate a {@link org.springframework.integration.transformer.ContentEnricher}
* to the current integration flow position
* with provided options.
* Typically used with a Java 8 Lambda expression:
* <pre class="code">
* {@code
* .enrich(e -> e.requestChannel("enrichChannel")
* .requestPayload(Message::getPayload)
* .shouldClonePayload(false)
* .autoStartup(false)
* .<Map<String, String>>headerFunction("foo", m -> m.getPayload().get("name")))
* }
* </pre>
* @param enricherConfigurer the {@link Consumer} to provide
* {@link org.springframework.integration.transformer.ContentEnricher} options.
* @return the current {@link IntegrationFlowDefinition}.
* @see EnricherSpec
*/
public B enrich(Consumer<EnricherSpec> enricherConfigurer) {
通过这种方式,您可以根据请求消息调用您需要的任何内容,并将所有内容存储在输出负载中。
请参阅参考手册中有关Enricher
更多信息。
您也可以查看示例。 我知道一个是关于 XML 配置的,但原理是一样的。
更新
对于这个技巧,您需要将您的请求File
包装到Collection
(当然是List
)以及您只需使用简单的addAll()
表达式添加到此集合中的所有其他文件。
另一个更好的解决方案是使用.gateway()
。 因此,您将文件发送到那里,然后与其他人一起返回一个Collection
。 通过这种方式,您的流程应该足够流畅,只需处理上游的一个文件和下游的集合。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.