与Akka的演员一起长期阻止任务

时间:2014-08-30 16:24:50

标签: scala akka

我希望我的一个Akka演员执行长时间运行的阻塞任务(在一个很长的字符串中查找一个子字符串,作为示例)。我应该怎么做这些演员'哲学(不阻止其他演员等)?

我正考虑在PinnedDispatcher的分离线程中运行此演员,但我不确定。

2 个答案:

答案 0 :(得分:5)

您可以在将来包装任务,并使用pipe模式将结果发送给另一个Actor。另一个演员将收到结果值或持有原因的akka.actor.Status.Failure 如果您想回复发件人,那就是:

import akka.pattern.pipe

def receive: Receive = {
  case msg =>
    val future: Future[String] = Future(longRunningBlockingTask(msg))
    future pipeTo sender
}

答案 1 :(得分:2)

您可以将呼叫包裹在未来