Play中的队列异步任务! - 正确的方法

时间:2013-02-20 08:57:51

标签: scala playframework redis akka task-queue

我有点玩! application(2.1,scala),它充当Java库的RESTful前端。此Web应用程序使用以下命令对任务进行排队以进行后台处理:

Akka.system.scheduler.scheduleOnce(Duration(0, SECONDS)) {
      new TaskWorker().run(batchId)
}
Tasks控制器中

目标是立即开始Java库的繁重处理,但在后台。

在Scala 2.10及其futures and promises出现时,重构队列以利用这个新API会更有意义吗?

一般来说,我正在寻找一种能够执行当前由Resque Ruby库实现的后台处理的方法,但可能还有一个进程内存队列。(Redis支持的队列会很好太)。

1 个答案:

答案 0 :(得分:0)

使用Akka演员

case class BatchTask(id: Int)
class TaskActor extends Actor {
  def receive = {
    case BatchTask(batchId) => new TaskWorker().run(batchId)
  }
}

val taskWorker = context.actorOf(Props[TaskActor])

taskWorker ! BatchTask(batchId1)
taskWorker ! BatchTask(batchId2)
taskWorker ! BatchTask(batchId3)