我想让我的一个Akka演员执行长时间运行的阻塞任务(例如,在一个很长的字符串中查找一个子串)。我应该如何做这个演员的哲学(不阻止其他演员等)?Akka的演员长时间阻塞任务
我正在考虑在与PinnedDispatcher
分开的线程中运行此演员,但我不确定。
我想让我的一个Akka演员执行长时间运行的阻塞任务(例如,在一个很长的字符串中查找一个子串)。我应该如何做这个演员的哲学(不阻止其他演员等)?Akka的演员长时间阻塞任务
我正在考虑在与PinnedDispatcher
分开的线程中运行此演员,但我不确定。
你可以用任务在未来使用pipe
模式将结果发送到其他演员。另一个演员将收到结果值或持有原因的akka.actor.Status.Failure
。
如果你想给发件人回应这将是:
import akka.pattern.pipe
def receive: Receive = {
case msg =>
val future: Future[String] = Future(longRunningBlockingTask(msg))
future pipeTo sender
}
如果这个计算将在自己的执行上下文中运行,这意味着不同的调度员,并包裹在'future'我认为你不能做任何事情更多。 – goral 2014-08-30 17:01:28