繁体   English   中英

使用 Spring Integration DSL 的中流文件采购

[英]Mid-flow file sourcing with Spring Integration DSL

我需要创建一个流程,每当一个文件夹收到一个文件时,它就会从不同的文件夹中提取一些其他预先存在的文件,使用相同的transformer转换所有文件(包括新接收的文件)和然后聚合它们以创建单个输出。 我想我可以使用splitter - aggregator方法来执行转换和聚合步骤; 但我不知道我可以使用什么 SI 组件类型(如果有)将新文件(从启动流程执行的原始MessageSource收到的文件)与同一流程中的现有文件合并。

我正在处理的项目使用spring-integration-core-5.0.11.RELEASEspring-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM