Mulesoft 简明教程
MuleSoft - Mule Error Handling
新的 Mule 错误处理是 Mule 4 中进行的最大、最重要的更改之一。新的错误处理可能看起来很复杂,但它更好、更高效。在本章中,我们将讨论 Mule 错误的组成部分、错误类型、Mule 错误类别和用于处理 Mule 错误的组件。
Components of Mule Error
Mule 错误是 Mule 异常失败造成的结果,包括以下组件:
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 错误类型的特性来理解错误类型 -
-
Mule 错误类型的第一个特性是它由 a namespace and an identifier 组成。这使我们能够根据错误类型的域来区分它们。在上面的示例中,错误类型是 HTTP: UNAUTHORIZED 。
-
第二个重要特性是错误类型可能有一个父类型。例如,错误类型 HTTP: UNAUTHORIZED 具有 MULE:CLIENT_SECURITY 作为父类型,后者又具有名为 MULE:SECURITY 的父类型。这个特性将错误类型建立为更全局项目的规格。
Kinds of Error Types
所有错误分类如下 -
Categories of Mule Error
广义上讲,Mule 中的错误可以分为两类,即 Messaging Errors and System Errors 。
Handling Mule Errors
Mule 具有以下两个错误处理程序来处理错误:
On-Error Error Handlers
第一个 Mule 错误处理程序是 On-Error 组件,该组件定义了它们可以处理的错误类型。如前所述,我们可以在 ERROR HANDLER 组件(类似范围)内配置 On-Error 组件。每个 Mule 流只包含一个错误处理程序,但该错误处理程序可以包含我们需要的任意多个 On-Error 范围。在流内借助 On-Error 组件处理 Mule 错误的步骤如下:
-
- 首先,每当 Mule 流引发错误时,正常流执行都会停止。
-
- 接下来,进程将传输到 Error Handler Component 中, Error Handler Component 已具有 On Error component 来匹配错误类型和表达式。
-
- 最后,错误处理程序将错误路由到第一个匹配错误的 On Error scope 。
以下是 Mule 支持的两种类型的 On-Error 组件:
On-Error Continue
与 On-Error Propagate 组件类似,On-Error Continue 组件也会执行事务。唯一条件是,如果所有者已成功完成执行,则该组件将使用执行结果作为其所有者的结果。如果它由 On-Error Continue 组件处理,事务将提交。
Configuring try scope for handling transactions
众所周知,事务是一系列绝不应该部分执行的操作。在事务范围内执行的所有操作都在同一线程中执行,如果发生错误,它将导致回滚或提交。我们可以按以下方式配置 try scope,以便它将子操作视为一个事务。
-
INDIFFERENT [Default] − 如果我们在 try 块中选择此配置,那么子操作将不会被视为一个事务。在这种情况下,错误既不会回滚也不会提交。
-
ALWAYS_BEGIN − 它表示每次执行范围时都会启动一个新的事务。
-
BEGIN_OR_JOIN − 它表示,如果流的当前处理已启动一个事务,则加入该事务。否则,启动一个新的事务。