2

我们有一个服务器来处理不同参与者的投资组合和证券(在它内部)。对于证券数量较少(<20)的投资组合,这很好用。当我将安全计数增加到 1000 时,遇到以下问题:

akka.dispatch.FutureTimeoutException:期货在 [5000] 毫秒后超时

我可以通过增加akka 配置中的超时来绕过这个错误,这是正确的做法吗?在 1.2 之前的 akka 版本中,我可以在 actor 内部设置 self.timeout ,但这已被弃用。

我面临的另一个问题(间歇性地)是整个服务器在加入我的投资组合参与者中的 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
4

1 回答 1

0

您没有说明您使用的是哪个版本的 Akka,并且鉴于我使用水晶球的时间有限,我假设您使用的是 1.2。

您可以在调用 ask/? 时指定超时。

(另外,你的代码有点复杂,但我已经在你的另一个问题中解决了。)

干杯,√</p>

于 2011-11-21T17:26:57.867 回答