使用quartz2调度程序的Camel FTP2消费者 - 如何获得有状态的工作?

时间:2014-06-22 03:23:00

标签: java apache-camel

我第一次在生产应用程序中使用Camel从远程SFTP站点检索文件。我以为我已经搞清楚了所有事情,但是现在我不得不尝试根据cron表达式 BUT 激活端点而不同时运行两个民意调查

使用Quartz2作为具有FTP2组件的调度程序看起来是完美的解决方案,除了,这将在另一个轮询正在进行时启动轮询(“有状态”选项不可用时使用这种方式),产生错误。

我是否缺少一个可以给我相当于有状态工作的选项?我猜是因为与文件/ FTP消费者的并发轮询在很多时候似乎并不合适!

这是我的路线制作工具的简化片段:

from("sftp://myhost?username=sftptest&password=password&antInclude=*.csv&scheduler=quartz2&scheduler.cron=0/2+*+*+*+*+?&streamDownload=true")
    .to("file://c:/var");

我实际上并不打算每2秒轮询一次,但这证明了这个问题。由于我正在处理远程网络上的远程站点,因此我不希望激进的cron计划导致错误。

更新

如果我使用Spring而不是quartz(在URI中用“spring”替换“quartz2”),那么我得到了所需的行为 - SFTP站点的轮询被序列化。

所以我有我需要的东西(我认为我不需要任何特定于Quartz的功能),但两个调度程序具有不同行为的事实似乎是一个问题。有谁知道默认行为应该是什么?这里有错误吗?

1 个答案:

答案 0 :(得分:0)

这不是一个错误,它只是Quartz的工作原理。我们有同样的问题并解决它们

  • 将石英线池大小限制为1
  • 将fireTime交换标题与" now"进行了比较如果delta> 1s,我们停止路由执行

第二点是必要的,因为石英队列触发的触发器没有可执行的线程。如果您不需要特定于石英的功能,那么您可能会更好地使用其他组件,例如timer