- Создал(а) Неизвестный пользователь (pavel.shevchenko), редактировал(а) Неизвестный пользователь (a.s.voronin@rt-sk.ru) янв 07, 2025

В гите есть 2 репозитория:

- https://git.gosuslugi.local/pgs2-rtlabs/source/mz-service/-/tree/dev (ветка dev!) - здесь хранится "ядро" сервиса, т.е. основная бизнес-логика работы в инфраструктуре ПГС - отправка моков и информации о сервеси при старте, обработка ошибок и получение и остылка сообщений в нужные топики. А также, дефолтная имплементация сервиса - это простое преобразование из формата XML СМЭВ по XSD схеме в обычный json или xml без атрибутов
- https://git.gosuslugi.local/pgs2-rtlabs/source/mz-xsd-storage.git (ветка master) - здесь хранится кастомизация сервисов, а также XSD схемы, моки и настройки для каждого из вида услуг. Каждая папка в данном репозитории - это дополнительные исходники для сервиса.

Важно! Для корректной работы на локальном компьютере необходимо установить gradle и git последних версий

## Как использовать mz-service

На примере написания нового сервиса mvd-passport-validity:

1. Клонируем репозиторий https://git.gosuslugi.local/pgs2-rtlabs/source/mz-service/-/tree/dev
2. Задаём имя сервиса, который нам требуется (либо новый, либо тот, который хотим отредактировать) одним из 3-х способов
   1. задать переменную окружения MZ_SERVICE_NAME с названием сервиса (название сервиса совпадает с названием папки в mz-xsd-storage)
   2. задать системную переменную MZ_SERVICE_NAME - т.е. запускать gradle таски с параметром -DMZ_SERVICE_NAME=<имя_сервиса>
   3. третий вариант - это прописать название сервиса в build.gradle примерно в 25-ой строчке:, т.е. это дефолтное значение, если не указана переменная окружения или системная переменная (только не нужно коммитить это )
3. Далее подготавливаем сервис. Для этого запускаем в gradle таску prepareService. Что происходит при запуске:
   1. gradle использует Git для подключения исходников из второго репозитория https://git.gosuslugi.local/pgs2-rtlabs/source/mz-xsd-storage.git. Но делает это максимально быстро: подгружается не весь репозиторий, а только нужная папка
   2. исходники из второго репозитория положатся в папку mz-xsd/mvd-passport-validity
4. Синхронизируйте проект IDEA с Gradle. После этого директории и mvd-passport-validity подключатся как дополнительный source-set:
5. Далее создаём струтктуру каталогов и нужные файлы конфигурации для сервиса по номеру версии протокола (для нашего примера mvd-passport-validity, версия протокола 1.3.0) (Важно! В качестве разделителя в номере версии выбрана нижняя черта. это связано с техническими ограничениями библиотек, поэтому каталог для версии 1.3.0 будет называться 1_3_0 ). В каждом каталогее версии должны присутствовать следующие каталоги:
   1. api - здесь хранятся примеры запросов и ответов, а также сгенерированные json-схемы для формата запросов и ответов - сюда класть ничего не нужно, эта директория и файлы в ней создаются автоматически
   2. schema - файлы схемы. Важно! Осень рекомендуется переименовывать корневой файл xsd в schema.xsd, чтобы избежать фрагментации в настройках и не заморачиваться на окнфигах (файл shema.xsd ищется по умолчанию)
   3. mock - всё, что связано с моками. В случае с mvd-passport-validity на тех. портале было 3 примера запросов и ответов. Так же, лежит файл mock.yml по формату точно такой же как и был:
   4. файл binding.xml - файл, вкотором описываются некоторые правила для генерации классов из XSD (например, кастомные адаптеры, неймспейсы и имена классов для конкретных типов и элементов - для решения конфликтов имён). Формат всегда можно посмотреть в интернете, либо в уже готовых сервисах.
6. Создаём файл application-prod.yml - это файл настроек Micronaut с профайлом prod. В этом файле можно переопределять любые настройки сервиса. Кроме того, описываются специфические значения для конкретного сервиса:

       app:
         # название сервиса (без префикса mz-)
         service-name: mvd-passport-validity
         info:
           # вид сведеиний
           name: Проверка действительности Паспорта Гражданина РФ по серии и номеру
           provider:
             # код провадера сведений
             code: mvd
             # полное название провайдера
             name: Министерство внутренних дел Российской Федерации
             # сокращенное название провайдера
             short-name: МВД
         versions:
           # настройки по номерам версий. Важно! используйте в качестве разделителя символ - (минус)
           1-3-0:
             # ссылка на тех портал
             link: https://lkuv.gosuslugi.ru/paip-portal/#/inquiries/797df91e-0ec0-4fe5-852a-9f2afa6ebdfb/versions/0eb70e26-3688-4667-9520-6d0a0e3d70ca?area=PROD
             # неймспейс - тоже берётся с тех портала
             namespace: urn://mvd/guvm/passport-validity/1.3.0
             request-to-smev:
               # Название корневого тега запроса (по-уолчанию ищется сгененрированный класс с таким названием)
               clazz: PassportValidityRequest
               # Название сгененрированного класса. Требуется проствлять, если оно не совпадает со значением хедера
               jaxb-class-name: GeneratedRequest
               # Название класса, если у вас отличается формат от сгененрированного класса в PassportValidityRequest
               mapped-class-name: MyRequest
             response-from-smev:
               # Название корневого тега ответа
               clazz: PassportValidityResponse
               # Название сгененрированного класса. Требуется проствлять, если оно не совпадает со значением хедера
               jaxb-class-name: GeneratedResponse
               # Название класса, если у вас отличается формат от сгененрированного класса в PassportValidityResponse
               mapped-class-name: MyResponse

7. После того, как мы заполним папку с настройками, запускаем генерацию java-классов по XSD модели (в gradle таск jaxb). У нас добавятся в classpath сгенерированные файлы:
8. Создаём интерфейс ApiController, по которому сгенерируется swagger-файл. В нём указываем 2 класса - класс запроса и класс ответа: В качестве тэга ставим версию с префксом v. В путь ставим тоже версию протокола

Для простых сервисов - это всё. Сервис готов и можно пробовать его запускать локально. При локальном запуске у вас сгенерируются примеры запросов и ответов в папке api

## Подключение S3, Postgres, Arango, Redis

Для подключения дополнительных библиотек создай в mz-xsd-storage в пакете с сервисом файл service.gradle и добавить в нём ключ serviceWithS3 = true (для работы с S3) или serviceWithPostgres=true (для работы с Postgres):

Как работать с S3 можно посмотреть на примере сервиса fns-bfoinn.

В build.gradle можно посмотреть дополнительные ключи для работы с redis, arango, httpclient и другие.

Нравится Станьте первыми кому понравится это

- Нет меток
- Редактировать метки

Написать комментарий...

Добавить комментарий

Обзор
Инструменты контента
{"serverDuration": 87, "requestCorrelationId": "473e47045bce19f1"}
search
recentlyviewed
attachments
weblink
advanced
image-effects
image-attributes

- Абзац

- Жирный
- Курсив
- Подчеркнутый
- Cредство выбора цвета
  Дополнительные цвета
- Форматирование

- Маркированный список
- Нумерованный список

- Список задач

- Убрать отступ
- Сделать отступ

- Выровнить по левому краю
- Выровнить по центру
- Выровнить по правому краю

- Разметка страницы

- Ссылка

- Таблица

- Вставить

- Разметка страницы

- Отменить
- Восстановить

- Найти/Заменить

- Справка по быстрым ссылкам на клавиатуре

Подключение...