- MuleSoft 教程
- MuleSoft - 首页
- MuleSoft - Mule ESB 简介
- MuleSoft - Mule 项目
- MuleSoft - Mule 在我们的机器中
- MuleSoft - Anypoint Studio
- MuleSoft - 探索 Anypoint Studio
- 创建第一个 Mule 应用程序
- MuleSoft - DataWeave 语言
- 消息处理器和脚本组件
- 核心组件及其配置
- MuleSoft - 端点
- 流程控制和转换器
- 使用 Anypoint Studio 的 Web 服务
- MuleSoft - Mule 错误处理
- MuleSoft - Mule 异常处理
- MuleSoft - 使用 MUnit 进行测试
- MuleSoft 有用资源
- MuleSoft - 快速指南
- MuleSoft - 有用资源
- MuleSoft - 讨论
MuleSoft - Mule 错误处理
新的 Mule 错误处理是 Mule 4 中进行的最大和最主要的更改之一。新的错误处理可能看起来很复杂,但它更好且更高效。在本章中,我们将讨论 Mule 错误的组件、错误类型、Mule 错误的类别以及处理 Mule 错误的组件。
Mule 错误的组件
Mule 错误是 Mule 异常失败的结果,具有以下组件:
描述
它是 Mule 错误的重要组成部分,将提供有关问题的描述。其表达式如下:
#[error.description]
类型
Mule 错误的“类型”组件用于表征问题。它还允许在错误处理程序中进行路由。其表达式如下:
#[error.errorType]
原因
Mule 错误的“原因”组件提供了导致失败的基础 Java 可抛出对象。其表达式如下:
#[error.cause]
消息
Mule 错误的消息组件显示一条有关错误的可选消息。其表达式如下:
#[error.errorMessage]
子错误
Mule 错误的子错误组件提供了内部错误的可选集合。这些内部错误主要由诸如 Scatter-Gather 之类的元素用于提供聚合路由错误。其表达式如下:
#[error.childErrors]
示例
如果 HTTP 请求失败且状态代码为 401,则 Mule 错误如下:
Description: HTTP GET on resource ‘https://127.0.0.1:8181/TestApp’ failed: unauthorized (401) Type: HTTP:UNAUTHORIZED Cause: a ResponseValidatorTypedException instance Error Message: { "message" : "Could not authorize the user." }
序号 | 错误类型和描述 |
---|---|
1 | 转换 此错误类型表示在转换值时发生错误。转换是 Mule 运行时内部转换,而不是 DataWeave 转换。 |
2 | 表达式 此类错误类型表示在计算表达式时发生错误。 |
3 | 验证 此类错误类型表示发生验证错误。 |
4 | 重复消息 一种验证错误,当消息被处理两次时发生。 |
5 | 重传耗尽 此类错误类型发生在从源重处理消息的最大尝试次数已用尽时。 |
6 | 连接 此错误类型表示在建立连接时出现问题。 |
7 | 路由 此错误类型表示在路由消息时发生错误。 |
8 | 安全 此错误类型表示发生安全错误。例如,接收到的凭据无效。 |
9 | 流最大大小超出 当流允许的最大大小用尽时,发生此错误类型。 |
10 | 超时 它表示在处理消息时超时。 |
11 | 未知 此错误类型表示发生意外错误。 |
12 | 源 它表示在流程源中发生错误。 |
13 | 源响应 它表示在流程源中处理成功响应时发生错误。 |
在上面的示例中,您可以看到 Mule 错误的消息组件。
错误类型
让我们借助其特征来了解错误类型:
Mule 错误类型的第一个特征是它包含命名空间和标识符。这使我们能够根据其域区分类型。在上面的示例中,错误类型为HTTP: UNAUTHORIZED。
第二个也是重要的特征是错误类型可能具有父类型。例如,错误类型HTTP: UNAUTHORIZED具有MULE:CLIENT_SECURITY作为父类型,后者又具有名为MULE:SECURITY的父类型。此特征将错误类型确立为更全局项的规范。
错误类型的种类
以下是所有错误所属的类别:
任何
此类别下的错误是可能在流程中发生的错误。它们不那么严重,可以轻松处理。
关键
此类别下的错误是无法处理的严重错误。以下是此类别下错误类型的列表:
序号 | 错误类型和描述 |
---|---|
1 | 过载 此错误类型表示由于过载问题而发生的错误。在这种情况下,将拒绝执行。 |
2 | 致命 JVM 错误 此类错误类型表示发生致命错误。例如,堆栈溢出。 |
自定义错误类型
自定义错误类型是我们定义的错误。它们可以在映射或引发错误时定义。我们必须为这些错误类型提供特定的自定义命名空间,以将其与 Mule 应用程序中其他现有的错误类型区分开来。例如,在使用 HTTP 的 Mule 应用程序中,我们不能使用 HTTP 作为自定义错误类型。
Mule 错误的类别
从广义上讲,Mule 中的错误可以分为两类,即消息错误和系统错误。
消息错误
此类 Mule 错误与 Mule 流程相关。每当 Mule 流程中出现问题时,Mule 都会抛出消息错误。我们可以在错误处理程序组件内部设置出错时组件来处理这些 Mule 错误。
系统错误
系统错误表示在系统级别发生的异常。如果没有 Mule 事件,则系统错误由系统错误处理程序处理。以下类型的异常由系统错误处理程序处理:
- 应用程序启动期间发生的异常。
- 连接到外部系统失败时发生的异常。
如果发生系统错误,Mule 会向注册的侦听器发送错误通知。它还会记录错误。另一方面,如果错误是由连接故障引起的,Mule 会执行重新连接策略。
处理 Mule 错误
Mule 有以下两个错误处理程序来处理错误:
出错时错误处理程序
第一个 Mule 错误处理程序是“出错时”组件,它定义了它们可以处理的错误类型。如前所述,我们可以在类似于错误处理程序组件的范围内配置“出错时”组件。每个 Mule 流程只包含一个错误处理程序,但此错误处理程序可以根据需要包含任意数量的“出错时”范围。在流程中使用“出错时”组件处理 Mule 错误的步骤如下:
首先,每当 Mule 流程引发错误时,正常的流程执行就会停止。
接下来,流程将转移到已具有“出错时”组件的错误处理程序组件,以匹配错误类型和表达式。
最后,错误处理程序组件将错误路由到与错误匹配的第一个“出错时”范围。
以下是 Mule 支持的两种类型的“出错时”组件:
出错时传播
“出错时传播”组件执行但会将错误传播到下一级并中断所有者的执行。如果由“出错时传播”组件处理,则事务将回滚。
出错时继续
与“出错时传播”组件类似,“出错时继续”组件也执行事务。唯一的条件是,如果所有者已成功完成执行,则此组件将使用执行的结果作为其所有者的结果。如果由“出错时继续”组件处理,则事务将提交。
尝试范围组件
尝试范围是 Mule 4 中提供的许多新功能之一。它的工作原理类似于 JAVA 的 try 块,在其中我们习惯于将可能出现异常的代码括起来,以便在不中断整个代码的情况下进行处理。
我们可以将一个或多个 Mule 事件处理器包装在尝试范围内,然后尝试范围将捕获并处理这些事件处理器抛出的任何异常。尝试范围的主要工作原理围绕其自己的错误处理策略,该策略支持在其内部组件上进行错误处理,而不是在整个流程中进行错误处理。因此,我们不需要将流程提取到单独的流程中。
示例
以下是尝试范围用法的示例:
配置尝试范围以处理事务
众所周知,事务是一系列不应该部分执行的操作。事务范围内的所有操作都在同一线程中执行,如果发生错误,则应导致回滚或提交。我们可以按以下方式配置尝试范围,以便它将子操作视为事务。
无关 [默认] - 如果我们在 try 块上选择此配置,则子操作将不会被视为事务。在这种情况下,错误既不会导致回滚也不会导致提交。
始终开始 - 它表示每次执行范围时都会启动一个新事务。
开始或加入 - 它表示如果流程的当前处理已启动事务,则加入它。否则,启动一个新的事务。