我想讓我的一個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