разветвляется и соединяется с использованием постановки задачи Akka

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

Итак, я отправляю сообщение своему процессору безопасности (который является актером) и жду завершения всех фьючерсов. В конце концов, я использую 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?

7
задан Jonas 10 November 2011 в 12:50
поделиться