使用 Spring 集成 DSL 的中流文件采购
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-method:
/**
* 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) {
通过这种方式,您可以根据请求消息调用任何您需要的内容,并将所有内容存储在输出负载中。
请在 Reference Manual 中查看有关 Enricher
的更多信息。
你也可以看看sample。我知道一个在XML配置上,但原理是一样的。
更新
对于这个技巧,您需要将您的请求 File
包装到 Collection
(当然是 List
)以及您刚刚添加到此集合中的所有其他文件简单 addAll()
表达式。
另一个更好的解决方案是 .gateway()
。因此,您将文件发送到那里,并与其他人一起 return a Collection
。这样一来,您的流程应该足够顺畅,只需处理上游的一个文件和下游的集合。
我需要创建一个流程,每当在一个文件夹中收到一个文件时,它就会从另一个文件夹中挑选一些其他预先存在的文件,转换所有这些文件(包括新收到的)使用相同的 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-method:
/**
* 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) {
通过这种方式,您可以根据请求消息调用任何您需要的内容,并将所有内容存储在输出负载中。
请在 Reference Manual 中查看有关 Enricher
的更多信息。
你也可以看看sample。我知道一个在XML配置上,但原理是一样的。
更新
对于这个技巧,您需要将您的请求 File
包装到 Collection
(当然是 List
)以及您刚刚添加到此集合中的所有其他文件简单 addAll()
表达式。
另一个更好的解决方案是 .gateway()
。因此,您将文件发送到那里,并与其他人一起 return a Collection
。这样一来,您的流程应该足够顺畅,只需处理上游的一个文件和下游的集合。