У меня есть бесконечный поток с сообщениями, представленными как Plays Enumerator
, к которым я применяю Iteratee
. Затем каждое сообщение обрабатывается актором Akka (количество актеров ограничено 10).
Теперь я хотел бы, чтобы код в Iteratee
асинхронно ждал свободного актера, если все 10 актеров заняты, и не отправлял им другие сообщения, что приводит к исключению Ask timed out on ...
.
Как добиться такой функциональности? Есть ли лучший способ обработки бесконечного потока с 10 актерами без await
?
Пример кода, о котором я говорил, может выглядеть так:
val workers = context.actorOf(Props[MyWorker].withRouter(RoundRobinRouter(10)))
val it = Iteratee.foreach[Msg] { msg =>
workers ? msg
}
msgEnumerator.apply(it)