Маршрутизация сообщений
Узел вида МаршрутизаторПоСодержимому предназначен для того, чтобы определять, в какие узлы из тех, что идут непосредственно за этим узлом, должны попасть сообщения. Для этого у узла есть событие ОбработчикОпределенияПолучателей, в котором вы на встроенном языке можете сформировать набор таких узлов. Если этот обработчик отсутствует, то сообщение будет отправлено во все узлы, которые идут сразу после этого узла.
У обработчика есть два параметра. Первый — это Контекст, он описывает, в каком узле происходит вызов. Второй — это Сообщение, которое нужно маршрутизировать. Его нельзя изменить, также как нельзя модифицировать параметры его заголовка.
Если этот обработчик вернет пустую коллекцию узлов, то сообщение никуда не будет доставлено.
Если в возвращаемом массиве будет хотя бы один неправильный получатель, сообщение продублируется в канал недоставленных сообщений, но будет отправлено всем правильным получателям.
Если при выполнении обработчика возникает неперехваченная ошибка, сообщение отправляется в канал недоставленных сообщений.
Отправка всем
Есть следующий процесс интеграции: сообщение генерируется таймером и попадает в узел ОтправкаВсем. Это маршрутизатор по содержимому, из которого сообщение попадает в узлы HTTP и RabbitMQНазначение. ОбработчикОпределенияПолучателей узла ОтправкаВсем оставим пустым.
Так как в узле ОтправкаВсем обработчик события ОбработчикОпределенияПолучателей отсутствует, сообщение будет параллельно и независимо отправлено в узлы HTTP и RabbitMQНазначение.
Такой способ маршрутизации нужен тогда, когда одно и то же сообщение надо отправить сразу по нескольким независимым веткам, чтобы в каждой из них оно обрабатывалось независимо.
В данном случае мы независимо обращаемся к двум разным информационным системам (передаем им сообщение), пытаемся получить от них ответ и обработать его (эта часть схемы здесь не показана).
Выбор получателя
Есть следующий процесс интеграции: Вход — это программный источник, при помощи которого можно отправить сообщение в этот процесс интеграции программно. Например, из обработчика HTTP-сервиса.
Из программного источника сообщение попадает в маршрутизатор по содержимому ОпределениеВерсии. В зависимости от того, какое значение имеет параметр сообщения Формат, маршрутизатор направляет его либо на трансформацию, либо сразу в канал V2.
Обработчик события ОбработчикОпределенияПолучателей выглядит следующим образом:
метод ТрансформироватьИлиНет(Контекст: КонтекстВызоваИнтеграции,
Сообщение: МаршрутизаторПример2.Сообщение): Коллекция<УзелСхемыИнтеграции>
пер СледующийУзел = Сообщение.ПолучитьПараметр("Формат") == 1
? Схема.Узлы.Трансформация
: Схема.Узлы.V2
возврат [СледующийУзел]
;