【发布时间】:2020-07-12 11:09:36
【问题描述】:
我正在实施一个 Spring Integration 工作流程,如下所示。
IntegrationFlows.from("inputFileProcessorChannel")
.split(fileSplitterSpec, spec -> {})
.transform(lineItemTransformer)
.handle(httpRequestExecutingMessageHandler)
.transform(reportDataAggregator)
.aggregate(aggregatorSpec -> aggregatorSpec.requiresReply(false))
.channel("reportGeneratorChannel")
.get();
现在,一旦完成上述流程,我需要将input file 移动到存档目录。决定目标目录的决定基于消息头processingFailed,并且此头添加到流程中的.transform(reportDataAggregator) 步骤中。为了移动这些文件,我创建了另一个流程,如下面的代码
IntegrationFlows.from(MessageChannels.direct("inputFileProcessorChannel"))
.routeToRecipients(routerSpec -> {
routerSpec.recipient("processedFileMoverChannel", createMessageSelector(Boolean.FALSE))
.recipient("failedFileMoverChannel", createMessageSelector(Boolean.TRUE));
})
.get();
选择器方法
private MessageSelector createMessageSelector(Boolean ruleBoolean) {
return message -> ruleBoolean.equals(message.getHeaders().get("processingFailed"));
}
报告下面的渠道流
IntegrationFlows.from("reportGeneratorChannel")
.transform(executionReportTransformer)
.handle(reportWritingMessageHandlerSpec)
.get();
但是,正如该流程所预期的那样,文件移动并未完成,因为所述标头不存在于流程执行中。
那么,如何在报表文件创建后执行file mover flow来实现这个目标呢?
【问题讨论】:
-
您有两个来自
inputFileProcessorChannel的流使用 - 如果它是DirectChannel,它们将获得备用消息(默认情况下)。reportGeneratorChannel消耗了什么? -
是的,谢谢 Gary,我在 DirectChannel 中看到了这个问题。会改变它。
reportGeneratorChannel是终端操作。之后没有消费者
标签: spring spring-integration spring-integration-dsl