Атуально для Akka HTTP начиная с версии 10.2.0
Github Issue: Add coordinated shutdown support
По-умолчанию, Akka при завершении (в т.ч. получении SIGTERM) запускает процесс Coordinated Shutdown, в рамках которого происходят последовательно несколько фаз:
- before-service-unbind
- service-unbind
- service-requests-done
- service-stop
- before-cluster-shutdown
- cluster-sharding-shutdown-region
- cluster-leave
- cluster-exiting
- cluster-exiting-done
- cluster-shutdown
- before-actor-system-terminate
- actor-system-terminate
В каждой фазе выполняются определённые действия и настроен таймаут, который можно переопределить и в течение которого эти действия должны завершиться. Если действия не успевают завершаться, то фаза заканчивается и начинается следующая
В рамках Akka HTTP нас в первую очередь интересуют следующие фазы
- service-unbind #перестаёт слушаться tcp порт и перестают приниматься новые соединения. Установленные соединения не разрываются
- service-requests-done #ожидается окончание запросов, которые в данный момент обрабатываются кодом и клиент ожидает на них ответ
- service-stop #закрываются все установленные соединения
По-умолчанию (default-phase-timeout = 5s), после unbind есть 5 секунд на завершение текущих запросов
При использовании Kubernetes, стоит принимать во внимание также его таймаут terminationGracePeriodSeconds, в течение которого будет ожидаться реакция на SIGTERM, после чего будет послан SIGKILL. По-умолчанию, он равен 30s