Войти

AMQP интерфейс Адаптера

Введение

Для отправки и приема сообщений в СМЭВ посредствам интеграционного узла адаптера (ИУА) можно использовать несколько интерфейсов, в том числе 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 – Получение сообщения из очереди.

В случае ошибки отправки сообщения в очередь доставки также попадет отчет об ошибке, который можно будет прочитать аналогичным образом.


Авторизуйтесь, чтобы оставить комментарий к статье