Учебники

MuleSoft – управление потоком и трансформаторы

Основная задача компонента Flow Control – взять входное событие Mule и направить его на одну или несколько отдельных последовательностей компонентов. Это в основном маршрутизация входного события Mule к другой последовательности (последовательностям) компонентов. Поэтому он также называется Маршрутизаторы. Маршрутизаторы Choice и Scatter-Gather являются наиболее часто используемыми в компоненте Flow Control.

Выбор маршрутизатора

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

Принципиальная схема Choice Router

Эффект от использования маршрутизатора Choice аналогичен добавлению условной обработки к потоку или коду if / then / else в большинстве языков программирования. Ниже приведена принципиальная схема маршрутизатора выбора, имеющего три варианта. Среди них один является маршрутизатором по умолчанию.

Выбор маршрутизатора

Маршрутизатор Scatter-Gather

Другим наиболее используемым процессором событий маршрутизации является компонент Scatter-Gather . Как следует из его названия, он работает на основах Scatter (копия) и Gather (Объединяет). Мы можем понять его работу с помощью следующих двух пунктов –

  • Во-первых, этот маршрутизатор копирует (Scatter) событие Mule на два или более параллельных маршрута. Условие состоит в том, что каждый маршрут должен быть последовательностью одного или нескольких обработчиков событий, которые подобны подпотоку. Каждый маршрут в этом случае будет создавать событие Mule, используя отдельный поток. Каждое событие Mule будет иметь свою полезную нагрузку, атрибуты и переменные.

  • Затем этот маршрутизатор собирает созданные события Mule с каждого маршрута и затем объединяет их в новое событие Mule. После этого он передает это объединенное событие Mule в обработчик следующего события. Здесь условие состоит в том, что маршрутизатор SG будет передавать консолидированное событие Mule обработчику следующего события только после успешного завершения каждого маршрута.

Во-первых, этот маршрутизатор копирует (Scatter) событие Mule на два или более параллельных маршрута. Условие состоит в том, что каждый маршрут должен быть последовательностью одного или нескольких обработчиков событий, которые подобны подпотоку. Каждый маршрут в этом случае будет создавать событие Mule, используя отдельный поток. Каждое событие Mule будет иметь свою полезную нагрузку, атрибуты и переменные.

Затем этот маршрутизатор собирает созданные события Mule с каждого маршрута и затем объединяет их в новое событие Mule. После этого он передает это объединенное событие Mule в обработчик следующего события. Здесь условие состоит в том, что маршрутизатор SG будет передавать консолидированное событие Mule обработчику следующего события только после успешного завершения каждого маршрута.

Принципиальная схема Scatter-Gather Router

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

Scatter Gather Router

Обработка ошибок маршрутизатором Scatter-Gather

Во-первых, мы должны знать, какая ошибка может быть сгенерирована в компоненте Scatter-Gather. Любая ошибка может быть сгенерирована в обработчиках событий, приводящих к тому, что компонент Scatter-Gather выдает ошибку типа Mule: COMPOSITE_ERROR . Эта ошибка будет выдана компонентом SG только после того, как каждый маршрут потерпит неудачу или завершится.

Чтобы обработать этот тип ошибки, область действия может использоваться в каждом маршруте компонента Scatter-Gather. Если ошибка успешно обработана с помощью try scope , то маршрут наверняка сможет сгенерировать событие Mule.

трансформеры

Предположим, если мы хотим установить или удалить часть какого-либо события Mule, компонент Transformer является лучшим выбором. Компоненты трансформатора бывают следующих типов –

Удалить переменный трансформатор

Как следует из названия, этот компонент принимает имя переменной и удаляет эту переменную из события Mule.

Настройка снятия переменного трансформатора

В таблице ниже приведены названия полей и их описание, которые следует учитывать при настройке удаления преобразователя переменных –

поле объяснение
Отображаемое имя (документ: имя) Мы можем настроить это для отображения уникального имени этого компонента в нашем рабочем процессе Mule.
Имя (variableName) Представляет имя переменной для удаления.

Установить трансформатор полезной нагрузки

С помощью компонента set-payload мы можем обновить полезную нагрузку сообщения, которая может быть литеральной строкой или выражением DataWeave. Не рекомендуется использовать этот компонент для сложных выражений или преобразований. Это может быть использовано для простых, как выбор .

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

поле использование объяснение
Значение (значение) Обязательный Значение поля требуется для установки полезной нагрузки. Он примет буквенную строку или выражение DataWeave, определяющее, как установить полезную нагрузку. Примеры похожи на «некоторую строку»
Mime Type (mimeType) Необязательный Это необязательно, но представляет MIME-тип значения, назначенного для полезной нагрузки сообщения. Примеры как текст / обычный.
Кодировка (кодировка) Необязательный Это также необязательно, но представляет собой кодировку значения, назначенного для полезной нагрузки сообщения. Примеры похожи на UTF-8.

Мы можем установить полезную нагрузку через код конфигурации XML –

Со статическим контентом – следующий код конфигурации XML установит полезную нагрузку с помощью статического контента –

<set-payload value = "{
   'name' : 'Gaurav', 'Id' : '2510' 
}" mimeType = "application/json" encoding = "UTF-8"/>

С содержимым выражения – следующий код конфигурации XML установит полезную нагрузку с использованием содержимого выражения –

<set-payload value = "#['Hi' ++ ' Today is ' ++ now()]"/>

Приведенный выше пример добавит сегодняшнюю дату к сообщению «Hi».

Установить переменный трансформатор

С помощью компонента set variable мы можем создать или обновить переменную для хранения значений, которые могут быть простыми литеральными значениями, такими как строки, полезные данные сообщений или объекты атрибутов, для использования в потоке приложения Mule. Не рекомендуется использовать этот компонент для сложных выражений или преобразований. Это может быть использовано для простых, как выбор .

Настройка заданного переменного трансформатора

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

поле использование объяснение
Имя переменной (variableName) Обязательный Это обязательное поле, и оно представляет имя переменной. При указании имени следуйте соглашению об именах, так как оно должно содержать цифры, символы и подчеркивания.
Значение (значение) Обязательный Значение поля требуется для установки переменной. Он будет принимать литеральную строку или выражение DataWeave.
Mime Type (mimeType) Необязательный Это необязательно, но представляет тип MIME переменной. Примеры как текст / обычный.
Кодировка (кодировка) Необязательный Это также необязательно, но представляет кодировку переменной. Примеры подобны ISO 10646 / Unicode (UTF-8).

пример

Пример ниже установит переменную в полезную нагрузку сообщения –

Variable Name = msg_var
Value = payload in Design center and #[payload] in Anypoint Studio

Точно так же, пример ниже установит переменную в полезную нагрузку сообщения –