Войти

Очереди в СМЭВ 3

Очереди в СМЭВ 3 – это хранилища сообщений, закрепленные за участником, куда сообщения попадают после обработки в СМЭВ.

Основное предназначение очередей – буферизация сообщений на время проведения предусмотренных СМЭВ проверок, а также вынужденных кратковременных прерываний в работе ИС УВ, связанных с техническими работами.

Очереди бывают:

  1. входящие запросов и ответов,
  2. специальные очереди,
  3. очереди узла.

Важно учитывать, что очереди бывают только входящими, т.е. исходящие сообщения отправляются сразу в СМЭВ, но после обработки попадают в очередь, закрепленной за получателем (ИС).

При этом размер очереди ограничен, т.е. в ней можно разместить ограниченное количество сообщений. Стандартная квота для очереди – 1000 сообщений, но лимит может быть изменен.

В случае если в составе сообщения передается вложение, загруженное на файловое хранилище, время возвращения сообщения в очередь входящих сообщений зависит от размера файла в соответствии с таблицей коэффициентов:

Диапазон размера вложений

Коэффициент увеличения базового времени передоставки

Менее 1 Мб

1

1 Мб…10 Мб

2

10 Мб…100 Мб

3

100 Мб…500 Мб

4

500 Мб…1 Гб

5

Более 1 Гб

10

1 коэффициент равен 15ти минутам (Пример: если направить сообщение с вложением весом 9 Мб, срок передоставки сообщения составит 30 минут).

Примечание: срок хранения сообщений в очереди запросов ИС и в очереди ответов ИС составляет 15 календарных дней.

Если сообщение не будет получено ИС получателя в течение указанного срока, то СМЭВ переведёт данное сообщение в архив с формированием статусного сообщения категории «messageIsArchived» (сообщение, получение которого не подтверждено получателем, переведено в архив). Указанное статусное сообщение помещается в очередь ответов ИС отправителя. Участникам, не получившим ответ на запрос в течение указанного срока, необходимо направить запрос повторно.

Очереди входящих запросов и ответов

В обычном режиме у каждой ИС УВ есть две очереди сообщений в СМЭВ. В одну направляются входящие запросы от других ИС УВ, во вторую – ответы на запросы, а также статусные сообщения, сформированные СМЭВ (Рисунок 1).

Рисунок 1 - Организация очередей в СМЭВ.png

Рисунок 1 - Организация очередей в СМЭВ.

Для извлечения из очереди запроса участник отправляет сообщение типа GetRequestRequest. В ответ СМЭВ присылает сообщение типа GetRequestResponse с запросом в конверте или пустое, если запросов нет в очереди.

Для извлечения ответа участником отправляется сообщение GetResponseRequest. В ответ возвращается сообщение GetResponseResponse с ответом или пустое, если ответа нет в очереди.

Получив запрос или ответ ИС УВ направляет в СМЭВ подтверждение успешной обработки сообщения (Ack), после чего СМЭВ удаляет его из соответствующей очереди.

На каждый отправленный GetRequestRequest и GetResponseRequest возвращается один GetRequestResponse и GetResponseResponse соответственно.

В общие очереди запросов и ответов попадают сообщения по всем видам сведений, кроме тех, для которых созданы специальные очереди.

Примечание: особенностью организации очередей является необходимость подтверждения ИС УВ получения сообщения из СМЭВ. Если в течение 15 минут этого не происходит, то сообщение считается недоставленным и возвращается в очередь входящих сообщений.

Специальные очереди

Специальные очереди – очереди, созданные для одной или нескольких версий видов сведений (мультиочереди). Применяются в том случае, когда требуется более оперативная вычитка сообщений по отдельным ВС из общего потока сообщений, приходящих системе участика.
Так, запросы GetResponeRequest и GetRequestRequest позволяют извлекать сообщения, связанные с определенными видами сведений.
Для этого необходимо передать в запросах содержимое элементов NamespaceURI (пространство имен вида сведений) и RootElementLocalName (наименование корневого элемента запроса или ответа) (Рисунок 2).

Рисунок 2 Пример xsd-схемы запроса.png

