Порой во время взаимодействия между системами участников появляется необходимость в передаче или получении некоторых документов. Тогда с сообщением передается вложение. И если в СМЭВ 3 используются такие методы передачи документов как MTOM (когда файл передается в двоичном формате посредством протокола SOAP) и протокол FTP (загрузка файлов в Файловое хранилище (ФХ). Что дает возможность передавать вложения как ответчику, так и поставщику. То для СМЭВ 4 используется специальный программный модуль Витрины данных, именуемый BLOB-адаптером. Данный модуль оперирует BLOB-объектами. И настраивается исключительно в контуре поставщика. Таким образом, в СМЭВ 4 пока есть возможность передавать вложения только у поставщика. Потребитель в свою очередь их запрашивает и получает от поставщика.
Так что же подразумевается под BLOB-объектами?
BLOB-объект (Binary Large Object – двоичный большой объект) представляет из себя массив двоичных данных, предназначенный для хранения бинарных неизменяемых и необработанных файлов: аудио, видео, почта, архивы, изображения, копии документов, текстовые файлы и т.д.
Для работы и получения доступа к BLOB-объектам используются специальные Хранилища BLOB-объектов, которые предназначены для оптимизированного хранения больших объемов неструктурированных данных. Т.е. данных, которые не соответствуют определенной модели данных или определению, как те же текстовые данные. Соответственно, спектр возможностей у подобных хранилищ довольно обширный.
Важно учитывать, что Хранилища BLOB-объектов настраиваются на стороне поставщика. Т.е. для работы с вложениями необходимо, чтобы у поставщика было настроено и Хранилище, и BLOB-адаптер. Обращение с подобными BLOB-объектами возможно через отдельное ПО под названием MinIO. Оно необходимо для настройки Хранилища BLOB-объектов. MinIO является популярной технологией распределенного хранения объектов. Основной задачей этого хранилища будет хранение документов с постоянной возможностью их загрузки или выгрузки. Приложение может быть установлено на любой локальной или отдельной удаленной машине.
Для обеспечения возможности получения системой Потребителя BLOB-объектов необходимо выполнение следующих условий:
- Витрина Поставщика данных должна поддерживать тип данных «двоичный объект»;
- в метаданных Витрины для соответствующих атрибутов Витрины Поставщика данных должен быть установлен тип данных «двоичный объект».
BLOB-адаптер предназначен для следующих задач:
- настройка доступа в Хранилище BLOB-объектов;
- предоставление регламентированного доступа к BLOB-объектам;
- получение и отправка запросов на получение BLOB-объектов;
- чтение BLOB-объектов.
Подробнее о том, как развернуть BLOB-адаптер можно узнать в статье Установка Blob-адаптера.
У BLOB-адаптера имеется основной вариант взаимодействия с BLOB-объектами. Это инициализация запросов с использованием ПОДД Агента. Доступ к считыванию BLOB-объектов производится через HTTP протокол согласно указанным параметрам в конфигурации BLOB-адаптера.
Взаимодействие через СМЭВ 4
В случае выполнения запроса, результат которого содержит атрибуты с типом данных «двоичный объект», в составе результата запроса атрибут может принимать одно из следующих возможных значений:
- непосредственно сам двоичный объект;
- уникальная ссылка на получение двоичного объекта с Витрины Поставщика данных.
Процесс обработки запроса на получение BLOB-объекта через Адаптер ПОДД (Рисунок 1):
- Запрос на получение данных направляется из Агента ПОДД потребителя в СМЭВ 4 (в Ядро ПОДД);
- Из Ядра ПОДД запрос передается через Агент ПОДД поставщика в Витрину;
- Витрина данных осуществляет обработку запроса и возвращает ответ, в котором содержится ссылка на вложение;
- Ответ передается в СМЭВ 4, после чего доставляется в Агент ПОДД потребителя;
- Потребитель вновь направляет запрос, но на этот раз на получение вложения по ссылке, которую получил ранее в ответе;
- Запрос вновь проходит через Ядро ПОДД и передается Витрине данных;
- Адаптер ПОДД поставщика считывает данные полученные от Витрины и отправляет ответ в Kafka, на стороне ПОДД. В случае, если в теле запроса содержится ссылка на BLOB-объект Kafka (на стороне ПОДД), отправляет запрос в BLOB-адаптер на получение этого файла. BLOB-адаптер, считывает ссылку на BLOB-объект и обращается в Хранилище BLOB-объектов на стороне ведомства. После получения BLOB-объекта, возвращает его в ПОДД.
Рисунок 1 – Схема обмена blob-объектами через СМЭВ4.