msrc

Форк
0
/
interfaces.go 
64 строки · 3.8 Кб
1
package msrc
2

3
import "context"
4

5
// MultiServiceInterface описывает интерфейс сервера с множественными
6
// дочерними сервисами. Идея в том, чтобы запускать каждый дочерний
7
// сервис в отдельном потоке и реагировать на остановку каждого из них.
8
// Если сервис завершил работу с ошибкой, то необходимо остановить работу
9
// приложения, для гарантии его корректной работоспособности.
10
//
11
// Данный подход хорошо подходит для Kubernetes, который отслеживает
12
// не корректные остановки подов. Если POD завершил работу с ошибкой
13
// и он должен продолжать работать - Kubernetes перезапустит его в
14
// автоматическом режиме.
15
type MultiServiceInterface interface {
16
	// Run выполняет запуск основного сервиса
17
	Run() error
18

19
	// Stop выполняет остановку основного сервиса
20
	Stop()
21

22
	// IsServicesRun проверяет, запущен ли сервер
23
	IsServicesRun() bool
24

25
	// IsServicesAlive проверяет, остановлен ли хоть один из сервисов
26
	IsServicesAlive() bool
27
}
28

29
// ServiceInterface описывает интерфейс сервиса, для параллельного запуска.
30
type ServiceInterface interface {
31
	// Run выполняет запуск сервера
32
	Run() error
33

34
	// GracefulShutdown выполняет правильную остановку сервиса
35
	GracefulShutdown()
36

37
	// IsStarted возвращает статус состояния запуска сервиса
38
	IsStarted() bool
39

40
	// IsAlive возвращает статус сервиса: живой или нет
41
	IsAlive() bool
42
}
43

44
// SimpleService описывает интерфейс упрощенного сервиса, для библиотеки.
45
// Данный сервис может быть использован в случаях, когда нет необходимости
46
// внутри следить за флагами состояния. Сервис должен реализовывать лишь
47
// функционал работы и правильной остановки.
48
type SimpleService interface {
49
	// Run выполняет запуск упрощенной версии сервиса.
50
	// На вход передается контекст, который передаст `<-ctx.Done()` в случае
51
	// его остановки. Сам сервис должен обрабатывать его, если он не реализует
52
	// своего собственного, отдельного алгоритма остановки.
53
	Run(ctx context.Context) error
54

55
	// GracefulShutdown выполняет правильную остановку упрощенного
56
	// сервиса. В данном случае, если сервис необходимо останавливать
57
	// вызовом отдельного функционала остановки, этот метод предоставляет
58
	// такую возможность.
59
	//
60
	// Метод вызывается в процессе остановки сервера и принимает на вход
61
	// контекст с deadline, устанавливаемым сверху. За установленное время
62
	// сервис либо завершает работу, либо отключается принудительно.
63
	GracefulShutdown(ctx context.Context) error
64
}
65

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.