Akka :Как запланировать повторные попытки при сбое с растущими интервалами задержки?

Каков хороший способ заставить актера повторить попытку в случае неудачи, но с увеличивающимися временными интервалами между повторными попытками? Скажем, я хочу, чтобы актер повторил попытку через 15 секунд, затем через 30 секунд, затем каждую минуту в течение ограниченного числа раз.

Вот что я придумал:

  • метод актера, выполняющего фактическую работу, имеет необязательный RetryInfoпараметр, который, если присутствует, содержит номер повторите попытку, мы сейчас находимся в
  • в случае неудачи, актор отправит себе новый ScheduleRetryMessageс retryCount + 1, затем выдаст исключение RuntimeException
  • другой актор контролирует рабочий актор, используя new OneForOneStrategy(-1, Duration.Inf(), возвращая Resumeв качестве своего Директива. У актера нет состояния, поэтому Resumeдолжно быть в порядке.
  • при получении ScheduleRetryMessageактор
    • еслиretryCount < MAX_RETRIES:использовать планировщик Akka для планирования отправки RetryMessageпосле желаемой задержки
    • иначе :окончательно сдаться, отправив сообщение другому субъекту для сообщения об ошибке

Это хорошее решение или есть ли лучший подход?

10
задан Eugene Loy 30 September 2014 в 07:11
поделиться