使用camel-smb smb在仍要写入的情况下拾取(大)文件



在尝试创建文件的循环移动时,使用readLock遇到了奇怪的行为。创建一个大文件(一些100Mb(,并使用SMB将其从文件夹外传输到文件夹内。

来自:

smb2://smbuser:****@localhost:4455/user/out?antInclude=FILENAME*&consumer.bridgeErrorHandler=true&delay=10000&inProgressRepository=%23inProgressRepository&readLock=changed&readLockMinLength=1&readLockCheckInterval=1000&readLockTimeout=5000&streamDownload=true&username=smbuser&delete=true

收件人:

smb2://smbuser:****@localhost:4455/user/in?username=smbuser

创建另一个流,将文件从IN移回OUT文件夹。在一些传输之后,文件将被拾取,同时仍由另一个路由写入,并且传输将使用一个小得多的文件进行,从而在目的地产生一个部分文件。

来自:

smb2://smbuser:****@localhost:4455/user/in?antInclude=FILENAME*&delete=true&readLock=changed&readLockMinLength=1&readLockCheckInterval=1000&readLockTimeout=5000&streamDownload=false&delay=10000

收件人:

smb2://smbuser:****@localhost:4455/user/out

问题是:为什么我的readLock工作不正常(需要p.s.streamDownload(?

UPDATE:事实证明,这只发生在windows samba共享上,并且streamDownload=true。所以,一些关于流块的东西。欢迎任何建议。

解决方案需要防止轮询策略自动拾取文件,并注意另一端的readLock(正在进行中(。因此,我将延迟降低到5秒,在FROM部分,在两侧,我将readLockMinAge添加到5s,这将检查文件修改时间。由于流传输每秒钟进行一次,因此这段时间足以防止读取锁定。

解释为什么会出现前面提到的情况:

  1. 当路由准备从out文件夹中提取时,中的一个大文件(1GB(将逐块前进到文件夹中。流式传输文件的末尾标记为camel smbj的删除和文件接收状态status_DELETE_PENDING
  2. 现在,这个过程的另一部分开始将新到达的文件发送到out文件夹,并发现该文件已经存在。由于默认的fileExists=覆盖策略它尝试删除(之后存储(一个现有文件(该文件仍未从上一步中删除(,并接收一个导致某些InputStream的异常要丢失的块

相关内容

最新更新