Пример 7. Обеспечение уникальности сообщений с помощью операции копирования
В «1С:Шине» возможны сценарии с использованием сервисов интеграции «1С:Предприятия», при которых из одного входящего или вновь созданного сообщения генерируются несколько новых сообщений с одинаковыми идентификаторами. Сервис интеграции проверяет идентификаторы сообщений на уникальность и обрабатывает только первое сообщение, а последующие считает дублями и пропускает.
Для решения этой проблемы необходимо копировать исходное сообщение: получить его копию с теми же свойствами, телом и параметрами, но с новым идентификатором. Копия создается с помощью метода стандартной библиотеки Копировать() типа СообщениеИнтеграции.
-
в узле Транслятор
- после узлов Http и Sql с группой участников;
- после узла МаршрутизаторПоСодержимому с несколькими целевыми узлами;
- в обработчике ОбработкаСообщения узла Sql после получения результата операции от БД.
Примеры обработчиков узла «Транслятор»
-
В этом примере создается копия сообщения с новым идентификатором и специальным параметром, в который сохраняется идентификатор исходного сообщения. Таким образом устанавливается корреляция между отправленным запросом и полученным ответом:
метод КопироватьСообщение(Контекст: КонтекстВызова, Сообщение: ИмяПроцессаИнтеграции.Сообщение): СообщениеИнтеграции знч СообщениеКопия = Сообщение.Копировать() .УстановитьПараметр("ИдКорреляции", Сообщение.Ид) возврат СообщениеКопия ;
-
В этом примере с помощью конструктора типа СообщениеИнтеграции создается новое сообщение, которое содержит копию параметров и тела исходного сообщения. Служебные заголовки и свойство УзлыПути исходного сообщения не переносятся:
метод СоздатьСообщение(Контекст: КонтекстВызова, Сообщение: ИмяПроцессаИнтеграции.Сообщение): СообщениеИнтеграции исп ТелоПоток = Сообщение.ПолучитьТелоКакПоток() знч НовоеСообщение = новый СообщениеИнтеграции(Сообщение.Параметры, ТелоПоток) возврат НовоеСообщение ;
Примеры процессов, в которых нужно выполнять копирование сообщений
- Запрос-ответ из информационной базы 1С в несколько сервисов Http/Sql
- Информационная база 1С через сервис интеграции асинхронно отправляет запрос в канал-источник. Из полученного сообщения формируется запрос в несколько HTTP-сервисов. В Трансляторе исходное сообщение копируется, а ссылка на идентификатор исходного сообщения записывается в параметр нового сообщения. После копирования сообщение передается в канал-назначение.
- Запрос-ответ из информационной базы 1С в Http/Sql через МаршрутизаторПоСодержимому
- Информационная база 1С через сервис интеграции асинхронно отправляет запрос в канал-источник. Сообщение проходит через узел МаршрутизаторПоСодержимому, после которого его копии передаются в узлы Http и Sql. В Трансляторе выполняется копирование сообщения. Все копии имеют уникальный идентификатор и содержат параметр со ссылкой на идентификатор исходного сообщения.
- Опрос нескольких БД по таймеру и передача ответов в ИБ 1С
- По таймеру выполняется запрос в несколько БД. Сообщение с ответом из Sql содержит идентификатор исходного сообщения. В Трансляторе оно копируется, после чего копии передаются в канал-назначение. Все копии имеют уникальный идентификатор и содержат параметр со ссылкой на идентификатор исходного сообщения.