MuleSoft - Mule异常处理



在每个项目中,异常都会发生的事实是不可避免的。因此,捕获、分类和处理异常非常重要,以防止系统/应用程序处于不一致状态。所有Mule应用程序都隐式应用了默认的异常策略。自动回滚任何挂起的交易是默认的异常策略。

Mule中的异常

在深入探讨异常处理之前,我们应该了解可能发生的异常类型,以及开发人员在设计异常处理程序时必须考虑的三个基本问题。

哪个传输很重要?

在设计异常处理程序之前,这个问题非常重要,因为并非所有传输都支持事务性。

文件HTTP不支持事务。因此,如果在这些情况下发生异常,我们必须手动处理它。

数据库支持事务。在此情况下设计异常处理程序时,我们必须记住数据库事务可以自动回滚(如果需要)。

对于REST API,我们应该记住它们应该返回正确的HTTP状态码。例如,资源未找到则返回404。

要使用哪个消息交换模式?

在设计异常处理程序时,我们必须注意消息交换模式。可以是同步(请求-回复)或异步(即发即忘)消息模式。

同步消息模式基于请求-回复格式,这意味着此模式将期望一个响应,并且将在返回响应或超时之前被阻塞。

异步消息模式基于即发即忘格式,这意味着此模式假设请求最终会被处理。

是什么类型的异常?

非常简单的规则是,您将根据异常类型来处理它。了解异常是由系统/技术问题还是业务问题引起非常重要。

系统/技术问题(例如网络中断)引起的异常应由重试机制自动处理。

另一方面,由业务问题(例如无效数据)引起的异常不应通过应用重试机制来解决,因为在不解决根本原因的情况下重试是没有用的。

为什么要对异常进行分类?

众所周知,并非所有异常都相同,因此对异常进行分类非常重要。在高层次上,异常可以分为以下两种类型:

业务异常

业务异常发生的主要原因是数据不正确或流程不正确。这些类型的异常通常不可重试,因此配置回滚不好。甚至应用重试机制也没有意义,因为在不解决根本原因的情况下重试是没有用的。为了处理此类异常,应立即停止处理,并将异常作为响应发送到死信队列。还应向操作人员发送通知。

非业务异常

非业务异常发生的主要原因是系统问题或技术问题。这些类型的异常是可重试的,因此配置重试机制来解决这些异常是很好的。

异常处理策略

Mule具有以下五种异常处理策略:

默认异常策略

Mule将此策略隐式应用于Mule流程。它可以处理流程中的所有异常,但也可以通过添加catch、Choice或Rollback异常策略来覆盖。此异常策略将回滚任何挂起的交易并记录异常。此异常策略的一个重要特征是,如果没有任何事务,它也会记录异常。

作为默认策略,Mule在流程中发生任何错误时都会实现它。我们无法在AnyPoint Studio中进行配置。

回滚异常策略

假设如果没有可能的解决方案来纠正错误,该怎么办?一个解决方案是使用回滚异常策略,该策略将回滚事务,并向父流程的入站连接器发送消息以重新处理消息。当我们想要重新处理消息时,此策略也非常有用。

示例

此策略可以应用于银行交易,其中资金正在存入支票/储蓄账户。我们可以在这里配置回滚异常策略,因为如果交易过程中发生错误,此策略会将消息回滚到流程的开头以重新尝试处理。

捕获异常策略

此策略捕获在其父流程中抛出的所有异常。它通过处理父流程抛出的所有异常来覆盖Mule的默认异常策略。我们可以使用捕获异常策略来避免将异常传播到入站连接器和父流程。

此策略还确保当发生异常时,流程处理的事务不会回滚。

示例

此策略可以应用于航班预订系统,在该系统中,我们有一个流程用于处理来自队列的消息。消息增强器在消息上添加一个属性以分配座位,然后将消息发送到另一个队列。

现在,如果此流程中发生任何错误,则消息将抛出异常。在这里,我们的捕获异常策略可以添加一个带有适当消息的标头,并将该消息从流程推送到下一个队列。

选择异常策略

如果您想根据消息内容处理异常,那么选择异常策略将是最佳选择。此异常策略的工作原理如下:

  • 首先,它捕获父流程中抛出的所有异常。
  • 接下来,它检查消息内容和异常类型。
  • 最后,它将消息路由到相应的异常策略。

在选择异常策略中将定义多个异常策略,例如Catch或Rollback。如果在此异常策略下没有定义任何策略,则它将消息路由到默认异常策略。它永远不会执行任何提交、回滚或使用活动。

引用异常策略

这指的是在单独的配置文件中定义的通用异常策略。当消息抛出异常时,此异常策略将引用在全局catch、rollback或choice异常策略中定义的错误处理参数。与选择异常策略一样,它也不会执行任何提交、回滚或使用活动。

广告