Разработка решений на платформе ELMA365 > Переносимые сервисы в модулях / Пример использования Readiness проверки в переносимых сервисах

Пример использования Readiness проверки в переносимых сервисах

В статье рассматривается пример реализации Readiness пробы через http-запрос.

Начало внимание 

В данной статье не поясняется, как определить необходимость использования Readiness пробы.

Конец внимание 

Исходные данные

В модуле имеется два переносимых сервиса. Сервис#1 может предоставлять информацию о своём состоянии по http-запросу. Сервис#2 может интерпретировать полученные ответы или их отсутствие.

Требуется настроить Сервис#2 так, чтобы он не принимал входящий трафик при некотором состоянии Сервиса#1.

Принято решение делать это через Readiness пробы.

Доработка Сервиса#2

Для Сервиса#2 необходимо определить обработку http-запроса, выполняющего получение статуса Сервиса#1.

Из переменной окружения SERV1URL берётся адрес Сервера#1. Ему отправляется http-запрос. Если получен ответ со статусом 200 и тело ответа удовлетворяет условиям проверки Сервиса#2, то добавленный метод будет возвращать статус 200. В ином случае статус 504.

func readnessFunc(w http.ResponseWriter, r *http.Request) {
 if serv1URL, exists := os.LookupEnv("SERV1URL"); exists {
         response, err := http.Get(serv1URL + "/getstatus")
         if err == nil &&
                 response.StatusCode == 200 &&
                 isValidStatus(response.Body) {
                 fmt.Fprintf(w, "Yeah, it is works")
                 return
         }
 }
 w.WriteHeader(http.StatusGatewayTimeout)
}

Настройка Сервиса#2

После того как образ Сервиса#2 собран и залит, нужно настроить использование Readiness пробы в ELMA365. Для этого:

  1. В настройках модуля перейдите на вкладку Сервисы, затем откройте режим редактирования Сервиса#2.
  2. На вкладке Readiness выберите тип HTTP.
  3. Установите задержку перед началом сбора пробы.

Начало внимание 

Не устанавливайте слишком малое число задержки. Сервис#2 должен успеть инициализироваться в кластере, чтобы принимать запросы в пробы. Установка недостаточного значения может привести к тому, что Сервис#2 будет недоступен.

Конец внимание

  1. Укажите порт и путь на Сервисе#2 до http-метода, обеспечивающего проверку.
  2. Передайте Сервису#2 информацию о расположении Сервиса#1. Для этого перейдите на вкладку Переменные окружения и создайте запись SERV1URL со значением, указывающим на Сервис#1.
  3. Укажите адрес сервиса, нажав {+} в контроле ввода значения, и выберите сервис из списка. Будет сформировано значение вида {$_srv_ИмяСервиса#1}.

Дополнительная информация

При разработке и реализации учтите, что Readiness проба выполняется на протяжении всего существования Сервиса#2. В предложенном примере http-запросы от Сервиса#2 к Сервису#1 будут идти постоянно.