раскошелиться и присоединиться используя Akka - PullRequest
7 голосов
/ 07 ноября 2011

постановка задачи: у меня есть портфель ценных бумаг, который должен обрабатываться параллельно. В Java я использовал пул потоков для обработки каждой защиты и использовал защелку для обратного отсчета. После завершения я делаю слияние и т. Д.

Итак, я отправляю сообщение моему SecurityProcessor (который является актером) и жду завершения всего будущего. В конце я использую MergeHelper для постобработки. SecurityProcessor принимает защиту, выполняет некоторые операции ввода-вывода и обработки и отвечает Security

  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?

1 Ответ

8 голосов
/ 08 ноября 2011
val futureResult = Future.sequence(
                  portfolio.getSecurities.toList map { security => (actorOf[SecurityProcessor].start() ? security).mapTo[Security] }
                ) map { securities => MergeHelper.merge(portfolio, securities) }
...