我们有一台服务器可以处理不同参与者的投资组合和证券(在其中)。对于证券数量较少(<20)的投资组合,这种方法很好。当我将安全计数增加到1000时,遇到以下问题:
akka.dispatch.FutureTimeoutException:期货在[5000]毫秒后超时
我可以通过增加akka配置中的超时来绕过这个错误,这是正确的做法吗?在早于1.2的akka版本中,我可以在actor中设置self.timeout但不推荐使用。
我遇到的另一个问题(间歇性地)是整个服务器在我的投资组合actor中加入futures.map代码时挂起:
//fork out for each security
val listOfFutures = new ListBuffer[Future[Security]]()
for (security <- portfolio.getSecurities.toList) {
val securityProcessor = actorOf[SecurityProcessor].start()
listOfFutures += (securityProcessor ? security) map {
_.asInstanceOf[Security]
}
}
EventHandler.info(this,"joining results from security processors")
//join for each security
val futures = Future.sequence(listOfFutures.toList)
futures.map {
listOfSecurities =>
portfolioResponse = MergeHelper.merge(portfolio, listOfSecurities)
}.get
答案 0 :(得分:0)
你没有说明你所使用的Akka版本,并且考虑到我在水晶球上的时间有限,我会认为你的版本是1.2。
您可以在调用ask /?
时指定超时(另外,你的代码有点复杂,但我已经解决了你的其他问题。)
干杯, √