2012-05-22 3 views
4

У меня есть akka 2.0 круговой маршрутизатор. Теперь мне нужно передать сообщение всем маршрутам и ждать ответов от всех них. Я еще не нашел способ сделать это. Сначала у меня был список участников, которые я передал маршрутизатору, но теперь мне нужно загрузить их из приложения application.conf. Есть ли способ дождаться всех сообщений трансляции? Было бы хорошо, если бы я мог получить количество маршрутов из конф.Akka ask Broadcast

+2

Если бы я был вами, я бы посмотрел на ScatterGatherFirstCompletedRouter и создал новый, который делает этот ScatterGather, а затем отправит запрос на растяжение и подпишет CLA :-) –

+0

Viktor. В этом случае, что бы семантика ответного сообщения быть? просто Iterable [<, что ответят отдельные участники>]? – questionersam

ответ

2

Если вы знаете количество маршрутов, то обычно вы просто считаете количество полученных ответов. Тем не менее, вам может понадобиться учитывать тайм-аут, особенно если ваши участники запущены, потому что нет гарантии, что сообщения действительно будут доставлены.

+0

Вы правы, но на данный момент мне действительно нужны все ответы. Если кто-то терпит неудачу, весь запрос терпит неудачу. –

+0

Основной алгоритм для этого показан в учебнике по адресу http://doc.akka.io/docs/akka/2.0.1/intro/getting-started-first-scala.html. Мастер-класс работает практически так. Единственный недостающий бит - это тайм-аут для завершения всех операций. Но я думаю, это было бы необходимо, только если ваши актеры действительно распределены по нескольким JVM и/или системам. –

+0

Чтобы получить тайм-аут, реализованный для мастера-исполнителя в этом учебном курсе, вы можете настроить планировщик (http://doc.akka.io/docs/akka/2.0.1/scala/scheduler.html) и отправить специальное сообщение о тайм-ауте к Мастер-актеру. –

Смежные вопросы