我希望我的一个Akka演员执行长时间运行的阻塞任务(在一个很长的字符串中查找一个子字符串,作为示例)。我应该怎么做这些演员'哲学(不阻止其他演员等)?
我正考虑在PinnedDispatcher
的分离线程中运行此演员,但我不确定。
答案 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)
您可以将呼叫包裹在未来
中