ポートフォリオと証券 (その内部) を異なるアクターで処理するサーバーがあります。証券の数が少ない (<20) ポートフォリオの場合、これはうまく機能します。セキュリティ カウントの数を 1000 に増やすと、次の問題が発生しました。
akka.dispatch.FutureTimeoutException: [5000] ミリ秒後に先物がタイムアウトしました
akka config内のタイムアウトを増やすことでこのエラーを回避できますが、それは正しいことですか? 1.2 より前のバージョンの akka では、アクター内で self.timeout を設定できましたが、これは非推奨です。
私が (断続的に) 直面したもう 1 つの問題は、ポートフォリオ アクター内の 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