Введение
Для отправки и приема сообщений в СМЭВ посредствам интеграционного узла адаптера (ИУА) можно использовать несколько интерфейсов, в том числе AMQP (Advanced Message Queuing Protocol). AMQP-интерфейс ИУА реализован для обеспечения информационного взаимодействия информационной системы участника взаимодействия (ИС УВ) с ИУА через брокер сообщений RabbitMQ. В текущей статье будут рассмотрены примеры обменов по AMQP и способы работы в приложении RabbitMQ.
Установка и подготовка RabbitMQ
RabbitMQ – это брокер сообщений, который позволяет взаимодействовать различным программам при помощи протокола AMQP. RabbitMQ запускается в виртуальной среде Erlang, который необходим для запуска брокера.
В первую очередь необходимо скачать и запустить дистрибутив Erlang для Windows или воспользоваться предустановленными пакетами Erlang для других ОС. После чего скачать и запустить дистрибутив RabbitMQ, соглашаясь со всеми этапами установки.
Установленный брокер имеет удобный интерфейс RabbitMQ Management, который позволяет контролировать сервер RabbitMQ через веб-браузер. В нем можно работать с очередями, соединениями, каналами, пользователями и их разрешениями. Чтобы использовать веб-сервис брокера необходимо сконфигурировать набор плагинов. Для этого откройте командную строку под ролью администратора. В командной строке перейдите в директорию RabbitMQ (общий путь: С:Program FilesRabbitMQ Server abbitmq_server-{version}sbin, в котором version – версия установленного брокера) и выполните следующую команду:
rabbitmq-plugins.bat enable rabbitmq_management
В результате выполнения команды должен выполниться запуск необходимых плагинов (Рисунок 1) для работы с RabbitMQ Management.
Рисунок 1 – Запуск плагинов для работы с RabbitMQ Management.
Дополнительно требуется перезапустить сервис, выполнив поочередно две команды его остановки и запуска, после выполнения которых в консоли будет написано уведомление об успешности перезапуска брокера.
rabbitmq-service.bat stop rabbitmq-service.bat start
Чтобы удостовериться в правильности выполнения всех шагов установки и запуска RabbitMQ, необходимо в веб-браузере перейти по адресу localhost:15672, после чего откроется веб-интерфейс RabbitMQ Management (Рисунок 2). На это установка полностью завершена и сервис RabbitMQ готов к работе
Рисунок 2 – Веб-интерфейс RabbitMQ Management.
Настройка ИС в ИУА
Перед тем как перейти к использованию RabbitMQ Management необходимо настроить ИС в ИУВ. В Адаптере нужно выбрать необходимую ИС и в разделе «1. Общее» в качестве «1.2 Способа использования адаптера» выбрать из списка AMQP (Рисунок 3).
Рисунок 3 – Изменение способа использования Адаптера для ИС.
Следом перейти в раздел «6. Модуль интеграции через AMQP» и заполнить адрес подключения к RabbitMQ. Для адреса брокера используется следующий формат заполнения:
<метод>://<логин>:<пароль>@<адрес>:<порт>
Например, при условии наличия пользователя в RabbitMQ с логином user и паролем 123456 адрес брокера будет выглядеть как: amqp://user:123456@localhost:5672 (Рисунок 4). После заполнения полей сохранить внесенные изменения, на чем работа с Адаптером будет завершена.
Рисунок 4 – Изменение адреса брокера для ИС.
Отправка запросов через RabbitMQ Management
При первичной авторизации в панель управления RabbitMQ Management необходимо использовать учетную запись по умолчанию с правами администратора, у которой логин и пароль – guest. Если есть необходимость создать дополнительных пользователей, можно это сделать сразу после авторизации в разделе Admin → Add a user (Рисунок 5). Созданному пользователю стоит добавить доступ к виртуальному адресу, выбрав пользователя в списке (All Users) и добавить доступы к использованию адресов сервиса (Permissions → Set permission).
Рисунок 5 – Создание нового пользователя.
Так как основной целью RabbitMQ является принимать и отдавать сообщения, то для этого брокера сообщений необходимо настроить очереди. Под очередью понимается некая структура данных, которая хранит ссылки на сообщения поставщиков и отправляет их копии потребителям. Поэтому для узла ИС (если у ИС нет узлов – для ИС), который будет работать через AMQP, нужно будет завести две очереди:
- очередь на отправку запросов и ответов, у которой наименование должно быть формата – «*наименование ИС*_*наименование узла ИС*_QUEUE_SEND» (если очередь заводится для ИС без узлов, то «*наименование ИС*_ QUEUE_SEND»);
- очередь доставки запросов и ответов, у которых наименование должно быть формата – «*наименование ИС*_*наименование узла ИС*_QUEUE_RECEIVE» (если очередь заводится для ИС без узлов, то «*наименование ИС*_ QUEUE_RECEIVE»).
Добавить новую очередь можно в разделе Queues → Add a new queue → Add queue (Рисунок 6).
Рисунок 6 – Создание новой очереди.
По итогу должно быть две очереди для отправки и для приема сообщений, которые можно будет увидеть в списке всех очередей в этом же разделе (All queues) (Рисунок 7).
Рисунок 7 – Список всех очередей.
На этом подготовка RabbitMQ завершена и можно перейти к этапу инициализации запроса. Для отправки сообщения нужно выбрать очередь для отправки (MNEMONIC_QUEUE_SEND) и перейти в раздел Publish Message, предварительно сформировав XSD-запрос (Рисунок 8).
Рисунок 8 – Формирование запроса.
Примером XSD-запроса может служить следующий конверт, который формируется по правилам отправки сообщений через веб-сервис:
<?xml version="1.0" encoding="UTF-8"?> <typ:ClientMessage xmlns:typ="urn://x-artefacts-smev-gov-ru/services/service-adapter/types"> <typ:itSystem>MNEMONIC</typ:itSystem> <typ:RequestMessage> <typ:RequestMetadata> <typ:clientId>00000000-0000-0000-0000-000000000000</typ:clientId> <typ:testMessage>true</typ:testMessage> </typ:RequestMetadata> <typ:RequestContent> <typ:content> <typ:MessagePrimaryContent> <tns:mainRequest xmlns:tns="urn://schema/main/1.0.0"> <tns:UserInfo> <tns:Firstname>Иван</tns:Firstname> <tns:Lastname>Иванов</tns:Lastname> <tns:Patronym>Иванович</tns:Patronym> </tns:UserInfo> </tns:mainRequest> </typ:MessagePrimaryContent> </typ:content> </typ:RequestContent> </typ:RequestMessage> </typ:ClientMessage>
По результатам отправки сообщения, после нажатия кнопки Publish message, появится окно успешной постановки сообщения в очередь (Рисунок 9).
Рисунок 9 – Успешная отправка сообщения в очередь.
Через некоторое время сообщение отправиться через ИУА в СМЭВ, там будет оно обработано и в случае отсутствия ошибок отправлено ответчику. Для проверки наличия сообщений в собственной очереди необходимо проверить количество сообщений в очереди доставки сообщений, опираясь на колонки Ready и Total (Рисунок 7). Получить доставленное сообщение можно в разделе Get messages внутри очереди доставки (Рисунок 10). Чтобы автоматически подтвердить получение сообщения, из выпадающего списка Ack Mode нужно выбрать Automatic ack.
Рисунок 10 – Получение сообщения из очереди.
В случае ошибки отправки сообщения в очередь доставки также попадет отчет об ошибке, который можно будет прочитать аналогичным образом.