8. Конфигурация BLOB-адаптера (application.yml)
Файл application.yml – основной конфигурационный файл BLOB-адаптер, в котором задана логика и порядок работы модуля:
получение и обработка входящих запросов;
настройка подключения к СМЭВ3-адаптеру, ПОДД-адаптеру и Хранилищу BLOB-объектов, и другие настройки необходимые для корректной работы модуля.
8.1. Пример файла application.yml
В конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.
http-server:
enabled: ${SERVER_ENABLED:true}
port: ${SERVER_PORT:8081}
executor:
reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}
vertx:
web-client:
max-pool-size: 20
kafka:
agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:100}
commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
external:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
enabled: ${KAFKA_ENABLED:true}
consumer:
blob-request: ${kafka.external.topic.prefix}blob.rq
# максимальное количество обработчиков входящих запросов
max-concurrent-handle: ${kafka.max-concurrent-handle}
# периодичность фиксации оффсета обработанных сообщений
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
group.id: ${AGENT_TOPIC_PREFIX:}blob-consumer
auto.offset.reset: earliest
enable.auto.commit: false
producer:
blob-result: ${kafka.external.topic.prefix}blob.rs
blob-error: ${kafka.external.topic.prefix}blob.err
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
blob:
chunk-size: ${CHUNK_SIZE:524288}
storage:
protocol: ${BLOB_STORAGE_PROTOCOL:http}
host: ${BLOB_STORAGE_HOST:localhost}
port: ${BLOB_STORAGE_PORT:8888}
path-prefix: ${BLOB_STORAGE_PATH_PREFIX:}
path-postfix: ${BLOB_STORAGE_PATH_POSTFIX:}
auth:
type: ${BLOB_STORAGE_AUTH_TYPE:NONE}
user: ${BLOB_STORAGE_AUTH_USER:user}
password: ${BLOB_STORAGE_AUTH_PASSWORD:pass}
token: ${BLOB_STORAGE_AUTH_TOKEN:token}
authorization-server:
protocol: ${AUTH_SERVER_PROTOCOL:http}
host: ${AUTH_SERVER_HOST:localhost}
port: ${AUTH_SERVER_PORT:80}
path: ${AUTH_SERVER_PATH:oauth2/token}
client-id: ${AUTH_SERVER_CLIENT_ID:}
client-secret: ${AUTH_SERVER_CLIENT_SECRET:}
# params:
# name1: value1
# name2: value2
logging:
request-response:
blob-request: ${BLOB_REQUEST_LOG_ENABLED:false}
blob-response: ${BLOB_RESPONSE_LOG_ENABLED:false}
metrics:
port: ${METRICS_PORT:9837}
9. Параметры конфигурации
Настройка конфигурации BLOB-адаптера осуществляется путем редактирования параметров настроек в файле application.yml,
где настраиваются секции:
http-server- указывается порт сервера;executor- настраивается размер пула для запросов;vertx- настраиваются значения вертиклов;kafka- настраиваются параметры подключения к шине данных Apache Kafka;blob- настраивается подключение к Хранилищу BLOB-объектов;logging- настраивается логирование работы модуля;metrics- настраивается получение метрик.
9.1. Секция http-server
Секция http-server позволяет настраивать взаимодействие с BLOB-объектами через модуль СМЭВ3-адаптер по
протоколу http/https и задавать порт, на котором будет открыт доступ к серверу.
Например:
http-server:
enabled: ${SERVER_ENABLED:true}
port: ${SERVER_PORT:8081}
enabled- флаг активации работы с сервером;port- порт, на котором будет открыт доступ к серверу.
9.2. Секция executor
Секция executor предназначена для масштабирования нагрузки (увеличения / уменьшения) на модуль.
Например:
executor:
reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}
Параметры настроек
reader-pool-size- размер пула для чтения Kafka, напримерEXECUTOR_READER_POOL_SIZE:20.
9.3. Секция vertx
Секция vertx определяет настройки количества вертиклов.
Например:
vertx:
web-client:
max-pool-size: 20
Параметры настроек
max-pool-size- максимальное значение для веб-клиента.
9.4. Секция kafka
Секция
kafkaпредназначена для настройки параметров подключения к шине данных Apache Kafka (используется для взаимодействия с ПОДД-адаптером).
Например:
kafka:
agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:1000}
commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
external:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${agent.topic.prefix}}
enabled: ${KAFKA_ENABLED:true}
consumer:
blob-request: ${kafka.external.topic.prefix}blob.rq
# максимальное количество обработчиков входящих запросов
max-concurrent-handle: ${kafka.max-concurrent-handle}
# периодичность фиксации оффсета обработанных сообщений
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
group.id: ${AGENT_TOPIC_PREFIX:}blob-consumer
auto.offset.reset: earliest
enable.auto.commit: false
producer:
blob-result: ${kafka.external.topic.prefix}blob.rs
blob-error: ${kafka.external.topic.prefix}blob.err
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
Параметры конфигурации
enabled- флаг включения чтения из Kafka, напримерKAFKA_ENABLED:true;blob-request- максимальное количество обработчиков входящих запросов, например${kafka.external.topic.prefix}blob.rq;max-concurrent-handle- периодичность фиксации оффсета обработанных сообщений, например${kafka.max-concurrent-handle}
blob.rq, blob.rs, blob.err - топики взаимодействия с ПОДД-адаптером - Модуль исполнения запросов (см. Спецификация Модуля исполнения запросов).
9.5. Секция blob
Секция blob предназначена для настройки:
размера выгружаемого чанка BLOB;
пути к Хранилищу BLOB-объектов (GET-запрос);
метода аутентификации для модуля BLOB-адаптера;
получения токена;
повторной аутентификаций при истечении времени жизни токена.
Например:
blob:
chunk-size: ${CHUNK_SIZE:524288}
storage:
protocol: ${BLOB_STORAGE_PROTOCOL:http}
host: ${BLOB_STORAGE_HOST:localhost}
port: ${BLOB_STORAGE_PORT:8888}
path-prefix: ${BLOB_STORAGE_PATH_PREFIX:}
path-postfix: ${BLOB_STORAGE_PATH_POSTFIX:}
auth:
type: ${BLOB_STORAGE_AUTH_TYPE:NONE}
user: ${BLOB_STORAGE_AUTH_USER:user}
password: ${BLOB_STORAGE_AUTH_PASSWORD:pass}
token: ${BLOB_STORAGE_AUTH_TOKEN:token}
authorization-server:
protocol: ${AUTH_SERVER_PROTOCOL:http}
host: ${AUTH_SERVER_HOST:localhost}
port: ${AUTH_SERVER_PORT:80}
path: ${AUTH_SERVER_PATH:oauth2/token}
client-id: ${AUTH_SERVER_CLIENT_ID:}
client-secret: ${AUTH_SERVER_CLIENT_SECRET:}
# params:
# name1: value1
# name2: value2
Параметры конфигурации
chunk-size- размер выгружаемого чанка BLOB, например${CHUNK_SIZE:524288};protocol- протокол обмена с сервером Хранилища BLOB-объектов (одно из значенийhttpилиhttps), напримерBLOB_STORAGE_PROTOCOL:http;host- имя сервера Хранилища BLOB-объектов, напримерBLOB_STORAGE_HOST:localhost;port- TCP-порт Хранилища BLOB-объектов, если отсутствует, то следует использовать следующие порты80для HTTP,443для HTTPS, напримерBLOB_STORAGE_PORT:8888;path-postfix- окончание пути, начало списка параметров, напримерBLOB_STORAGE_PATH_PREFIX:;path-prefix- постоянная часть пути до Хранилища BLOB-объектов, путь до места хранения BLOB-объекта на сервере Хранилища BLOB-объектов, напримерBLOB_STORAGE_PATH_POSTFIX:;auth- параметры аутентификации BLOB-адаптера;type-тип аутентификации (NONE- нет,BASIC- по имени/паролю,TOKEN- по токену,AUTH- через сервер аутентификации), напримерBLOB_STORAGE_AUTH_TYPE:NONE;user- имя пользователя (для аутентификацииBASIC), напримерBLOB_STORAGE_AUTH_USER:user;password- пароль (для аутентификацииBASIC), напримерBLOB_STORAGE_AUTH_PASSWORD:pass;token- токен (для аутентификацииTOKEN), напримерBLOB_STORAGE_AUTH_TOKEN:token;protocol- имя протокола HTTP или HTTPS (для аутентификацииAUTH), напримерAUTH_SERVER_PROTOCOL:http;host- строка с IP или FQDN сервера авторизации (для аутентификацииAUTH), напримерAUTH_SERVER_HOST:localhost;port- TCP-порт (для аутентификацииAUTH), напримерAUTH_SERVER_PORT:80;path- путь на сервере (для аутентификацииAUTH), напримерAUTH_SERVER_PATH:oauth2/token;client-id- идентификатор клиента, присвоенный BLOB-адаптеру в сервере авторизации (для аутентификацииAUTH), напримерAUTH_SERVER_CLIENT_ID:;client-secret- секретный код клиента, присвоенный BLOB-адаптеру в сервере авторизации (для аутентификацииAUTH), напримерAUTH_SERVER_CLIENT_SECRET:;params- дополнительные параметры запроса к Хранилищу BLOB-объектов.
Пример cURL-запроса к серверу аутентификации
cURL (windows)
curl -X POST http://t5-avanpost-01.ru-central1.internal/oauth2/token ^
-H "Accept: application/json"^
-H "Content-type: application/x-www-form-urlencoded"^
--data "grant_type=client_credentials&client_id=b0fd0f28-4b99-40d7-8dd3-e663a6cc77d1&client_secret=Zaq1sd!sa2" ^
-o result.txt ^
--trace-ascii result.log
cURL (linux)
curl --request POST \
--url http://t5-avanpost-01.ru-central1.internal/oauth2/token \
--header 'Accept: application/json' \
--header 'Content-type: application/x-www-form-urlencoded' \
--data 'grant_type=client_credentials&client_id=b0fd0f28-4b99-40d7-8dd3-e663a6cc77d1&client_secret=Zaq1sd!sa2' \
-o result.txt
Пример cURL-запроса к Хранилищу BLOB-объектов
cURL (windows)
curl -X GET http://vmserv1.internal.example.com:8080/datamart/data/v1/blobs/1234567 ^
-H "Authorization: bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjEifQ.eyJqdGkiOiI5YmQ3MzdjZi05MDNmLTQxZTktYjI5Mi1mZmUwM2QzNDhkNWIiLCJleHAiOjE2NTQxMDI5NDgsImlhdCI6MTY1NDEwMTE0OCwiaXNzIjoiY2VydC5pc3N1ZXIuaG9zdCIsImF1ZCI6IiIsImV4cGlyZXNfaW4iOjE4MDAsImNsaWVudF9pZCI6ImIwZmQwZjI4LTRiOTktNDBkNy04ZGQzLWU2NjNhNmNjNzdkMSJ9.qi8JKlQAdMsK3fTq4H88Z5-FppaUP95OH-rmPtCxEMmlPnyhNCRJe34aKMR5mXVldEzY1clV87-qjWCyPLH_Zkqji1C7aQz7fMbgZixhY2wrQnXAXRfslkRe5Ph3GYYd26GvWOG1xl99AHvfDWIfI1SGcJyd0z_iOl1GbghLvSV38MquZ8ugBdKaDjV-Ww3U_sWlJVO-oF8xjUMYuhOSsCNxhxMng1oVwUdAUbbgoB5ldyoGTbqmbQMYvBmKBT0eZqOR6RnJEAjmfOC9YeWwADKwovFybvGOaQZsjlaoJ2XxpmS79U7UO_6KXK1cnHfshVuB5_yUwubrRh6tRxt0CA"^
-o result.bin ^
--trace-ascii result.log
Пример настройки динамической ссылки на файлы с содержимым BLOB-полей
Пример 1
Если в Витрине поле с типом LINK содержит текст 12345678 и для получения содержимого BLOB надо использовать строку вызова:
http://aa.bb.cc:8080/api/v1/blobs/12345678
Настройки файла application.yml должны иметь следующий вид:
blob-storage:
protocol: http
host: aa.bb.cc
port: 8080
path-prefix: api/v1/blobs/
Пример 2
Если в Витрине поле с типом LINK содержит текст 12345678 и для получения содержимого BLOB надо использовать строку вызова:
https://aa.bb.cc/api/v1/blobs/12345678/data?format=jpg&size=low&backgraund=#000000,
Настройки файла application.yml должны иметь следующий вид:
blob-storage:
protocol: https
host: aa.bb.cc
path-prefix: api/v1/blobs/
path-postfix: /data
params:
format: jpg
size: low
backgraund: "#000000"
Пример 3
Если в Витрине поле с типом LINK содержит текст 12345678 и для получения содержимого BLOB надо использовать строку вызова:
http://aa.bb.cc:8080/api/v1/blobs/12345678
Настройки файла application.yml должны иметь следующий вид:
blob-storage:
protocol: ${PROT:http}
host: ${HOST:aa.bb.cc}
port: ${PORT:80}
path-prefix: ${PREFIX:api/v1/blobs/}
Пример 4
Если требуется получить строку вида:
https://aa.bb.cc:8080/app/{link}/download?requester_id={value}&user=fdsfs&zip=true
Необходимо настроить:
В Витрине данных поле с типом
LINKдолжно содержать текст:
12345678/download?requester_id=ABCDEFGH
В файл
application.ymlдобавить следующие настройки:
blob-storage:
protocol: https
host: aa.bb.cc
port: 8080
path-prefix: api/
params:
user: fdsfs
zip: true
Указание дополнительных параметров к Хранилищу BLOB-объектов
Например
blob-storage:
params:
name1: value1
name2: value2
Пример запроса
/files/test?name1=value1&name2=value2
9.6. Секция logging
В секции logging настраивается логирование работы модуля.
Например:
logging:
request-response:
blob-request: ${BLOB_REQUEST_LOG_ENABLED:false}
blob-response: ${BLOB_RESPONSE_LOG_ENABLED:false}
Параметры настроек
blob-request- журналировать запросы, напримерBLOB_REQUEST_LOG_ENABLED:false;blob-request- журналировать ответы, напримерBLOB_RESPONSE_LOG_ENABLED:false.
9.7. Секция metrics
Секция metrics предназначена для настройки параметров метрик.
Например:
metrics:
port: ${METRICS_PORT:9837}
Параметры конфигурации
port- Порт для метрик, напримерMETRICS_PORT:9837.