在Apache中轮询文件使用者

Nam*_*ian 4 java architecture apache-camel

我最近开始玩Apache骆驼.因此,作为实验类型,我想我会创建一个简单的项目,每隔几秒扫描一个文件目录,看看我是否有一个新文件选择该文件,然后将其复制到另一个文件夹.后来我想把这些文件放到数据库中.

因此,首先要保持基础,我创建了一个如下的路线:

 from("file://c:/CTest/inbox?noop=true")
                .to("file://C:/Ctest/outbox");
Run Code Online (Sandbox Code Playgroud)

这工作,我认为可以添加一个计时器.最初我犯了使用计时器的错误并尝试这样做:

from("timer://myTimer?period=50").to("file://c:/CTest/inbox?noop=true")
                .to("file://C:/Ctest/outbox");
Run Code Online (Sandbox Code Playgroud)

然后,我有一些奇怪的例外,因为我无法写一个文件.然后我通过在定时器路由之后放置文件路由它变成了生产者.所以我研究了一下,这里我很困惑.

因此,根据我的理解,文件组件使用预定的轮询模式.文件路由网址模式中甚至还有pollStrategy选项.还有一个投票消费者EIP.

所以这就是我的困惑所在.

1)如果文件组件使用预定的轮询模式,它是否使用/实现轮询累加器EIP?

2)如何每隔30秒向文件组件添加一个简单的计划以消耗文件?

3)如何通过实现org.apache.camel.PollingConsumerPollStrategy来创建自己的pollingStrategy?

我怀疑我可以这样做:

    from("file://c:/CTest/inbox?noop=true&pollStrategy=some-expression")
                .to("file://C:/Ctest/outbox");
Run Code Online (Sandbox Code Playgroud)

我试图找到一些这方面的例子,但我要么没有看正确的地方或完全错过了情节.我想这不是一个与代码相关的问题,而是更多的是这种方法的最佳策略/模式.

谢谢Namphibian

Cla*_*sen 7

Camel提供了一个名为routepolicy http://camel.apache.org/routepolicy.html的功能

它允许您将策略关联到路由.我们提供了许多开箱即用的政策.政策可以是任何一种逻辑.例如,我们提供了一个限制策略,它可以根据线程进行暂停/恢复路由.

另一个开箱即用政策是预定的政策,因此您可以为路线指定"开放时间".所以你也可以使用它.但请记住它的开放时间,因此您指定开始/结束时间.有基于石英的cron政策http://camel.apache.org/cronscheduledroutepolicy.html这样你就可以配置这周一开始的路线,并让它运行了一小会儿.

如果您需要在路线内停止路线,那就更复杂了,这里有一个常见问题解答:http://camel.apache.org/how-can-i-stop-a-route-from -a-route.html