У меня есть актор Akka FSM, который запускает следующий псевдокод после получения сообщения в ReadyState
lookupA ! Wrapper(Lookup("A"))
lookupB ! Wrapper(Lookup("B"))
lookupC ! Wrapper(Lookup("C"))
goto(LookingUpDataState) using DataFound(a = None, b = None, c = None)
Затем актор ожидает ответов, которые могут быть либо FullResult[T]
(расширение ServiceResult[T]
), либо Empty
(расширение ServiceResult[Nothing]
). Успешные результаты поиска используются для заполнения полей экземпляра DataFound, а пустые результаты поиска приводят к регистрации сообщения об ошибке и завершению действия актора.
Мой вопрос заключается в следующем: как я могу определить, какой поиск не удался, чтобы я мог зарегистрировать ошибку или вернуться к значению по умолчанию? Все, что я могу придумать, это изучить ActorRef отправителя (хакерский подход) или добавить уникальное поле идентификатора ко всем сообщениям (высокие накладные расходы).
Это простая проблема, которую можно решить с помощью Ask и Futures. Существует ли идиоматическое решение Akka?