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://: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 流程引發錯誤時,正常的流程執行就會停止。

  • 接下來,流程將轉移到已具有“出錯時”元件錯誤處理程式元件,以匹配錯誤型別和表示式。

  • 最後,錯誤處理程式元件將錯誤路由到與錯誤匹配的第一個“出錯時”範圍

Handling Messaging

以下是 Mule 支援的兩種型別的“出錯時”元件:

出錯時傳播

“出錯時傳播”元件執行但會將錯誤傳播到下一級並中斷所有者的執行。如果由“出錯時傳播”元件處理,則事務將回滾。

出錯時繼續

與“出錯時傳播”元件類似,“出錯時繼續”元件也執行事務。唯一的條件是,如果所有者已成功完成執行,則此元件將使用執行的結果作為其所有者的結果。如果由“出錯時繼續”元件處理,則事務將提交。

嘗試範圍元件

嘗試範圍是 Mule 4 中提供的許多新功能之一。它的工作原理類似於 JAVA 的 try 塊,在其中我們習慣於將可能出現異常的程式碼括起來,以便在不中斷整個程式碼的情況下進行處理。

我們可以將一個或多個 Mule 事件處理器包裝在嘗試範圍內,然後嘗試範圍將捕獲並處理這些事件處理器丟擲的任何異常。嘗試範圍的主要工作原理圍繞其自己的錯誤處理策略,該策略支援在其內部元件上進行錯誤處理,而不是在整個流程中進行錯誤處理。因此,我們不需要將流程提取到單獨的流程中。

示例

以下是嘗試範圍用法的示例:

Try Scope

配置嘗試範圍以處理事務

眾所周知,事務是一系列不應該部分執行的操作。事務範圍內的所有操作都在同一執行緒中執行,如果發生錯誤,則應導致回滾或提交。我們可以按以下方式配置嘗試範圍,以便它將子操作視為事務。

Configuring Try Scope
  • 無關 [預設] - 如果我們在 try 塊上選擇此配置,則子操作將不會被視為事務。在這種情況下,錯誤既不會導致回滾也不會導致提交。

  • 始終開始 - 它表示每次執行範圍時都會啟動一個新事務。

  • 開始或加入 - 它表示如果流程的當前處理已啟動事務,則加入它。否則,啟動一個新的事務。

廣告
© . All rights reserved.