MuleSoft - Обработка ошибок Mule

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

Компоненты ошибки мула

Ошибка мула является результатом сбоя исключения мула и имеет следующие компоненты:

Описание

Это важный компонент ошибки Mule, который дает описание проблемы. Его выражение выглядит следующим образом -

#[error.description]

Тип

Компонент Type ошибки Mule используется для характеристики проблемы. Он также позволяет выполнять маршрутизацию в обработчике ошибок. Его выражение выглядит следующим образом -

#[error.errorType]

Причина

Компонент Cause ошибки Mule дает базовый объект java, который вызывает сбой. Его выражение выглядит следующим образом -

#[error.cause]

Сообщение

Компонент сообщения ошибки Mule показывает необязательное сообщение об ошибке. Его выражение выглядит следующим образом -

#[error.errorMessage]

Дочерние ошибки

Компонент « Дочерние ошибки» ошибки Mule предоставляет необязательный набор внутренних ошибок. Эти внутренние ошибки в основном используются такими элементами, как Scatter-Gather, для предоставления агрегированных ошибок маршрута. Его выражение выглядит следующим образом -

#[error.childErrors]

пример

В случае сбоя HTTP-запроса с кодом состояния 401 ошибки Mule выглядят следующим образом:

Description: HTTP GET on resource ‘http://localhost:8181/TestApp’ 
failed: unauthorized (401)
Type: HTTP:UNAUTHORIZED
Cause: a ResponseValidatorTypedException instance
Error Message: { "message" : "Could not authorize the user." }
Старший НЕТ Тип и описание ошибки
1

TRANSFORMATION

Этот тип ошибки указывает на ошибку, возникшую при преобразовании значения. Преобразование - это внутреннее преобразование среды выполнения Mule, а не преобразования DataWeave.

2

EXPRESSION

Этот тип ошибки указывает на ошибку, возникшую при оценке выражения.

3

VALIDATION

Этот тип ошибки указывает на то, что произошла ошибка проверки.

4

DUPLICATE_MESSAGE

Своеобразная ошибка проверки, которая возникает, когда сообщение обрабатывается дважды.

5

REDELIVERY_EXHAUSTED

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

6

CONNECTIVITY

Этот тип ошибки указывает на проблему при установлении соединения.

7

ROUTING

Этот тип ошибки указывает на ошибку при маршрутизации сообщения.

8

SECURITY

Этот тип ошибки указывает на то, что произошла ошибка безопасности. Например, получены неверные учетные данные.

9

STREAM_MAXIMUM_SIZE_EXCEEDED

Этот тип ошибки возникает, когда исчерпан максимально допустимый размер потока.

10

TIMEOUT

Он указывает тайм-аут при обработке сообщения.

11

UNKNOWN

Этот тип ошибки указывает на возникновение непредвиденной ошибки.

12

SOURCE

Он представляет собой возникновение ошибки в источнике потока.

13

SOURCE_RESPONSE

Он представляет собой возникновение ошибки в источнике потока при обработке успешного ответа.

В приведенном выше примере вы можете увидеть компонент сообщения об ошибке mule.

Типы ошибок

Давайте разберемся с типами ошибок с помощью их характеристик -

  • Первая характеристика типов ошибок Mule заключается в том, что они состоят из обоих, a namespace and an identifier. Это позволяет нам различать типы в зависимости от их домена. В приведенном выше примере тип ошибки -HTTP: UNAUTHORIZED.

  • Вторая и важная характеристика - это то, что тип ошибки может иметь родительский тип. Например, Тип ошибкиHTTP: UNAUTHORIZED имеет MULE:CLIENT_SECURITY как родитель, который, в свою очередь, также имеет родителя с именем MULE:SECURITY. Эта характеристика устанавливает тип ошибки как спецификацию более глобального элемента.

Виды типов ошибок

Ниже приведены категории, в которые попадают все ошибки:

ЛЮБЫЕ

