小编Cur*_*urt的帖子

在ftp完成之前拾取文件的Camel路由

我有一个客户ftp的文件到我们的服务器.我有一个路由定义从该目录中选择某些文件,并将它们移动到另一个目录进行处理.问题是它只要看到它就会立即使用它,并且不会等到ftp完成.结果是在uri中描述的路径中的0字节文件.我已经尝试了每个readLock选项(masterFile,rename,changed,fileLock),但没有一个有效.我使用spring DSL来定义我的骆驼路线.这是一个不起作用的例子.骆驼版是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>
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.谢谢!

请注意......有一次,这条路由在不同的服务器上运行,我不得不将文件ftp到另一台处理它的服务器上.当我在骆驼中使用ftp组件时,该路由工作正常.那就是在执行ftp之前它一直等到收到文件.我在定义的路线上有相同的选项.这就是为什么我认为应该有一种方法来实现它,因为ftp组件使用camel中的文件组件选项.


我正在接受@ PeteH的建议#2并做了以下事情.我仍然希望有另一种方式,但这将有效.

我添加了以下方法,返回一个date.minus(x秒)的日期

public static Date getDateMinusSeconds(Integer seconds) {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, seconds);
return  cal.getTime();
}
Run Code Online (Sandbox Code Playgroud)

然后在我的过滤器中检查初始过滤是否为真.如果是,我将Last修改日期与getDateMinusSeconds()进行比较.如果比较为真,我会为过滤器返回false.

    if(filter){
        if(new Date(pathname.getLastModified()).after(DateUtil.getDateMinusSeconds(-30))){
            return false;
        }
    } 
Run Code Online (Sandbox Code Playgroud)

java spring apache-camel

5
推荐指数
1
解决办法
5680
查看次数

多个camel路由处理相同的文件

我定义了10条路线,其中2条列在此处.其他8个是相同的,但是从端点是不同的目录.每个路由选取一个位于目录中的文件,并由一个groovy类处理.当一个文件被放入其中一个目录时,它工作正常,但是当一个文件同时被丢弃到每个目录中时,每个线程似乎都会变得混乱.我确实收到了我已经获取每个文件的日志消息,但似乎每个线程使用一个进程"beginProcess",因为它像groovy中定义的所有变量一样,每个文件被拾取时都会被更改.我不确定这是否有任何意义,但有人可以告诉我,我在下面做的是合法的吗?基本上可以多个路由调用一个类,如果是,我是否正确这样做?如果它是至少我会知道它必须在我的groovy类(但看到它适用于一个文件表明它不在这里,但不假设在这一点).非常感谢!

<camel:camelContext id="myId"
    xmlns="http://camel.apache.org/schema/spring">

    <route>
        <from
            uri="file://directoryStructure1/?move=archive&amp;sortBy=ignoreCase:file:name&amp;readLock=markerFile&amp;readLockCheckInterval=5000&amp;readLockTimeout=10m&amp;maxMessagesPerPoll=1" />
        <process ref="beginProcess"></process>
    </route>

    <route>
        <from
            uri="file://directoryStructure2/?move=archive&amp;sortBy=ignoreCase:file:name&amp;readLock=markerFile&amp;readLockCheckInterval=5000&amp;readLockTimeout=10m&amp;maxMessagesPerPoll=1" />
        <process ref="beginProcess"></process>
    </route>
</camel:camelContext>

    <bean id="beginProcess" class="package.groovy.class">   </bean>
Run Code Online (Sandbox Code Playgroud)

groovy spring apache-camel

4
推荐指数
1
解决办法
3199
查看次数

标签 统计

apache-camel ×2

spring ×2

groovy ×1

java ×1