Scala文件轮询器设计

时间:2014-11-14 17:37:55

标签: scala akka

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

我正在使用名为scrappy的基于python的工具在一些金融网站上搜索数据,并在我的linux系统上创建一个存储为csv文件。当csv创建完成时,它还会在目录中创建一个完整的文件。那个杂乱无章的人在当天制作了47个csv文件,因此完成了45个文件。

我已经学习了(尽管很新)scala并在scala中编写了csv解析器和mongo db loader。如果单独运行它,它工作正常,但我需要一个scala中的机制

  1. 喜欢服务.i.e。过程应该在一天的某个时间开始,并在一天中的某个时间停止。
  2. 在该服务活动期间,它应该查看完整文件夹并以多线程方式运行每个文件。
  3. 例如,在完整目录中,它将写入2个文件NASDAQ_20141114.com和NYSE_20141114.com。该服务应为纳斯达克和纽约证券交易所创办2名子女。

    我试过看过akka,但这对我来说似乎很复杂。

    请帮助并提出建议。

1 个答案:

答案 0 :(得分:1)

Java 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

的示例

您还可以使用可用的包装库,例如schwatcher

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

还有自定义构建的文件传输解决方案,例如JADE - JobScheduler Advanced Data Exchange,可以在文件可用时触发您的程序。 (包括调度程序)

对于调度程序,我建议QuartzJobscheduler