Когда возможностей Low-code платформы недостаточно для оптимальной интеграции процессов в существующий информационный ландшафт, мы рекомендуем создавать собственные микросервисы. Область применения таких сервисов очень большая и покрывает самые требовательные задачи бизнеса.
При установке сервиса независимо от платформы ELMA365 и их самостоятельной поддержке конечный разработчик и администратор могут столкнуться с трудностями в установке и эксплуатации решения.
Чтобы упростить и ускорить разработку собственных микросервисов, можно создать переносимый сервис внутри пользовательского модуля.
Сервис — это docker-контейнер, который выполняет определённую функцию на сервере. В ELMA365 этот контейнер оборачивается и размещается в отдельном пространстве в среде исполнения Kubernetes.
Начало внимание
Переносимые сервисы доступны только в ELMA365 On-Premises.
Конец внимание
Особенности добавления сервисов в модули
Сервисы и контейнеры, которые можно установить в модуль, имеют ряд ограничений и особенностей:
- Поддерживается только указание URL‑адреса контейнера. Это означает, что вы должны предварительно разместить образ своего сервиса в публичном или приватном репозитории в Docker Hub. Также сам образ сервиса не упаковывается при экспорте модуля и не переносится с пакетом .e365. На данный момент при установке готового модуля с сервисами системе требуется доступ к указанному адресу репозитория для скачивания docker-образа.
- У таких сервисов нет лимитов на ресурсы выполнения.
- Взаимодействие с сервисом возможно только из серверных сценариев модуля (виджеты, процессы, действия бизнес-процессов, методы API, обработчики событий) и только через HTTP‑запросы. Однако сам сервис может взаимодействовать с любым другим внешним сервисом по любому каналу связи и протоколу взаимодействия.
Ознакомиться с дополнительной информацией о переносимых сервисах можно в статьях:
- «Настройка переносимого сервиса в модуле» — создание сервиса в пользовательском модуле;
- «Включение переносимых сервисов» — включение переносимых сервисов в ELMA365 Enterprise;
- «Рекомендации по разработке микросервисов для переносимых сервисов» — разработка собственного микросервиса.
Пример использования сервиса
Предположим, что в одном из решений понадобилось генерировать и показывать математические формулы. Пользователи хорошо владеют языком описания формул LaTeX. В решении необходимо реализовать генерацию изображений из формулы LaTeX.
Для примера возьмём готовый контейнер с сервисом генерации картинки по формуле, который можно найти поиском в интернете.
Этот контейнер можно собрать самостоятельно из исходного кода и разместить в своём приватном репозитории в Docker Hub или использовать готовый из публичного репозитория Docker Hub.
Создание сервиса
В пользовательском модуле перейдите на вкладку Сервисы, создайте сервис и задайте его настройки.
Адрес образа указывает на репозиторий, расположенный в Docker Hub. Для приватного репозитория в Docker Hub вы можете указать любой полный адрес, а также указать логин и токен для безопасного подключения с авторизацией. Обратите внимание, что логин и токен при экспорте модуля передаются в открытом виде.
Использование сервиса в виджете
Созданный сервис можно использовать в серверном сценарии виджета для генерации картинки, применив HTTP‑метод GET /render
. Об этом говорится в описании сервиса.
В виджете пользователь указывает формулу в поле типа Строка и желаемую ширину картинки — поле типа Число.
Пример готового сценария:
async function renderImage(): Promise<void> {
let source = encodeURIComponent(Context.data.formula!);
let width = encodeURIComponent((Context.data.shirina_kartinki || 400).toString());
let imgResp = await Namespace.services.math.fetch(`/render?input=latex&inline=1&output=png&source=${source}&width=${width}`, {
headers: {
"Accept" : "image/png"
}
});
let buff = await imgResp.arrayBuffer();
Context.data.kartinka = await Context.fields.kartinka.create(`render-${Date.now()}.png`, buff);
}
В примере Namespace.services.math
используется для доступа к сервису. Это позволяет вызывать HTTP‑методы сервиса в серверных сценариях TS SDK. Для вызова указывается относительный адрес метода, остальное реализуется возможностями ELMA365.
В самом сценарии осуществляется запрос к методу сервиса. В ответе в буфере выдаётся картинка, её необходимо сохранить в виде файла и указать в переменной типа Файлы.
В результате реализован виджет, который можно использовать на любой странице или форме в системе:
Сгенерированная картинка будет выглядеть следующим образом: