0

再会,

我正在使用 spring integration 2.2 将侦听器构建到一个文件夹。我可以知道如何在文件传输中途检查我的听众是否会拾取文件?还是会等到完整的文件传输完毕?

假设有一个 10MB 的 txt 文件,但由于互联网速度慢,文件需要 10 秒才能传输到文件夹。假设在第 5 秒,文件只传输了 5MB,还有 5MB 走,听者可能去拾取文件并处理?

这是我在 xml 中的侦听器代码的一部分:

<int-file:inbound-channel-adapter id="hostFilesIn" directory="${hostfile.dir.in}" 
         prevent-duplicates="true"  filename-regex="${hostfile.in.filename-regex}">
        <int:poller id="poller" fixed-rate="${poller.fixrate:15000}" max-messages-per-poll="1" />
    </int-file:inbound-channel-adapter>

如果需要更多信息,请告诉我。

这是发生的问题:

从日志中,我们可以看到一个文件被添加到队列中,

2019-02-01 11:13:33.011 [task-scheduler-9] DEBUG org.springframework.integration.file.FileReadingMessageSource - Added to queue: [/apps/NAS/ftp/in/incompleteL041.TXT]

之后遇到以下错误:

2019-02-01 11:13:33.096 [task-scheduler-9] DEBUG c.c.c.c.g.a.auditservice.SimpleErrorIdResolver - ERROR MESSAGE7 : 
java.io.FileNotFoundException: /apps/NAS/ftp/in/incompleteL041.TXT (A file or directory in the path name does not exist.)

这是因为,当文件传输完成后,它会将其重命名为 L041.TXT。

好心提醒。

4

1 回答 1

1

你的理解是完全正确的。这就是文件系统的行为方式。如果文件已经存在,即使它仍处于写入模式,它对包括提到的文件读取消息源在内的所有其他人都是可见的。

为了防止读取未完成的文件,当未完成的文件具有不同的名称时,您确实需要实现一个逻辑,并且文件入站通道适配器上的过滤器应该配置为他们看不到这样的文件的方式。

像这样的正则表达式^(incomplete).*?\.TXT应该适用于您当前的解释。

于 2019-02-11T14:26:15.237 回答