Перезапустите систему Akka Actor после прекращения - PullRequest
0 голосов
/ 05 мая 2018

У нас есть приложение Akka http с ок. 100+ API и 15+ Актеров. После Http.bindAndHandle(routes, host, port) я прекратил ActorSystem.

Http().bindAndHandle(corsHandler(routes), "0.0.0.0", 9090/*, connectionContext = https*/)
sys.addShutdownHook(actorSystem.terminate())

Итак, я не хочу останавливать свое приложение. Итак, мои вопросы:

  1. Нужно ли действующей системе прекращать принудительно?

  2. Мое приложение перестает работать после завершения актерской системы?

  3. Что если пользователь нажмет на API после завершения актерской системы? Перезапускается ли он снова для обработки запросов API?

Итак, что мне нужно делать, если я хочу, чтобы мое приложение всегда слушало запросы клиентов.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

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

https://doc.akka.io/docs/akka/2.5/fault-tolerance.html https://doc.akka.io/docs/akka/2.5/general/supervision.html

0 голосов
/ 05 мая 2018

Цель ловушки отключения состоит в том, чтобы разрешить упорядоченное завершение работы приложения , когда JVM собирается завершить работу . Это не обязательно требуется при любых обстоятельствах, но упорядоченное завершение работы может быть полезно, если ваша система ActorSystem хочет упорядоченно высвобождать ресурсы или сигнализировать другим узлам в кластере, что она закрыта.

Когда система актера завершит свою работу, больше не будет акторов, обрабатывающих HTTP-запросы, потому что акторы не могут существовать без работающей системы акторов, частью которой является. Поэтому нет, если ваш пользователь нажимает на API после завершения системы субъекта, система субъекта не будет перезапущена, поскольку вместо этого запрос будет просто отклонен (соединение отклонено или что-то в этом роде).

Вы не можете избежать этого в вашем коде , потому что отключение JVM не может быть отменено.

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

...