Свойства узла процесса интеграции вида «Разделитель»
Узел этого вида преобразует одно входящее сообщение в несколько исходящих.
Каждое исходящее сообщение считается отдельным сообщением и, в случае ошибки его обработки, будет доставляться повторно согласно политикам, настроенным в проекте. Когда попытки кончатся, сообщение попадет в канал недоставленных сообщений. Остальные сообщения, при обработке которых ошибки не возникло, будут успешно доставлены.
В случае возникновения сбоя при доставке одного или нескольких исходящих сообщений из узла Разделитель в целевую очередь шины (включая маршрут-каналы, явные или неявные очереди), а также при остановке процесса интеграции во время повторных попыток доставки система выполняет следующие действия:
- Исходное сообщение, обрабатываемое узлом Разделитель, не будет считаться успешно обработанным.
- При повторном запуске процесса интеграции исходное сообщение повторно проходит через узел Разделитель, что приводит к генерации новых исходящих сообщений.
- Сообщения, успешно доставленные до остановки процесса, могут быть отправлены повторно, что требует реализации механизмов идемпотентности на стороне получателей.
Чтобы минимизировать риски при повторной доставке, в качестве исходящего из узла маршрута рекомендуется использовать маршрут-канал с внутренней очередью. Но даже в этом случае не гарантируется, что сообщение не будет доставлено повторно.
Свойства узла
Имя
Имя узла, уникальное в рамках процесса интеграции. Используется для обращения к узлу в коде (УзелСхемыИнтеграции.Имя). Должно начинаться с буквы, за которой следуют буквы, цифры или символы '_' (нижнее подчеркивание). Минимальная длина — 2 символа.
Описание
Произвольное описание узла для разработчика. Используется при редактировании схемы процесса интеграции. Недоступно из кода.
ОбновлениеМетрик
Обработчик, внутри которого можно обновлять метрики, добавленные в проект разработчиком. Пример:
// Разработчик добавил в проект метрику «РазмерФайлов». Тогда обновить метрику в узлах можно следующим образом:
метод ОбновлениеМетрик(Контекст: МойПроцессИнтеграции.КонтекстВызова, Сообщение: МойПроцессИнтеграции.Сообщение)
пер РазмерФайлов = МойПроцессИнтеграции.Метрики["РазмерФайлов"]
РазмерФайлов.Обновить(Сообщение.УзлыПути.Текущий.Узел.Имя, 1)
;
Разделение
Обработчик, внутри которого реализуется алгоритм разделения сообщения. Пример:
// Обработчик формирует из каждой строки Сообщения отдельное СообщениеИнтеграции и добавляет его в результирующий массив
метод РазделитьСообщенияИнтеграции(Контекст: КонтекстВызоваИнтеграции, Сообщение: СообщениеИнтеграции): Обходимое<СообщениеИнтеграции>
пер ИсходящиеСообщения = новый Массив<СообщениеИнтеграции>()
пер Тело = Сообщение.ПолучитьТелоКакСтроку()
для Строка из Тело.ПолучитьСтроки()
пер НовоеСообщение = новый СообщениеИнтеграции({"System" : "Офис321"})
НовоеСообщение.УстановитьТелоИзСтроки(Строка)
ИсходящиеСообщения.Добавить(НовоеСообщение)
;
возврат ИсходящиеСообщения
;
Если сообщение не удастся разделить, в обработчике узла произойдет ошибка. Это может произойти в результате ошибки в теле сообщения, или в результате ошибки в самом обработчике. В таком случае входящее сообщение помещается в канал недоставленных сообщений.
Пример использования
Контекст: Приложение получает сообщение о сформированных заказах. Сообщение представляет собой строку, которая содержит информацию о заказах и приоритет доставки в формате "ORD-123:express,ORD-456:standard,ORD-789:express".
Задача: В процессе обмена разделить одно сообщение на несколько. Определить приоритет доставки и записать сообщение в конкретный файл в зависимости от приоритета.
Решение: Используем ПрограммныйИсточник, как узел, при помощи которого сообщение из обработчика HTTP-сервиса программно отправляется в процесс интеграции. Из программного источника сообщение попадает в разделитель, где происход ит его разделение на несколько сообщений по запятой. Далее сообщения из разделителя попадают в контекстный маршрутизатор, в котором записываются в соответствующий файл, в зависимости от приоритета доставки.

метод РазделитьСообщения(Контекст: КонтекстВызоваИнтеграции, Сообщение: ПроцессИнтеграцииДемо.Сообщение): Обходимое<СообщениеИнтеграции>
пер ИсходящиеСообщения = новый Массив<СообщениеИнтеграции>()
пер Тело = Сообщение.ПолучитьТелоКакСтроку()
для НовоеТело из Тело.Разделить(Образец = ',')
пер НовоеСообщение = новый СообщениеИнтеграции({"SplitMessage" : "Yes"})
НовоеСообщение = НовоеСообщение.УстановитьТелоИзСтроки(НовоеТело)
ИсходящиеСообщения.Добавить(НовоеСообщение)
;
возврат ИсходящиеСообщения
;