Mulesoft 简明教程

MuleSoft - Mule Error Handling

新的 Mule 错误处理是 Mule 4 中进行的最大、最重要的更改之一。新的错误处理可能看起来很复杂,但它更好、更高效。在本章中,我们将讨论 Mule 错误的组成部分、错误类型、Mule 错误类别和用于处理 Mule 错误的组件。

Components of Mule Error

Mule 错误是 Mule 异常失败造成的结果,包括以下组件:

Description

它是 Mule 错误的一个重要组成部分,将提供有关问题的信息。其表达式如下:

#[error.description]

Type

Mule 错误类型组件用于描述问题。它还允许在错误处理程序内进行路由。其表达式如下:

#[error.errorType]

Cause

Mule 错误的 Cause 组件提供了导致错误的底层 Java 可抛出项。其表达式如下:

#[error.cause]

Message

Mule 错误中的消息组件显示有关错误的可选消息。其表达式如下:

#[error.errorMessage]

Child Errors

Mule 错误的子错误组件提供了内部错误的可选集合。这些内部错误主要由 Scatter-Gather 等元素用于提供聚合路由错误。其表达式如下:

#[error.childErrors]

Example

如果 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." }

Sr.NO

Error Type and Description

1

TRANSFORMATION 此错误类型表示在转换值时发生错误。转换是 Mule Runtime 内部转换,而不是 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 错误的消息组件。

Error Types

让我们借助 Mule 错误类型的特性来理解错误类型 -

  1. Mule 错误类型的第一个特性是它由 a namespace and an identifier 组成。这使我们能够根据错误类型的域来区分它们。在上面的示例中,错误类型是 HTTP: UNAUTHORIZED

  2. 第二个重要特性是错误类型可能有一个父类型。例如,错误类型 HTTP: UNAUTHORIZED 具有 MULE:CLIENT_SECURITY 作为父类型,后者又具有名为 MULE:SECURITY 的父类型。这个特性将错误类型建立为更全局项目的规格。

Kinds of Error Types

所有错误分类如下 -

ANY

此类别下的错误是在流程中可能发生的错误。这些错误不太严重,可以轻松处理。

CRITICAL

此类别下的错误是无法处理的严重错误。以下是此类别下的错误类型列表 -

Sr.NO

Error Type and Description

1

OVERLOAD 这种错误类型表示由于超载问题导致的错误。在这种情况下,执行将被拒绝。

2

FATAL_JVM_ERROR 这种错误类型表示发生了致命错误。例如,堆栈溢出。

CUSTOM Error Type

自定义错误类型是由我们定义的错误。它们可以在映射或引发错误时定义。我们必须为这些错误类型提供一个特定的自定义命名空间,以便将它们与 Mule 应用程序中的其他现有错误类型区分开来。例如,在使用 HTTP 的 Mule 应用程序中,我们不能使用 HTTP 作为自定义错误类型。

Categories of Mule Error

广义上讲,Mule 中的错误可以分为两类,即 Messaging Errors and System Errors

Messaging Error

这一类 Mule 错误与 Mule 流相关。每当 Mule 流中出现问题时,Mule 都会引发消息传递错误。我们可以在错误处理组件内设置 On Error 组件,以处理这些 Mule 错误。

System Error

系统错误表示系统级发生的异常。如果没有 Mule 事件,系统错误将由系统错误处理程序处理。系统错误处理程序处理的异常类型如下所示:

  1. - 在应用程序启动期间发生的异常。

  2. - 连接到外部系统时发生的异常。

如果发生系统错误,Mule 会将错误通知发送给已注册的监听器。它还会记录错误。另一方面,如果错误是由连接失败引起的,Mule 将执行重新连接策略。

Handling Mule Errors

Mule 具有以下两个错误处理程序来处理错误:

On-Error Error Handlers

第一个 Mule 错误处理程序是 On-Error 组件,该组件定义了它们可以处理的错误类型。如前所述,我们可以在 ERROR HANDLER 组件(类似范围)内配置 On-Error 组件。每个 Mule 流只包含一个错误处理程序,但该错误处理程序可以包含我们需要的任意多个 On-Error 范围。在流内借助 On-Error 组件处理 Mule 错误的步骤如下:

  1. - 首先,每当 Mule 流引发错误时,正常流执行都会停止。

  2. - 接下来,进程将传输到 Error Handler Component 中, Error Handler Component 已具有 On Error component 来匹配错误类型和表达式。

  3. - 最后,错误处理程序将错误路由到第一个匹配错误的 On Error scope

handling messaging

以下是 Mule 支持的两种类型的 On-Error 组件:

On-Error Propagate

On-Error Propagate 组件执行,但会将错误传播到下一级并中断所有者的执行。如果它由 On Error Propagate 组件处理,事务将回滚。

On-Error Continue

与 On-Error Propagate 组件类似,On-Error Continue 组件也会执行事务。唯一条件是,如果所有者已成功完成执行,则该组件将使用执行结果作为其所有者的结果。如果它由 On-Error Continue 组件处理,事务将提交。

Try Scope Component

Try Scope 是 Mule 4 中众多新功能之一。它的工作方式类似于 JAVA 中的 try 块,在其中我们通常将有异常可能性的代码封装起来,以便可以处理它而不会中断整个代码。

我们可以在 Try Scope 中包装一个或多个 Mule 事件处理器,此后,try scope 将捕获并处理这些事件处理器引发的任何异常。try scope 的主要工作围绕其自己的错误处理策略进行,该策略支持对其内部组件进行错误处理,而不是整个流。因此,我们不需要将流提取到一个单独的流中。

Example

以下是 try scope 用法的一个示例:

try scope

Configuring try scope for handling transactions

众所周知,事务是一系列绝不应该部分执行的操作。在事务范围内执行的所有操作都在同一线程中执行,如果发生错误,它将导致回滚或提交。我们可以按以下方式配置 try scope,以便它将子操作视为一个事务。

configuring try scope
  1. INDIFFERENT [Default] − 如果我们在 try 块中选择此配置,那么子操作将不会被视为一个事务。在这种情况下,错误既不会回滚也不会提交。

  2. ALWAYS_BEGIN − 它表示每次执行范围时都会启动一个新的事务。

  3. BEGIN_OR_JOIN − 它表示,如果流的当前处理已启动一个事务,则加入该事务。否则,启动一个新的事务。