java - Apache 中的轮询文件使用者

标签 java architecture apache-camel

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

因此,首先保持基础知识,我创建了一条如下所示的路线:

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

这行得通,我认为可以添加一个计时器。最初我错误地使用了计时器并尝试这样做:

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

然后我遇到了一些关于无法写入文件的奇怪异常。然后我通过将文件路由放在计时器路由之后实现它成为生产者。所以我研究了一下,这就是我有点困惑的地方。

所以根据我的理解,文件组件使用预定的轮询模式。文件路由 url 模式中甚至有一个 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");

我试图找到一些关于此的例子,但我要么没有找到正确的地方,要么完全错过了情节。我想这与其说是一个代码相关的问题,不如说是这种方法的最佳策略/模式。

谢谢 两栖动物

最佳答案

Camel 提供了一个叫做 routepolicy 的特性 http://camel.apache.org/routepolicy.html

它允许您将策略关联到路由。我们提供了许多开箱即用的政策。策略可以是任何一种逻辑。例如,我们提供了一个节流策略,它根据线程保持动态暂停/恢复路由。

另一个开箱即用的政策是计划政策,因此您可以为路线指定“开放时间”。所以你也可以使用它。但请注意它的开放时间,因此您可以指定开始/结束时间。有一个基于 quartz cron 的策略 http://camel.apache.org/cronscheduledroutepolicy.html所以你可以配置它在星期一开始路由,让它运行一会儿。

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

关于java - Apache 中的轮询文件使用者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9748535/

相关文章:

java - 物理圈碰撞弹出和滑动边界

java - 在没有 servlet/webapp 上下文的情况下访问 Spring Bean

apache-camel - Apache Camel sftp org.apache.camel.NoTypeConversionAvailableException : No type converter available to convert java. io.InputStream

java - Liferay - 创建 PDF 并输出到流

java - 如何通过JDBC接口(interface)将UTF-8字符串正确写入MySQL

.NET 项目架构

design-patterns - 聚合必须知道并仅将其行为建立在其自身状态之上?聚合可以在其行为(方法)中使用其他聚合的状态吗?

sql-server - 数据库迁移到 TFS - 循环依赖

java - Apache Camel 中的动态路由器 URI

java - Camel AggregationStrategy 为下一次聚合迭代保留排除的消息