Ошибки в этой категории - это ошибки, которые могут возникать в потоке. Они не такие серьезные и с ними легко справиться.

КРИТИЧЕСКИЙ

Ошибки в этой категории - это серьезные ошибки, которые невозможно обработать. Ниже приведен список типов ошибок в этой категории -

Старший НЕТ Тип и описание ошибки
1

OVERLOAD

Этот тип ошибки указывает на ошибку, возникшую из-за проблемы с перегрузкой. В этом случае исполнение будет отклонено.

2

FATAL_JVM_ERROR

Этот тип ошибки указывает на возникновение фатальной ошибки. Например, переполнение стека.

Тип ошибки CUSTOM

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

Категории ошибок мула

В широком смысле ошибки в Mule можно разделить на две категории, а именно: Messaging Errors and System Errors.

Сообщение об ошибке

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

Системная ошибка

Системная ошибка указывает на исключение, происходящее на системном уровне. Если событие Mule отсутствует, системная ошибка обрабатывается обработчиком системных ошибок. Обработчик системных ошибок обрабатывает следующие типы исключений:

  • Исключение, возникающее при запуске приложения.
  • Исключение, возникающее при сбое подключения к внешней системе.

В случае возникновения системной ошибки Mule отправляет уведомление об ошибке зарегистрированным слушателям. Он также регистрирует ошибку. С другой стороны, Mule выполняет стратегию повторного подключения, если ошибка была вызвана сбоем подключения.

Обработка ошибок Mule

У Mule есть следующие два обработчика ошибок для обработки ошибок -

Обработчики ошибок при ошибках

Первый обработчик ошибок Mule - это компонент On-Error, который определяет типы ошибок, которые они могут обрабатывать. Как обсуждалось ранее, мы можем настроить компоненты On-Error внутри компонента обработчика ошибок, похожего на область видимости. Каждый поток Mule содержит только один обработчик ошибок, но этот обработчик ошибок может содержать столько областей действия при ошибке, сколько нам нужно. Шаги по обработке ошибки Mule внутри потока с помощью компонента On-Error следующие:

  • Во-первых, всякий раз, когда поток Mule вызывает ошибку, нормальное выполнение потока останавливается.

  • Далее процесс будет перенесен в Error Handler Component что уже есть On Error component для соответствия типам ошибок и выражениям.

  • Наконец, компонент Error Handler направляет ошибку первому On Error scope что соответствует ошибке.

Ниже приведены два типа компонентов с ошибкой, поддерживаемых Mule.

Распространение при ошибке

Компонент распространения при ошибке выполняется, но передает ошибку на следующий уровень и прерывает выполнение владельцем. Транзакция будет отменена, если она будет обработанаOn Error Propagate составная часть.

При ошибке продолжить

Как и компонент распространения при ошибке, компонент продолжения при ошибке также выполняет транзакцию. Единственное условие: если владелец успешно завершил выполнение, то этот компонент будет использовать результат выполнения как результат своего владельца. Транзакция будет зафиксирована, если она будет обработана компонентом On-Error Continue.

Попробуйте компонент Scope

Попробуйте Scope - это одна из многих новых функций, доступных в Mule 4. Он работает аналогично блоку try в JAVA, в который мы помещали код, который может быть исключением, чтобы его можно было обработать без нарушения всего кода.

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

Example

Ниже приведен пример использования области действия:

Настройка области попыток для обработки транзакций

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

  • INDIFFERENT [Default]- Если мы выберем эту конфигурацию в блоке try, то дочерние действия не будут рассматриваться как транзакция. В этом случае ошибка не вызывает ни отката, ни фиксации.

  • ALWAYS_BEGIN - Он указывает, что новая транзакция будет запускаться каждый раз при выполнении области действия.

  • BEGIN_OR_JOIN- Указывает, что если текущая обработка потока уже начала транзакцию, присоединяйтесь к ней. В противном случае начните новый.