Модули расширения системы > Пользовательские модули / Настройка переносимого сервиса в модуле

Настройка переносимого сервиса в модуле

Переносимые сервисы позволяют интегрировать микросервисы в пользовательские модули, расширяя их функциональные возможности.

При создании переносимого сервиса в модуле вы включаете в него адрес развертываемого образа микросервиса, его внутренние настройки и конфигурации для работы в кластере.

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

Добавление переносимых сервисов в модуль доступно только в ELMA365 On-Premises.

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

В этой статье рассмотрим процесс создания сервиса в пользовательском модуле.

Подробнее об использовании микросервисов в разработке пользовательских решений читайте в статьях:

Добавить и настроить переносимый сервис

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

portable-services-1

  • Имя* — название сервиса, отображаемое в списке на странице модуля;
  • Уникальное имя сервиса* — имя, которое будет использоваться в коде или сценариях для обращения к сервису. Заданное при создании имя невозможно изменить в дальнейшем;
  • Адрес образа* — URL-адрес образа docker. Если образ расположен в Docker Hub, допускается короткое относительное наименование. Когда для образа требуется аутентификация, нужно указать логин и токен учётных данных. Для этого в поле нажмите значок ключа, заполните форму и сохраните данные;
  • Порт HTTP* — порт, через который будет происходить взаимодействие с микросервисом. По умолчанию указан порт 3 000. При настройке ознакомьтесь с документацией микросервиса и определите, какой из портов следует выбрать.
  1. Нажмите Сохранить.

Откроется окно редактирования параметров сервиса.

  1. Укажите дополнительные настройки для работы сервиса. Они заполняются на отдельных вкладках: Основные настройки, Переменные окружения, Liveness, Readiness.

portable-services-2

Вкладка «Основные настройки»

В поле Количество экземпляров укажите число экземпляров микросервисов, которое будет поднято. При изменении количества следует учитывать, что в ELMA365 не поддерживается репликация сервисов. Если это не заложено в микросервис, то каждый из запущенных экземпляров не будет связан с остальными.

Вкладка «Переменные окружения»

На этой вкладке создаются переменные окружения образа микросервиса. Они используются, если в микросервисе допускается конфигурирование через переменные среды. Определить доступность конфигурирования можно в документации микросервиса. Для создания переменной на вкладке нажмите + Переменная окружения и заполните шаблон параметра сервиса в открывшемся окне.

portable-services-3

Обратите внимание, при добавлении или изменении переменных окружения микросервис перезапускается.

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

Например, в настройках модуля есть свойство ServiceTimeout. Можно создать переменную окружения RequestTimeout и указать в её шаблоне {$ServiceTimeout}. Тогда пользователи будут изменять значение свойства на главной странице настроек модуля и при этом устанавливать значение для переменной окружения в микросервисе.

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

Вкладка «Liveness»

Здесь вы можете включить возможность Kubernetes автоматически перезапускать микросервис в случае его неработоспособности. В выпадающем списке доступны следующие опции: Command, HTTP, TCP. Прежде чем включать Liveness-пробы и выбирать их тип, ознакомьтесь с документацией подключаемого микросервиса.

Вкладка «Readliness»

На этой вкладке включается возможность Kubernetes не позволять подключаться к микросервису до его полной инициализации. В выпадающем списке доступны следующие опции: Command, HTTP, TCP. Прежде чем включать Readliness-пробы и выбирать их тип, ознакомьтесь с документацией подключаемого микросервиса.

Конфигурирование параметров на вкладках Liveness и Readliness следует выполнять с особой осторожностью. В случае некорректной настройки и получении невалидного ответа Kubernetes будет считать микросервис неработоспособным и перезагружать его вне зависимости от его реального статуса. Включать параметры Liveness-проб и Readliness-проб рекомендуется, только если вы чётко понимаете специфику и последствия их использования.

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

Все созданные сервисы будут отображаться в управлении модулем, на вкладке Сервисы. Чтобы повторно открыть окно редактирования сервиса, нажмите на его название в списке. Для удаления сервиса отметьте его флажком и нажмите на появившуюся в правом углу страницы кнопку Удалить.

Запуск и выключение микросервисов

При включении модуля будут запущены все добавленные в него микросервисы. При выключении модуля микросервисы будут остановлены и удалены.

Один и тот же образ микросервиса, развёрнутый из разных модулей в одной компании, будет иметь разные экземпляры микросервиса.

Один и тот же образ микросервиса, развёрнутый из одного модуля в разных компаниях, будет иметь разные экземпляры микросервиса.

Монитор микросервисов

При включенном модуле статус добавленных в него микросервисов можно отслеживать на его странице. Для этого рядом с названием модуля отображается Монитор сервисов.

portable-services-4

Нажав на кнопку, вы увидите список всех микросервисов, заданных переносимыми сервисами. По каждому сервису отображаются данные об образе, из которого поднимается контейнер, о количестве набора реплик и их текущем статусе. При наличии возможностей кластера Kubernetes предоставлять метрики указываются также данные о потреблении ресурсов.

Взаимодействие с микросервисом

Скрипты

Взаимодействовать с микросервисами можно через API, предоставляемый скриптами. Он доступен в серверных скриптах и только в модуле, к которому принадлежит микросервис, например, в виджетах или бизнес-процессах модуля. В клиентских скриптах доступа к микросервисам нет.

Доступ к сервисам осуществляется через пространство имён Namespace.services. Если модуль не содержит переносимых сервисов, то это пространство имён будет отсутствовать в автозаполнении скриптов.

Для взаимодействия с микросервисом следует использовать метод fetch.

Простой GET-запрос без дополнительных параметров отправляется, если указать в качестве параметра относительный путь до API микросервиса.

const res = await Namespace.services.vap.fetch("/SayHello");
if (res.ok) {
const resText = await res.text();
}

Чтобы отправить другой тип запроса, указать параметры, задать заголовки и тело запроса, можно воспользоваться методом fetch, в качестве второго параметра которого передаётся FetchRequest.

const res = await Namespace.services.vap.fetch("/RememberMe", {
        method: 'POST',
        headers: {
            Authorization: 'myToken',
            },
        body: JSON.stringify({
            name: 'Ivan',
            age: 27,
        })
    } );

Для проверки состояния микросервиса используется метод status. Результатом будет перечисление ServiceStatus, несущее информацию о текущем статусе.

const info = await Namespace.services.vap.status();

Обмен данными между двумя переносимыми сервисами

Если разработчик микросервиса предусмотрел возможность взаимодействия между двумя микросервисами внутри Модуля, то настроить путь доступа из Переносимого сервиса-1 к Переносимому сервису-2 можно через переменные окружения.

Для этого добавьте в настройку Переносимого сервиса-1 переменную окружения с названием, указанным в документации микросервиса, задайте в ней шаблон имени Переносимого сервиса-2. Например, {$_srv_serv2}.

Экспорт и импорт модуля с сервисом

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