Рисунок 2 – Пример xsd-схемы запроса.

При этом на стороне СМЭВ происходит поиск подходящих записей в очереди по вхождению указанных параметров в текст XML-сообщения, поэтому такие запросы обладают невысокой производительностью.

В некоторых случаях такая низкая скорость получения сообщений из очереди недопустима. Например, в случаях, когда ответ должен отобразиться в пользовательском интерфейсе за одну-две секунды. Для решения этой проблемы в СМЭВ был создан механизм специальных очередей сообщений. Специальные очереди содержат индексированные теги для ускорения отбора записей.

Запрос с параметрами NamespaceURI и RootElementLocalName к специальной очереди сообщений СМЭВ выполняется существенно быстрее.

Добавить специальную очередь по одному или нескольким версиям протокола обмена можно в ЛК УВ. Если для взаимодействия со СМЭВ используется Адаптер, тогда в нем также потребуется настроить специальную очередь.

Очереди узла ИС (NodeID)

Для ИС УВ использующих многосерверную (многоузловую) архитектуру для отправки сообщений-запросов в СМЭВ и использующих один и тот же сертификат ЭП-ОВ, предоставляется возможность получения сообщения по NodeID (узлу ИС). Функциональность доступна при обращении к СМЭВ по схеме 1.3. В ЛК УВ реализована возможность добавления очереди узла.

Для получения сообщения из очереди узла ИС необходимо зарегистрировать узел ИС (NodeID) в СМЭВ, направив запрос в Ситуационный центр.

