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

Iva*_*nko 1 scala akka

我希望我的一个Akka演员执行长时间运行的阻塞任务(在一个很长的字符串中查找子字符串,作为示例).演员的哲学(不阻挡其他演员等)后我该如何做?

我正在考虑在一个单独的线程中运行这个actor PinnedDispatcher,但我不确定.

小智 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
}
Run Code Online (Sandbox Code Playgroud)