Конечные точки ECOS
Для работы с ресурсами по сети в Citeck ECOS предусмтрен тип артефакта ECOS Endpoint.
Расположение артефактов с данным типом: model/endpoint
Модель конфигурации:
id: String # идентификатор конечной точки
name: MLText # имя конечной точки
url: String # адрес конечной точки
credentials: EntityRef # параметры для доступа к конечной точке. Здесь указывается ссылка на сущность EcosSecret
Пример конфигурации:
---
id: content-storage-s3-endpoint
name:
ru: S3 Хранилище контента
en: S3 content storage
url: http://localhost:9000
credentials: emodel/secret@content-storage-s3-credentials
Информация о конечных точках по умолчанию хранится и загружается из БД микросервиса ecos-model, но так же есть возможнось указать настройки через переменные среды. Для этого следует взять идентификатор конечной точки и сконвертировать его по следующим правилам:
Разбиваем camelCase на части через символ „_“. Например: camelCase → camel_Case
Заменяем все символы ‘-“ и „.“ на „_’
Заменяем все символы, которые не входят в перечень
[a-zA-Z0-9_]
на_X{код_символа}_
Переводим получившуюся строку в верхний регистр и добавляем префикс “ECOS_ENDPOINT_“
Таким образом для примера выше мы можем задать следующие переменные среды:
ECOS_ENDPOINT_CONTENT_STORAGE_S3_ENDPOINT_URL=http://localhost:9000
ECOS_ENDPOINT_CONTENT_STORAGE_S3_ENDPOINT_CREDENTIALS=content-storage-s3-credentials
Переменные среды приоритетнее хранилища конечных точек в БД микросервиса ecos-model и они могут быть заданы как непосредственно в микросервисе который будет использовать эти конечные точки так и в ecos-model.
Использование конечных точек в коде
Получение:
EcosEndpoint endpoint = EcosEndpoints.getEndpoint(endpointId);
String url = endpoint.getUrl(); // url можно использовать для подключения к удаленному ресурсу
EcosSecret secret = endpoint.getCredentials(); // загружаем секрет с параметрами доступа
BasicSecretData basicData = secret.getBasicData(); // если мы уверены, что это всегда BasicData (username и password), то можем загрузить эти данные без проверок типа секрета
String username = basicData.getUsername();
String password = basicData.getPassword();
Подписка на изменения:
EcosEndpoints.listenChanges((endpointId) -> {
// здесь можем пересоздать подключения, которые зависят от endpointId
return Unit.INSTANCE;
});