msrc
/
interfaces.go
64 строки · 3.8 Кб
1package msrc
2
3import "context"
4
5// MultiServiceInterface описывает интерфейс сервера с множественными
6// дочерними сервисами. Идея в том, чтобы запускать каждый дочерний
7// сервис в отдельном потоке и реагировать на остановку каждого из них.
8// Если сервис завершил работу с ошибкой, то необходимо остановить работу
9// приложения, для гарантии его корректной работоспособности.
10//
11// Данный подход хорошо подходит для Kubernetes, который отслеживает
12// не корректные остановки подов. Если POD завершил работу с ошибкой
13// и он должен продолжать работать - Kubernetes перезапустит его в
14// автоматическом режиме.
15type MultiServiceInterface interface {
16// Run выполняет запуск основного сервиса
17Run() error
18
19// Stop выполняет остановку основного сервиса
20Stop()
21
22// IsServicesRun проверяет, запущен ли сервер
23IsServicesRun() bool
24
25// IsServicesAlive проверяет, остановлен ли хоть один из сервисов
26IsServicesAlive() bool
27}
28
29// ServiceInterface описывает интерфейс сервиса, для параллельного запуска.
30type ServiceInterface interface {
31// Run выполняет запуск сервера
32Run() error
33
34// GracefulShutdown выполняет правильную остановку сервиса
35GracefulShutdown()
36
37// IsStarted возвращает статус состояния запуска сервиса
38IsStarted() bool
39
40// IsAlive возвращает статус сервиса: живой или нет
41IsAlive() bool
42}
43
44// SimpleService описывает интерфейс упрощенного сервиса, для библиотеки.
45// Данный сервис может быть использован в случаях, когда нет необходимости
46// внутри следить за флагами состояния. Сервис должен реализовывать лишь
47// функционал работы и правильной остановки.
48type SimpleService interface {
49// Run выполняет запуск упрощенной версии сервиса.
50// На вход передается контекст, который передаст `<-ctx.Done()` в случае
51// его остановки. Сам сервис должен обрабатывать его, если он не реализует
52// своего собственного, отдельного алгоритма остановки.
53Run(ctx context.Context) error
54
55// GracefulShutdown выполняет правильную остановку упрощенного
56// сервиса. В данном случае, если сервис необходимо останавливать
57// вызовом отдельного функционала остановки, этот метод предоставляет
58// такую возможность.
59//
60// Метод вызывается в процессе остановки сервера и принимает на вход
61// контекст с deadline, устанавливаемым сверху. За установленное время
62// сервис либо завершает работу, либо отключается принудительно.
63GracefulShutdown(ctx context.Context) error
64}
65