Перейти к основному содержимому

Свойства узла процесса интеграции вида «Разделитель»

Узел этого вида преобразует одно входящее сообщение в несколько исходящих.

Разделитель

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

примечание

В случае возникновения сбоя при доставке одного или нескольких исходящих сообщений из узла Разделитель в целевую очередь шины (включая маршрут-каналы, явные или неявные очереди), а также при остановке процесса интеграции во время повторных попыток доставки система выполняет следующие действия:

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

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

Свойства узла

Имя

Имя узла, уникальное в рамках процесса интеграции. Используется для обращения к узлу в коде (УзелСхемыИнтеграции.Имя). Должно начинаться с буквы, за которой следуют буквы, цифры или символы '_' (нижнее подчеркивание). Минимальная длина — 2 символа.

Описание

Произвольное описание узла для разработчика. Используется при редактировании схемы процесса интеграции. Недоступно из кода.

ОбновлениеМетрик

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

// Разработчик добавил в проект метрику «РазмерФайлов». Тогда обновить метрику в узлах можно следующим образом:
метод ОбновлениеМетрик(Контекст: МойПроцессИнтеграции.КонтекстВызова, Сообщение: МойПроцессИнтеграции.Сообщение)
пер РазмерФайлов = МойПроцессИнтеграции.Метрики["РазмерФайлов"]
РазмерФайлов.Обновить(Сообщение.УзлыПути.Текущий.Узел.Имя, 1)
;

Разделение

Обработчик, внутри которого реализуется алгоритм разделения сообщения. Пример:

// Обработчик формирует из каждой строки Сообщения отдельное СообщениеИнтеграции и добавляет его в результирующий массив
метод РазделитьСообщенияИнтеграции(Контекст: КонтекстВызоваИнтеграции, Сообщение: СообщениеИнтеграции): Обходимое<СообщениеИнтеграции>
пер ИсходящиеСообщения = новый Массив<СообщениеИнтеграции>()
пер Тело = Сообщение.ПолучитьТелоКакСтроку()

для Строка из Тело.ПолучитьСтроки()
пер НовоеСообщение = новый СообщениеИнтеграции({"System" : "Офис321"})
НовоеСообщение.УстановитьТелоИзСтроки(Строка)
ИсходящиеСообщения.Добавить(НовоеСообщение)
;

возврат ИсходящиеСообщения
;

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

Пример использования

Контекст: Приложение получает сообщение о сформированных заказах. Сообщение представляет собой строку, которая содержит информацию о заказах и приоритет доставки в формате "ORD-123:express,ORD-456:standard,ORD-789:express".

Задача: В процессе обмена разделить одно сообщение на несколько. Определить приоритет доставки и записать сообщение в конкретный файл в зависимости от приоритета.

Решение: Используем ПрограммныйИсточник, как узел, при помощи которого сообщение из обработчика HTTP-сервиса программно отправляется в процесс интеграции. Из программного источника сообщение попадает в разделитель, где происходит его разделение на несколько сообщений по запятой. Далее сообщения из разделителя попадают в контекстный маршрутизатор, в котором записываются в соответствующий файл, в зависимости от приоритета доставки.

Пример использования узла вида «Разделитель»

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

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

возврат ИсходящиеСообщения
;