У меня есть актер, который создается при запуске приложения как дочерний элемент другого актера и получает сообщение один раз в день от родителя для выполнения операции по извлечению некоторых файлов с какого-либо SFTP-сервера.
Теперь могут быть некоторые незначительные временные исключения подключения, которые приводят к сбою операции. В этом случае требуется повторная попытка.
Но может быть случай, когда возникает исключение, которое не будет разрешено при повторной попытке (например, файл не найден, какая-то конфигурация неверна и т. д.).
Итак, что в этом случае может быть подходящим механизмом повторных попыток и стратегией контроля, учитывая, что актор будет получать сообщения через длительный интервал (один раз в день).
В этом случае сообщение, отправленное актору, не является плохим вводом — это просто триггер. Пример:
case object FileFetch
Если у меня есть такая стратегия наблюдения в родительском объекте, она будет перезапускать неисправный дочерний элемент при каждом незначительном/основном исключении без повторных попыток.
override val supervisorStrategy =
OneForOneStrategy(maxNrOfRetries = -1, withinTimeRange = Duration.inf) {
case _: Exception => Restart
}
Я хочу иметь что-то вроде этого:
override val supervisorStrategy =
OneForOneStrategy(maxNrOfRetries = -1, withinTimeRange = Duration.inf) {
case _: MinorException => Retry same message 2, 3 times and then Restart
case _: Exception => Restart
}