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

постановка задачи: у меня есть портфель ценных бумаг, которые необходимо обрабатывать параллельно. В 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?


person Debajyoti Roy    schedule 07.11.2011    source источник


Ответы (1)


person    schedule
comment
Мне очень понравилось это предложение, и оно работает так, как ожидалось, пока мне не пришлось разделить его и добавить кучу операторов Eventhandler.info для отладки проблемы :( - person Debajyoti Roy; 21.11.2011
comment
def debug[T](t: T): T = { EventHandler.info(t); т } - person Viktor Klang; 21.11.2011
comment
Я очень рад, что вам понравилось. Пожалуйста, поделитесь своими слезами радости и/или боли в списке рассылки Akka! - person Viktor Klang; 13.12.2011