Quartz Scheduler:在事件作业元数据中维护已处理的文件列表
我们在我们的应用程序中使用Quartz调度程序来扫描特定文件夹中的任何新文件,如果有新文件,则启动应用程序中的相关工作流程以处理它。 为此,我们创建了与作业和触发器关联的自定义侦听器对象,每5分钟轮询文件位置。
要求只处理到达该文件夹位置的新文件,而忽略已处理的文件。 另外,我们不希望文件夹位置在大量文件中大量增长(否则会减慢文件夹扫描速度) - 所以在工作流程结束时,我们实际上会删除源文件。
为了实现它,我们决定维护作业元数据中已处理文件的列表。 因此,在每次轮询时,我们从作业元数据中获取已处理文件的列表,并将其与当前文件列表进行比较,如果文件尚未处理 - 则启动关联的流程。
上述方法的问题在于,多年来(并且取决于每天接收的文件数量可能从每天100K起),作业元数据(处理的文件的持续列表)变得非常大,并且它开始给我们数据截断错误(同时在石英表中保留作业元数据)和缓慢的问题。
为了解决这个问题,我们决定使用文件夹的当前快照刷新作业元数据中已处理文件的列表。 这样,由于我们从每个工作流程末尾的文件夹位置中删除处理的文件,所以处理的文件列表仍然有限。 但是,如果第二天到达同名文件,我们就开始遇到处理重复文件的问题。
实施此要求并确保我们不处理重名文件到达同名的最佳方法是什么? 我们应该考虑在外部数据库中使用处理文件列表而不是作业元数据吗? 我正在寻找推荐的方法来实施此解决方案。 谢谢!
我们最近与我们的调度程序有类似的请求。 如果你在Linux上,为什么不使用inotify等解决方案? 其他系统可能有其他方式来监视文件系统事件。
我们的解决方案是在每次创建事件时触发一些文件处理,然后每隔x天删除旧文件(类似于Walen DB建议)。 在这种情况下,列表不会过多膨胀,重复文件可以在他们自己的特定情况下处理。
(对不起,我没有权利评论。)
链接地址: http://www.djcxy.com/p/23633.html上一篇: Quartz Scheduler: Maintain processed files list in the event job metadata