.. _blob_adapter_config: Конфигурация BLOB-адаптера (application.yml) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Файл ``application.yml`` – основной конфигурационный файл **BLOB-адаптер**, в котором задана логика и порядок работы модуля: - получение и обработка входящих запросов; - настройка подключения к СМЭВ3-адаптеру, ПОДД-адаптеру и Хранилищу BLOB-объектов, и другие настройки необходимые для корректной работы модуля. .. _blob-application.yml: Пример файла application.yml ################################### В конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач. .. code-block:: yaml 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:1000} 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} Параметры конфигурации ^^^^^^^^^^^^^^^^^^^^^^ Настройка конфигурации **BLOB-адаптера** осуществляется путем редактирования параметров настроек в файле ``application.yml``, где настраиваются секции: - ``http-server`` - указывается порт сервера; - ``executor`` - настраивается размер пула для запросов; - ``vertx`` - настраиваются значения вертиклов; - ``kafka`` - настраиваются параметры подключения к шине данных **Apache Kafka**; - ``blob`` - настраивается подключенея к Хранилищу BLOB-объектов; - ``logging`` - настраивается сохранение лог-файла; - ``metrics`` - настраивается получение метрик. Секция http-server ################### Секция ``http-server`` позволяет настраивать взаимодействие с BLOB-объектами через модуль **СМЭВ3-адаптер** по протоколу ``http/https`` и задавать порт, на котором будет открыт доступ к серверу. Например: .. code-block:: yaml http-server: enabled: ${SERVER_ENABLED:true} port: ${SERVER_PORT:8081} - ``enabled`` - флаг активации работы с сервером; - ``port`` - порт, на котором будет открыт доступ к серверу. Секция executor ############### Секция ``executor`` предназначена для масштабирования нагрузки (увеличения / уменьшения) на модуль. Например: .. code-block:: yaml executor: reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20} **Параметры настроек** - ``reader-pool-size`` - размер пула для чтения **Kafka**, например ``EXECUTOR_READER_POOL_SIZE:20``. Секция vertx ############ Секция ``vertx`` определяет настройки количества вертиклов. Например: .. code-block:: yaml vertx: web-client: max-pool-size: 20 **Параметры настроек** - ``max-pool-size`` - максимальное значение для веб-клиента. Секция kafka ############ Секция ``kafka`` предназначена для настройки параметров подключения к шине данных **Apache Kafka** (используется для взаимодействия с **ПОДД-адаптером**). Например: .. code-block:: yaml 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}`` :ref:`blob_rq`, :ref:`blob_rs`, :ref:`blob_err` - топики взаимодействия с **ПОДД-адаптером - Модуль исполнения запросов** (см. :ref:`podd-specification`). Секция blob ################### Секция ``blob`` предназначена для настройки: - размера выгружаемого чанка BLOB; - пути к Хранилищу BLOB-объектов (GET-запрос); - метода аутентификации для модуля BLOB-адаптера; - получения токена; - повторной аутентификаций при истечении времени жизни токена. Например: .. code-block:: yaml 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) .. code-block:: bash 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) .. code-block:: bash 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) .. code-block:: bash 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 надо использовать строку вызова: .. code-block:: bash http://aa.bb.cc:8080/api/v1/blobs/12345678 Настройки файла ``application.yml`` должны иметь следующий вид: .. code-block:: yaml blob-storage: protocol: http host: aa.bb.cc port: 8080 path-prefix: api/v1/blobs/ **Пример 2** Если в Витрине поле с типом ``LINK`` содержит текст ``12345678`` и для получения содержимого BLOB надо использовать строку вызова: .. code-block:: bash https://aa.bb.cc/api/v1/blobs/12345678/data?format=jpg&size=low&backgraund=#000000, Настройки файла ``application.yml`` должны иметь следующий вид: .. code-block:: yaml 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 надо использовать строку вызова: .. code-block:: bash http://aa.bb.cc:8080/api/v1/blobs/12345678 Настройки файла ``application.yml`` должны иметь следующий вид: .. code-block:: yaml blob-storage: protocol: ${PROT:http} host: ${HOST:aa.bb.cc} port: ${PORT:80} path-prefix: ${PREFIX:api/v1/blobs/} **Пример 4** Если требуется получить строку вида: .. code-block:: bash https://aa.bb.cc:8080/app/{link}/download?requester_id={value}&user=fdsfs&zip=true Необходимо настроить: 1. В Витрине данных поле с типом ``LINK`` должно содержать текст: .. code-block:: bash 12345678/download?requester_id=ABCDEFGH 2. В файл ``application.yml`` добавить следующие настройки: .. code-block:: yaml blob-storage: protocol: https host: aa.bb.cc port: 8080 path-prefix: api/ params: user: fdsfs zip: true **Указание дополнительных параметров к Хранилищу BLOB-объектов** Например .. code-block:: yaml blob-storage: params: name1: value1 name2: value2 Пример запроса .. code-block:: bash /files/test?name1=value1&name2=value2 Секция logging ############## В секции ``logging`` настраивается логирование работы модуля. Например: .. code-block:: yaml 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``. Секция metrics ############## Секция ``metrics`` предназначена для настройки параметров метрик. Например: .. code-block:: yaml metrics: port: ${METRICS_PORT:9837} **Параметры конфигурации** - ``port`` - Порт для метрик, например ``METRICS_PORT:9837``.