В схеме запросов СМЭВ введен специальный элемент, в котором возможно указать имя узла ИС в параметре «NodeID» (//SendRequestRequest/SenderProvidedRequestData/NodeID). При получении сообщения-запроса с указанием NodeID СМЭВ 3.х маршрутизирует ответы на данный запрос в отдельную очередь доставки ответов.  Пример использования SendRequestRequest с указанным узлом информационной системы:

<ns:SendRequestRequest>

   <ns:SenderProvidedRequestData>

    <ns:MessageID>70f1e85e-d9d0-11ed-b50c-b331a224d8a9</ns:MessageID>

    <ns:ReferenceMessageID>d0acbf6c-d9d0-11ed-b50c-b331a224d8a9</ns:ReferenceMessageID>

    <ns:TransactionCode> 9f421406-b1dd-11ed-888d-6a36d51bd23b</ns:TransactionCode>

    <ns:NodeID>Test</ns:NodeID>

       <basic:MessagePrimaryContent>

          <ns1:DataRequest>

              <ns1:Request>Request</ns1:Request>

                   </ns1:DataRequest>

              </basic:MessagePrimaryContent>

    </ns:SenderProvidedRequestData>

    <ns:CallerInformationSystemSignature>

      <signature/>

    </ns:CallerInformationSystemSignature>

    </ns:SendRequestRequest>

где <ns:NodeID>Test</ns:NodeID> - узел информационной системы, в который будет направлен ответ на данный запрос.

Для получения ответа из очереди узла ИС необходимо использовать фильтрацию по NodeID. Чтобы использовать сценарий получения ответа из очереди узла ИС, необходимо при вызове метода GetResponse заполнить параметр MessageTypeSelector/NodeID. Пример:

<ns2:MessageTypeSelector xmlns:ns2="urn://x-artefacts-smev-gov-ru/services/message-exchange/types/basic/1.3" xmlns="urn://x-artefacts-smev-gov-ru/services/message-exchange/types/1.3" Id="SIGNED_BY_CALLER">

      <ns2:Timestamp>2021-05-25T18:46:49.000+03:00</ns2:Timestamp>

      <ns2:NodeID> Test </ns2:NodeID>

</ns2:MessageTypeSelector>


Выборка сообщений из очереди

При опросе очереди без фильтрации по виду сведений получатель выберет первое сообщение, имеющееся в очереди входящих сообщений, независимо от того, к какому ВС оно относится.

При приёме сообщения с фильтрацией по ВС СМЭВ будет искать сообщения в очереди входящих сообщений, относящиеся к указанному ВС, и вернёт первое из них. Если сообщений запрошенного ВС в очереди входящих сообщений нет, СМЭВ не вернёт ничего, даже если в очереди входящих сообщений есть сообщения других протоколов обмена. При получении сообщения с составным критерием фильтрации (в сообщении указывается ВС и тип сообщения – статусное или ответ по данному ВС) СМЭВ осуществляет поиск сообщений, относящихся к выбранному ВС и имеющих выбранный тип.

Чтобы использовать сценарий фильтрации по версии ВС, необходимо при вызове метода GetRequest/GetResponse заполнить параметры MessageTypeSelector/NamespaceURI и MessageTypeSelector/RootElementLocalName. Для корректного получения сообщения с фильтрацией необходимо заполнять оба параметра, не допускается наличие одного из заполненных элементов. В качестве аргумента MessageTypeSelector/NamespaceURI передаётся target namespace схемы, в которой описан элемент, а в качестве аргумента MessageTypeSelector/RootElementLocalName – имя (local name) элемента. В случае, если УВ использует несколько версий ВС, то фильтрация осуществляется по всем доступным версиям ВС, вне зависимости от указания NamespaceURI.

Пример конверта GetRequestRequest:

<?xml version="1.0"?>

<soapenv:Envelope xmlns:ns="urn://x-artefacts-smev-gov-ru/services/message-exchange/types/1.1" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">

<soapenv:Body>

<ns:GetRequestRequest>

<ns2:MessageTypeSelector Id="SIGNED_BY_CALLER" xmlns:ns2="urn://x-artefacts-smev-gov-ru/services/message-exchange/types/basic/1.1">

<ns2:NamespaceURI>urn://qa/8.0.0</ns2:NamespaceURI>

<ns2:RootElementLocalName>DataRequest</ns2:RootElementLocalName>

<ns2:Timestamp>2023-03-16T15:19:01.216+03:00</ns2:Timestamp>

</ns2:MessageTypeSelector>

<ns:CallerInformationSystemSignature> ... </ns:CallerInformationSystemSignature>

</ns:GetRequestRequest>

</soapenv:Body>

</soapenv:Envelope>

Если описание формата ВС имеет несколько версий, то можно указать qualified name элемента-запроса из любой версии описания. При этом будут выбираться все сообщения, соответствующие данному протоколу обмена, независимо от того, какой версии формата они соответствуют.

В методе GetResponse для задания протокола обмена можно использовать как qualified name элемента – запроса, так и qualified name элемента – ответа. Это же относится и к методу GetRequest.

Получение сообщений с фильтрацией по виду сведений возможно при размере очереди ИС, не превышающей рекомендованной в 1000 сообщений квоты.

В целях снижения вычислительной нагрузки, обусловленной криптооперациями по расчету и шифрованию хэша электронной подписи, допускается использование сообщений GetRequestRequest (или GetResponseRequest), значение элемента метки времени (MessageTypeSelector /Timestamp) в которых отстает от момента отправки этого сообщения в СМЭВ на значение не превышающее установленный норматив -  30 минут.

После истечения срока действия временной метки, сообщение необходимо сформировать повторно.

Помимо вычитки запросов и ответов из очереди вычитываются и статусные сообщения. Данные сообщения размещаются в очереди ответов ИС, либо в специальной выделенной очереди ответов (мультиочереди), если такая очередь имеется для соответствующей версии ВС. Основным механизмом доставки статусных сообщений об ошибках асинхронной обработки становятся системные ответы СМЭВ, получаемые методом GetResponse.

Примечание: во избежание переполнения очереди ответов, статусные сообщения также необходимо вычитывать.

Блокировка очередей при превышении лимита очереди ИС УВ

В случае, если превышен лимит на максимально допустимое количество сообщений в очереди входящих запросов, на стороне СМЭВ будет выполнена блокировка данной очереди входящих запросов ИС (Более подробно о лимитах описано в статье про Лимиты в СМЭВ 3).

Внимание! Метод получения статистики входящих очередей //GetIncomingQueueStatistics исключен из состава методов единого электронного сервиса СМЭВ версии 1.2 и отсутствует в 1.3. Данный метод заменён push-нотификациями.

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