当前位置: 首页 > 知识库问答 >
问题:

ftp完成前Camel路由拾取文件

曾光远
2023-03-14

我有一个客户谁的FTP文件通过我们的服务器。我定义了一条路由,从这个目录中选择某些文件,并将它们移动到另一个要处理的目录中。问题是,它一看到它就拿它,而不是等到ftp完成。结果是to URI中描述的路径中的一个0字节文件。我尝试了每一个readLock选项(masterFile、rename、changed、fileLock),但都不起作用。我正在使用spring DSL定义我的骆驼路由。这里有一个不起作用的例子。camel版本为2.10.0

    <route>
        <from uri="file:pathName?initialDelay=10s&amp;move=ARCHIVE&amp;sortBy=ignoreCase:file:name&amp;readLock=fileLock&amp;readLockCheckInterval=5000&amp;readLockTimeout=10m&amp;filter=#FileFilter" />
        <to uri="file:pathName/newDirectory/" />
    </route>

如有任何帮助,我们将不胜感激。谢谢!

需要注意的是,有一次,这条路由运行在一个不同的服务器上,我不得不将文件ftp到另一个处理它的服务器上。当我在camel中使用ftp组件时,该路由工作得很好。也就是说,在执行FTP之前,它确实要等到收到文件。我有相同的选项在我的路线定义。这就是为什么我认为应该有一种方法来做到这一点,因为ftp组件使用了Camel中的文件组件选项。

public static Date getDateMinusSeconds(Integer seconds) {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, seconds);
return  cal.getTime();
}
    if(filter){
        if(new Date(pathname.getLastModified()).after(DateUtil.getDateMinusSeconds(-30))){
            return false;
        }
    } 

共有1个答案

寇照
2023-03-14

我没有在您的环境中做过这些,但以前在FTP中遇到过这种问题。

两个我可以建议的更好的选择是如果你可以让客户发送两个文件。File1是他们的数据,File2可以是任何东西。他们按顺序发送。您在File2到达时设置陷阱,但您所做的只是将其作为File1已安全到达的“信号”。

不太好的选择(这是我们最终实现的一个,因为我们无法控制正在发送的文件)是编写代码,使您拒绝处理任何文件,直到其上一次修改的时间戳至少为x分钟。我想我们确定了5分钟。这是相当可怕的,因为你基本上是在开火,检查,睡觉,检查等等。

 类似资料:
  • 似乎没有什么影响它的行为,它直接拿起它,抛出一个异常,因为一些检查,在处理文件,并将它移动到错误文件夹。 我知道有一个问题与FTP文件传输,我将不得不面对稍后,但我不能使它工作在本地文件系统。 任何帮助都将不胜感激! 我不得不稍微修改一下参数: 因为它抱怨readLockTimeout应该大于readLockCheckInterval+ReadLockMinage。

  • 我在一个测试类中配置了一个简单的路由如下所示: 这是我执行上述代码时camel生成的跟踪片段: 我可以做什么来简单地下载文件?

  • 此骆驼路由应开始从FTP服务器读取文件: 顺便说一句:这是一条单独的路由,与其他路由没有连接。 谢谢

  • 我有几条骆驼路由,在从DB读取数据时,我在Exchange对象中设置了一个头,其中一条路由的名称为FILE_NAME。作为下一步,这条路由将进一步转到我的FTP路由,文件应该在那里下载。问题是FTP路由没有接收到我正在使用的contentEnricher的前一条路由的头。这是官方行为:http://camel.apache.org/content-enricher.html。但是,可以动态构造FT

  • 问题内容: 我有一项服务有两项操作。 我有骆驼大溃败: 在我的处理器bean中,当我指定时: 我得到了注册用户对象。一切正常。问题是我希望骆驼有条件地路由我的请求,例如: 如果服务操作是我要将消息路由到我的特定bean,并且如果服务操作是我要将消息路由到另一个bean。 我尝试使用骆驼xPath,但似乎无法正常工作。 我正在搜索如何设置骆驼以路由到不同的目标,但没有找到任何东西。也许有人知道问题可