2014-11-14 57 views
0

我需要帮助创建一个轮询文件创建,然后处理在scala中创建的函数的scala服务。让我简单介绍一下我在做什么。Scala文件轮询器设计

我正在使用基于python的工具scrappy在一些财务网站上搜索数据,并在我的linux系统上创建存储为csv文件。当csv创建完成时,它还会在目录中创建一个完整的文件。那个奇怪的文件产生了47个csv文件,并且因此完成了45个完整的文件。

我已经了解到(虽然对它很新颖)scala,并在scala中编写了csv分析器和mongo db loader。它工作正常,如果它单独运行,但我需要一个机制在斯卡拉这是

  1. 像服务.i.e。过程应该在一天中的某个时间开始,并在一天的特定时间停止。
  2. 在该服务活动期间,应查看完整文件夹并以多线程方式运行每个文件。

例如在完整的目录中,它将写入2个文件NASDAQ_20141114.com和NYSE_20141114.com。该服务应该为纳斯达克和纽约证券交易所启动2个孩子。

我试过看阿卡,但它看起来很复杂。

请帮助和建议的东西。

回答

1

爪哇7提供了WatchService API(example

这可以从Scala中被使用:

val watchService = FileSystems.getDefault.newWatchService() 
Paths.get("/foo/bar").register(watchService, ENTRY_CREATE, ENTRY_DELETE) 

while(true) { 
    val key = watchService.take() 
    key.pollEvents() foreach { event => 
     event.kind() match { 
      case ENTRY_CREATE => //... 
      case ENTRY_DELETE => //... 
      case x => 
       logger.warn(s"Unknown event $x") 
     } 
    } 
    key.reset() 
} 

实施例从WatchService combined with Akka actors

也可以使用avaliable包装器库如schwatcher

另外你可以使用Apache Camels File component和骆驼plugs in nicely to AkkaQuartz

也有定制的文件传输解决方案,如JADE - JobScheduler Advanced Data Exchange可以触发您的程序,当一个文件是可用的。 (包括调度程序)

对于调度程序,我建议QuartzJobscheduler