Akka Actors Supervision - Сохраняет ли «резюме» текущее сообщение? - PullRequest
0 голосов
/ 14 июля 2020

В Akka Actors (с использованием Scala) можно использовать стратегии наблюдения для обработки исключений. Эта стратегия может решить, что делать с субъектом, в зависимости от типа исключения. Насколько я понимаю, есть 4 возможных результата:

  • Resume - позволить дочернему актору сохранить свое текущее состояние и продолжить обработку новых сообщений, как будто ничего не произошло.
  • Restart - перезапустить дочерний актер, т.е. убить текущего дочернего актера, который потерпел неудачу, и создать новый вместо него.
  • Stop - Завершить дочерний актер навсегда.
  • Escalate - разрешить супервизору обработать эту ошибку.

В документации четко указано, что при перезапуске актера текущее сообщение будут потеряны, и с этим нужно иметь дело. Однако в нем четко не указано, применимо ли то же самое к резюме. Продолжает ли он обрабатывать эти сообщения (при условии, что какой-то внешний фактор вызвал исключение, которого больше нет), или это продолжается со следующим сообщением в почтовом ящике?

1 Ответ

2 голосов
/ 14 июля 2020

Сохраняет ли «возобновление» текущее сообщение?

Нет.

«Что происходит с сообщением» раздел документации описывает поведение, когда возникает исключение, когда субъект обрабатывает сообщение:

Что происходит с сообщением

Если исключение выбрасывается, пока сообщение обрабатывается (т.е. извлекается из почтового ящика и передается текущему поведению), то это сообщение будет потеряно. Важно понимать, что он не кладется обратно в почтовый ящик. Поэтому, если вы хотите повторить обработку сообщения, вам нужно разобраться с этим самостоятельно, перехватив исключение и повторив поток. Убедитесь, что вы ограничили количество повторных попыток, так как вы не хотите, чтобы система постоянно блокировалась (что потребляет много циклов процессора без достижения прогресса).

стратегий контроля: возобновление, перезапуск или остановка. («Эскалация» является четвертой стратегией в classi c Akka, но явно не поддерживается в Akka Typed . Однако эскалация может быть эмулирована в Akka Typed .)

...