Я использую архитектуру master-slave в akka с помощью java. Мастер получает сообщения, которые представляют команды заданий, которые он направляет к подчиненным. Эти задания включают вызов библиотеки сторонних разработчиков, которая не является открытым исходным кодом, а иногда и сбой, просто зависанием и блокировкой выполнения без какого-либо исключения. Akka не признает это как отказ и продолжает отправлять сообщения в почтовый ящик, который использует этот актер, но так как первый вызов блокируется бесконечно, остальные команды в почтовом ящике никогда не будут выполнены.Как заставить актера сбой после тайм-аута в akka
Моя цель состоит в том, чтобы эмулировать этот тип сбоя с истечением таймаута и исключение, чтобы перенаправить весь инцидент на стратегию сбоя в akka. Итак, мой вопрос: могу ли я каким-либо образом настроить актера на выброс исключения после получения сообщения и его выполнение не будет завершено после таймаута?
Если нет, то каковы другие альтернативы для обработки такого случая без каких-либо операций блокировки? Я собирался инкапсулировать исполнение в Будущее и вызвать его изнутри актера, который будет блокировать это будущее для таймаута. Он работает, но, как полагают многие, блокирует, не является хорошим решением в акке.
Вещь, которая касается меня в вашей проблеме, заключается в том, что ваш сторонний API просто зависает и блокируется. Когда это произойдет, поток из вашего «ExecutionContext» также будет заблокирован. Достаточно этого, и вы в конце концов калечите свой «ExecutionContext», голодая на остальную часть актерской системы. Если вы решите использовать фьючерсы, убедитесь, что они используют отдельный «ExecutionContext» из вашей актерской системы, чтобы брандмауэр отключил этот проблемный код. – cmbaxter