📜  MuleSoft-Mule错误处理

📅  最后修改于: 2020-11-12 05:04:59             🧑  作者: Mango


新的Mule错误处理是Mule 4中所做的最大和主要的更改之一。新的错误处理可能看起来很复杂,但是它更好,更有效。在本章中,我们将讨论有关Mule错误的组件,错误类型,Mule错误的类别以及用于处理Mule错误的组件。

ule误差的组成

Mule错误是Mule异常失败的结果,具有以下成分-

描述

它是M子错误的重要组成部分,它将对问题进行描述。其表达如下-

#[error.description]

类型

Mule错误的Type分量用于表征问题。它还允许在错误处理程序中进行路由。其表达如下-

#[error.errorType]

原因

Mule错误的Cause组件提供了导致失败的基础Java throwable。其表达如下-

#[error.cause]

信息

Mule错误的Message组件显示有关该错误的可选消息。其表达如下-

#[error.errorMessage]

子错误

Mule错误的Child Errors组件提供内部错误的可选集合。这些内部错误主要由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." }
Sr.NO Error Type and Description
1

TRANSFORMATION

This Error Type indicates an error occurred while transforming a value. The transformation is Mule Runtime internal transformation and not the DataWeave transformations.

2

EXPRESSION

This kind of Error Type indicates an error occurred while evaluating an expression.

3

VALIDATION

This kind of Error Type indicates a validation error occurred.

4

DUPLICATE_MESSAGE

A kind of validation error which occurs when a message being processed twice.

5

REDELIVERY_EXHAUSTED

This kind of Error Type occurs when maximum attempts to reprocess a message from a source has been exhausted.

6

CONNECTIVITY

This Error Type indicates a problem while establishing a connection.

7

ROUTING

This Error Type indicates an error occurred while routing a message.

8

SECURITY

This Error Type indicates a security error occurred. For example, invalid credentials received.

9

STREAM_MAXIMUM_SIZE_EXCEEDED

This Error Type occurs when the maximum size allowed for a stream exhausted.

10

TIMEOUT

It indicates the timeout while processing a message.

11

UNKNOWN

This Error Type indicates an unexpected error occurred.

12

SOURCE

It represents the occurrence of an error in the source of the flow.

13

SOURCE_RESPONSE

It represents the occurrence of an error in the source of the flow while processing a successful response.

在上面的示例中,您可以看到m子错误的消息组件。

错误类型

让我们借助其特征来了解错误类型-

  • Mule错误类型的第一个特征是它由名称空间和标识符组成。这使我们可以根据其域来区分类型。在上面的示例中,错误类型为HTTP:UNAUTHORIZED

  • 第二个重要特征是错误类型可以具有父类型。例如,错误类型HTTP: UNAUTHORIZED具有MULE:CLIENT_SECURITY作为父,而父级又具有一个名为MULE:SECURITY的父级。该特性将错误类型设置为更多全局项目的规范。

错误类型

以下是所有错误所属的类别-

任何

此类别下的错误是流中可能发生的错误。它们不是那么严重,可以轻松处理。

危急

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

Sr.NO Error Type and Description
1

OVERLOAD

This Error Type indicates an error occurred due to problem of overloading. In this case, the execution will be rejected.

2

FATAL_JVM_ERROR

This kind of Error Type indicates the occurrence of a fatal error. For example, stack overflow.

自定义错误类型

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

ule子误差的类别

从广义上讲,Mule中的错误可以分为两类,即消息传递错误和系统错误

讯息错误

此类别的Mule错误与Mule流量有关。每当Mule流中发生问题时,Mule都会引发消息传递错误。我们可以在错误处理程序组件内设置On Error组件来处理这些Mule错误。

系统错误

系统错误表示发生在系统级别的异常。如果没有Mule事件,则系统错误由系统错误处理程序处理。以下类型的异常由系统错误处理程序处理-

  • 在应用程序启动期间发生的异常。
  • 与外部系统的连接失败时发生的异常。

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

处理M子错误

ule子有以下两个错误处理程序来处理错误-

错误错误处理程序

第一个Mule错误处理程序是On-Error组件,它定义了它们可以处理的错误类型。如前所述,我们可以在类似作用域的错误处理程序组件内部配置On-Error组件。每个Mule流仅包含一个错误处理程序,但是此错误处理程序可以包含所需的任意多个On-Error范围。借助On-Error组件,处理流中的Mule错误的步骤如下-

  • 首先,每当Mule流引发错误时,正常流执行就会停止。

  • 接下来,该过程将转移到已经具有On Error组件以匹配错误类型和表达式的Error Handler组件

  • 最后,错误处理程序组件将错误路由到与该错误匹配的第一个On Error范围

处理消息

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

错误传播

错误传播组件会执行,但会将错误传播到下一个级别,并中断所有者的执行。如果事务由错误传播组件处理,则该事务将回滚。

错误继续

与错误传播组件一样,错误继续组件也执行事务。唯一的条件是,如果所有者已成功完成执行,则此组件将使用执行结果作为其所有者的结果。如果事务由“错误继续”组件处理,则将提交事务。

试用范围组件

Try Scope是Mule 4中提供的许多新功能之一。它的工作原理类似于JAVA的try块,在该块中,我们用来封装有可能成为异常的代码,因此可以在不破坏整个代码的情况下进行处理。

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

以下是使用try范围的示例-

尝试范围

配置尝试范围以处理事务

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

配置尝试范围

  • INDIFFERENT [默认] -如果我们在try块上选择此配置,则子操作将不被视为事务。在这种情况下,错误不会导致回滚或提交。

  • ALWAYS_BEGIN-指示每次执行范围时将开始一个新事务。

  • BEGIN_OR_JOIN-表示如果流程的当前处理已经开始了事务,则将其加入。否则,开始一个新的。