我看了the aggregator pattern
http://doc.akka.io/docs/akka/2.2.3/contrib/aggregator.html并在sample use case
段中找到了一些内容
def fetchSavingsAccountsBalance() {
context.actorOf(Props[SavingsAccountProxy]) ! GetAccountBalances(id)
expectOnce {
case SavingsAccountBalances(balances) ⇒
results += (Savings -> balances)
collectBalances()
}
}
我发现由context.actorOf
创建的演员从未停止过,它应该是那样吗?
答案 0 :(得分:2)
我相信停止聚合器演员是你自己的责任。来自文档:
The aggregator should terminate after the response is sent (or timed out).
我正在解释这意味着停止是你自己的责任,而不是框架为你做的事情。我猜测,如果它确实停止了,那么文档就会说出以下内容:
The aggregator will terminate...
您还会注意到文档中的多个示例中都有context.stop
的显式调用。此外,您给出的示例是链式聚合示例的一部分。在最终响应所有聚合数据并使用这段代码明确停止自身之前,它会执行大量单独的数据集合(链接在一起)。
def processFinal(eval: List[Int]) {
// Select only the entries coming back from eval
originalSender ! FinalResponse(eval map values)
context.stop(self)
}
答案 1 :(得分:0)
默认情况下,演员不会自行关闭,除非您:
context.system.shutdown()
context.stop(self)
明确停止该演员。由于您使用聚合器模式,并且只有在处理完成后才能关闭整个actor系统,才需要收集结果。