【发布时间】:2015-07-22 14:55:56
【问题描述】:
我有一个编排流程,它调用一个子流程来写入文件,然后下一个流程(通过流程引用)对它进行 sftp。
写子流
<file:outbound-endpoint path="${outputDir}" outputPattern="${fileName}" responseTimeout="10000" doc:name="Write file"/>
<logger message="File ${fileName} written to ${outputDir}" level="INFO" doc:name="End"/>
然后我调用一个启动 sftp 进程的流(通过 ref)。
<flow name="sftp">
<file:inbound-endpoint path="${outputDir}" connector-ref="File" responseTimeout="10000" doc:name="File">
<file:filename-regex-filter pattern="${fileName}" caseSensitive="true"/>
</file:inbound-endpoint>
<sftp:outbound-endpoint exchange-pattern="one-way" connector-ref="SFTP" responseTimeout="10000" ref="endpoint" doc:name="SFTP" />
</flow>
问题是
在写入文件时,流程会在文件出站端点之后执行记录器并说文件已写入,然后文件连接器会吐出“将文件写入...”。我如何让记录器等待文件完成写入??
上述流 sftp 中的文件入站端点立即执行,文件尚未准备好。所以它首先抛出一个异常,说它期望一个 InputStream 或 byte[] 或 String 但得到一个 ArrayList(这是来自编排流的原始有效负载)。打印此异常后,最终文件准备就绪,入站文件连接器开始读取它并正常 sftps。这似乎与上述问题有关,我需要以某种方式使流程的其余部分等待文件写入完成。
注意:我必须将 sftp 流创建为流而不是子流,因为它需要是源。我想如果我不创建一个流并且没有文件连接器作为源,它将成为出站连接器。
任何帮助表示赞赏。
【问题讨论】: