Я понимаю, что акторы Akka не должны блокироваться, чтобы реагировать на сообщения, но как мне структурировать свою службу, где я хочу отслеживать процесс, работающий в течение неопределенного периода времени?
Например, мы используем библиотеку Amazon Kinesis Connector. Вы создаете коннектор с заданной конфигурацией, которая наследуется от Runnable, а затем вызываете метод Run(). Коннектор просто работает бесконечно, извлекая данные из Kinesis и записывая их в Amazon S3. На самом деле, если runnable возвращается, то это ошибка, и его нужно перезапустить.
Подход (1) состоит в том, чтобы просто создать дочерний актор для каждого работающего Kinesis Connector, и если метод Run() возвращает значение, вы выдаете исключение, контролирующий актор замечает исключение и перезапускает дочерний актор. Один коннектор на каждого дочернего актора на поток.
Подход (2) заключается в том, что дочерний актор должен обернуть Kinesis Connector в Future, и если будущее вернется, актор перезапустит Connector в другом Future. Возможно, один актор может управлять несколькими коннекторами, но означает ли это, что каждый Future выполняется в отдельном потоке?
Какой подход будет наиболее соответствовать философии Akka, или есть какой-то другой подход, который рекомендуют люди? В общем, я хочу отловить какие-либо проблемы с любым Коннектором, и перезапустить его. Всего параллельно будет работать не более полудюжины коннекторов.