В akka скажите, пока актер выполняет логику и получает исключение, что произойдет с потоком, выполняющим задачу - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть актер, соединяющийся с базой данных. Когда актер вызывается в огне и забывает модель из контроллера, мы выбираем метод Tell вместо Ask. Если при выполнении операции с БД возникает проблема, мы получаем исключение. Мы не фиксируем исключение или дисциплинированную обработку ошибок там. Итак, что в этой ситуации произойдет с соединением с базой данных, поскольку оно внезапно завершается с исключением? Будет ли это упасть или все еще висеть и создать пораженную нить. Пожалуйста, порекомендуйте.

Также целесообразно игнорировать обработку ошибок при работе с БД при использовании метода Tell для вызова Actor в Akka.

1 Ответ

0 голосов
/ 26 апреля 2019

Один из главных принципов Akka Actor - Пусть сокрушит . Так что это нормально, что актер получит исключение, он будет перезапущен по умолчанию его супервизором. Вы можете найти больше информации об отказоустойчивости в Akka в их документации отказоустойчивости-akka Поэтому, когда есть исключение, это 2 быстрых решения, которые приходят мне в голову для решения этой проблемы:

  1. Повторить стратегию с контроллера : Не использовать запрос, а сообщить супервизору, когда операция БД была выполнена без исключений. Супервизор, в этом случае контроллер, может отслеживать в буфере операции записи, которые субъект запрашивал у субъекта. Когда контроллер получил OK от субъекта, он может удалить его из буфера, в другом случае, если ответ не получен в течение времени ожидания, вы можете повторить попытку, даже если субъект был разбит из-за исключения (mailRef субъекта будет то же самое и актер был бы перезапущен).
  2. ** Управление исключением **: Вы можете управлять исключением и обрабатывать его в супервизоре после того, как актер уничтожен, в зависимости от исключения, которое вы можете определить действия, которые нужно выполнить.

Я бы предпочел первый вариант, но всегда есть риск с моделью fire & забудь. Другой вариант, который сложнее реализовать, состоит в том, чтобы добавить персистентности субъекту и зарегистрировать сообщение как события. В этом случае у актера будет та информация, которая ему нужна для повторения операции после дробления.

...