我最近开始玩Apache骆驼。因此,作为实验类型,我想我会创建一个简单的项目,每隔几秒扫描一个文件目录,看看我是否有一个新文件选择该文件,然后将其复制到另一个文件夹。后来我想把这些文件放到数据库中。
因此,首先要保持基础,我创建了一条路线,如下所示:
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");
然后我有一些奇怪的例外,因为我无法写一个文件。然后我通过在定时器路由之后放置文件路由它变成了生产者。所以我研究了一下,这里我很困惑。
因此,根据我的理解,文件组件使用预定的轮询模式。文件路由网址模式中甚至还有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");
我试图在这方面得到一些例子,但我要么不是正确的地方,要么完全错过了情节。我想这不是一个与代码相关的问题,而是更多的是这种方法的最佳策略/模式。
由于 Namphibian
答案 0 :(得分: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
答案 1 :(得分:3)
1)如果文件组件使用预定的轮询模式,则执行此操作 使用/实施轮询累积器EIP?
是的,文件生成器实现了ScheduledPollEndpoint。来自doc:
相当多的入站Camel端点使用预定的轮询模式 接收消息并通过Camel处理路由推送它们。 也就是说,端点似乎在客户端外部使用 事件驱动的消费者,但在内部使用预定的轮询 监视某种状态或资源然后触发消息 交流。由于这是一种常见的模式,轮询组件可以 扩展ScheduledPollConsumer基类,使其更简单 实现这种模式。
2)如何向要使用的文件组件添加简单的计划 文件sa每隔30秒?
使用delay
选项:
from("file://c:/CTest/inbox?noop=true&delay=30000").to("file://C:/Ctest/outbox");
3)如何通过实现org.apache.camel.PollingConsumerPollStrategy创建自己的pollingStrategy?
查看源代码:DefaultPollingConsumerPollStrategy或LimitedPollingConsumerPollStrategy。
您使用这样的自定义pollStrategy:
from("file://inbox/?pollStrategy=#myPoll").to(...)