Пример 7. Обеспечение уникальности сообщений с помощью операции копирования

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

Для решения этой проблемы необходимо копировать исходное сообщение: получить его копию с теми же свойствами, телом и параметрами, но с новым идентификатором. Копия создается с помощью метода стандартной библиотеки Копировать() типа СообщениеИнтеграции.

Вы можете создать копию сообщения:

Примеры обработчиков узла «Транслятор»

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

    метод КопироватьСообщение(Контекст: КонтекстВызова, Сообщение: ИмяПроцессаИнтеграции.Сообщение): СообщениеИнтеграции
        знч СообщениеКопия = Сообщение.Копировать()
            .УстановитьПараметр("ИдКорреляции", Сообщение.Ид)
    
        возврат  СообщениеКопия
    ;
  2. В этом примере с помощью конструктора типа СообщениеИнтеграции создается новое сообщение, которое содержит копию параметров и тела исходного сообщения. Служебные заголовки и свойство УзлыПути исходного сообщения не переносятся:
    метод СоздатьСообщение(Контекст: КонтекстВызова, Сообщение: ИмяПроцессаИнтеграции.Сообщение): СообщениеИнтеграции
        исп ТелоПоток = Сообщение.ПолучитьТелоКакПоток()
        знч НовоеСообщение = новый СообщениеИнтеграции(Сообщение.Параметры, ТелоПоток)
    
        возврат НовоеСообщение
    ;

Примеры процессов, в которых нужно выполнять копирование сообщений

Запрос-ответ из информационной базы 1С в несколько сервисов Http/Sql
Информационная база 1С через сервис интеграции асинхронно отправляет запрос в канал-источник. Из полученного сообщения формируется запрос в несколько HTTP-сервисов. В Трансляторе исходное сообщение копируется, а ссылка на идентификатор исходного сообщения записывается в параметр нового сообщения. После копирования сообщение передается в канал-назначение.

Запрос-ответ из информационной базы 1С в Http/Sql через МаршрутизаторПоСодержимому
Информационная база 1С через сервис интеграции асинхронно отправляет запрос в канал-источник. Сообщение проходит через узел МаршрутизаторПоСодержимому, после которого его копии передаются в узлы Http и Sql. В Трансляторе выполняется копирование сообщения. Все копии имеют уникальный идентификатор и содержат параметр со ссылкой на идентификатор исходного сообщения.

Опрос нескольких БД по таймеру и передача ответов в ИБ 1С
По таймеру выполняется запрос в несколько БД. Сообщение с ответом из Sql содержит идентификатор исходного сообщения. В Трансляторе оно копируется, после чего копии передаются в канал-назначение. Все копии имеют уникальный идентификатор и содержат параметр со ссылкой на идентификатор исходного сообщения.