постановка задачи: у меня есть портфель ценных бумаг, которые необходимо обрабатывать параллельно. В Java я использовал пул потоков для обработки каждой безопасности и использовал защелку для обратного отсчета. После завершения я делаю некоторые слияния и т.д.
Поэтому я отправляю сообщение своему SecurityProcessor (который является актером) и жду завершения всех фьючерсов. В конце концов, я использую MergeHelper для постобработки. SecurityProcessor принимает безопасность, выполняет некоторые операции ввода-вывода и обработки и отвечает на запрос безопасности.
val listOfFutures = new ListBuffer[Future[Security]]()
var portfolioResponse: Portfolio = _
for (security <- portfolio.getSecurities.toList) {
val securityProcessor = actorOf[SecurityProcessor].start()
listOfFutures += (securityProcessor ? security) map {
_.asInstanceOf[Security]
}
}
val futures = Future.sequence(listOfFutures.toList)
futures.map {
listOfSecurities =>
portfolioResponse = MergeHelper.merge(portfolio, listOfSecurities)
}.get
Является ли этот дизайн правильным, и есть ли лучший/более крутой способ реализовать эту распространенную проблему с помощью akka?