MuleSoft-ミュールエラー処理

新しいMuleエラー処理は、Mule 4で行われた最大かつ主要な変更の1つです。新しいエラー処理は複雑に見えるかもしれませんが、より優れており、より効率的です。この章では、Muleエラーのコンポーネント、エラータイプ、Muleエラーのカテゴリ、およびMuleエラーを処理するためのコンポーネントについて説明します。

ラバエラーのコンポーネント

Muleエラーは、Mule例外の失敗の結果です。次のコンポーネントがあります-

説明

これは、問題について説明するMuleエラーの重要なコンポーネントです。その表現は次のとおりです-

#[error.description]

タイプ

MuleエラーのTypeコンポーネントは、問題を特徴づけるために使用されます。また、エラーハンドラー内でのルーティングも可能です。その表現は次のとおりです-

#[error.errorType]

原因

MuleエラーのCauseコンポーネントは、失敗の原因となる基礎となるJavaスロー可能オブジェクトを提供します。その表現は次のとおりです-

#[error.cause]

メッセージ

Muleエラーのメッセージコンポーネントは、エラーに関するオプションのメッセージを表示します。その表現は次のとおりです-

#[error.errorMessage]

子エラー

子供のエラーミュールエラーの構成要素は、内部エラーのオプションのコレクションを提供します。これらの内部エラーは、主にScatter-Gatherなどの要素によって使用され、集約されたルートエラーを提供します。その表現は次のとおりです-

#[error.childErrors]

401ステータスコードでHTTPリクエストが失敗した場合、ミュールエラーは次のようになります。

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 エラーの種類と説明
1

TRANSFORMATION

このエラータイプは、値の変換中にエラーが発生したことを示します。変換はMuleランタイムの内部変換であり、DataWeave変換ではありません。

2

EXPRESSION

この種のエラータイプは、式の評価中にエラーが発生したことを示します。

3

VALIDATION

この種のエラータイプは、検証エラーが発生したことを示します。

4

DUPLICATE_MESSAGE

メッセージが2回処理されるときに発生する一種の検証エラー。

5

REDELIVERY_EXHAUSTED

この種のエラータイプは、ソースからのメッセージの再処理の最大試行回数がなくなったときに発生します。

6

CONNECTIVITY

このエラータイプは、接続の確立中に問題が発生したことを示します。

7

ROUTING

このエラータイプは、メッセージのルーティング中にエラーが発生したことを示します。

8

SECURITY

このエラータイプは、セキュリティエラーが発生したことを示します。たとえば、無効な資格情報を受信しました。

9

STREAM_MAXIMUM_SIZE_EXCEEDED

このエラータイプは、ストリームに許可されている最大サイズが使い果たされたときに発生します。

10

TIMEOUT

メッセージ処理中のタイムアウトを示します。

11

UNKNOWN

このエラータイプは、予期しないエラーが発生したことを示します。

12

SOURCE

これは、フローのソースでのエラーの発生を表します。

13

SOURCE_RESPONSE

これは、成功した応答の処理中にフローのソースでエラーが発生したことを表します。

上記の例では、ラバエラーのメッセージコンポーネントを見ることができます。

エラーの種類

その特性を利用してエラータイプを理解しましょう-

  • Muleエラータイプの最初の特徴は、両方で構成されていることです。 a namespace and an identifier。これにより、ドメインに応じてタイプを区別できます。上記の例では、エラータイプはHTTP: UNAUTHORIZED

  • 2番目の重要な特性は、エラータイプが親タイプを持つ可能性があることです。たとえば、エラータイプHTTP: UNAUTHORIZED 持っている MULE:CLIENT_SECURITY 親として、名前の付いた親もあります MULE:SECURITY。この特性により、エラータイプがよりグローバルなアイテムの仕様として確立されます。

エラータイプの種類

以下は、すべてのエラーが該当するカテゴリです。

どれか

このカテゴリのエラーは、フローで発生する可能性のあるエラーです。それらはそれほど深刻ではなく、簡単に扱うことができます。

クリティカル

このカテゴリのエラーは、処理できない重大なエラーです。以下は、このカテゴリのエラータイプのリストです-

Sr.NO エラーの種類と説明
1

OVERLOAD

このエラータイプは、過負荷の問題が原因でエラーが発生したことを示します。この場合、実行は拒否されます。

2

FATAL_JVM_ERROR

この種のエラータイプは、致命的なエラーの発生を示します。たとえば、スタックオーバーフロー。

CUSTOMエラータイプ

CUSTOMエラータイプは、当社が定義したエラーです。これらは、マッピング時またはエラー発生時に定義できます。Muleアプリケーション内の他の既存のエラータイプと区別するために、これらのエラータイプに特定のカスタム名前空間を与える必要があります。たとえば、HTTPを使用するMuleアプリケーションでは、カスタムエラータイプとしてHTTPを使用することはできません。

ラバエラーのカテゴリー

広い意味で、Muleのエラーは2つのカテゴリに分類できます。 Messaging Errors and System Errors

メッセージングエラー

このカテゴリのMuleエラーは、Muleフローに関連しています。Muleフロー内で問題が発生するたびに、Muleはメッセージングエラーをスローします。設定できますOn Error これらのMuleエラーを処理するためのエラーハンドラコンポーネント内のコンポーネント。

システムエラー

システムエラーは、システムレベルで例外が発生していることを示します。Muleイベントがない場合、システムエラーはシステムエラーハンドラーによって処理されます。次の種類の例外は、システムエラーハンドラによって処理されます-

  • アプリケーションの起動中に発生する例外。
  • 外部システムへの接続に失敗したときに発生する例外。

システムエラーが発生した場合、Muleは登録済みのリスナーにエラー通知を送信します。また、エラーをログに記録します。一方、エラーの原因が接続障害である場合、Muleは再接続戦略を実行します。

ラバエラーの処理

Muleには、エラーを処理するための次の2つのエラーハンドラがあります-

エラー時エラーハンドラ

最初のMuleエラーハンドラーはOn-Errorコンポーネントであり、処理できるエラーのタイプを定義します。前に説明したように、スコープのようなエラーハンドラコンポーネント内にオンエラーコンポーネントを設定できます。各Muleフローにはエラーハンドラーが1つだけ含まれていますが、このエラーハンドラーには必要な数のOn-Errorスコープを含めることができます。On-Errorコンポーネントを使用して、フロー内のMuleエラーを処理する手順は次のとおりです。

  • まず、Muleフローでエラーが発生すると、通常のフローの実行が停止します。

  • 次に、プロセスはに転送されます Error Handler Component すでに持っている On Error component エラーの種類と式を一致させます。

  • 最後に、エラーハンドラコンポーネントはエラーを最初のコンポーネントにルーティングします On Error scope エラーと一致します。

以下は、Muleでサポートされている2種類のOn-Errorコンポーネントです。

エラー時の伝播

On-Error Propagateコンポーネントは実行されますが、エラーを次のレベルに伝播し、所有者の実行を中断します。によって処理された場合、トランザクションはロールバックされますOn Error Propagate 成分。

エラー時続行

On-Error Propagateコンポーネントと同様に、On-ErrorContinueコンポーネントもトランザクションを実行します。唯一の条件は、所有者が実行を正常に完了した場合、このコンポーネントは実行の結果を所有者の結果として使用することです。On-Error Continueコンポーネントによって処理される場合、トランザクションはコミットされます。

スコープコンポーネントを試す

Try Scopeは、Mule 4で利用できる多くの新機能の1つです。これは、例外となる可能性のあるコードを囲むために使用したJAVAのtryブロックと同様に機能するため、コード全体を壊すことなく処理できます。

1つ以上のMuleイベントプロセッサをTryScopeでラップできます。その後、try scopeは、これらのイベントプロセッサによってスローされた例外をキャッチして処理します。tryスコープの主な動作は、フロー全体ではなく内部コンポーネントでのエラー処理をサポートする独自のエラー処理戦略を中心に展開されます。そのため、フローを別のフローに抽出する必要はありません。

Example

以下は、tryスコープの使用例です-

トランザクションを処理するためのtryスコープの構成

ご存知のように、トランザクションは、部分的に実行してはならない一連のアクションです。トランザクションのスコープ内のすべての操作は同じスレッドで実行され、エラーが発生した場合は、ロールバックまたはコミットにつながるはずです。次の方法でtryスコープを構成して、子操作をトランザクションとして扱うことができます。

  • INDIFFERENT [Default]− tryブロックでこの構成を選択した場合、子アクションはトランザクションとして扱われません。この場合、エラーによってロールバックもコミットも発生しません。

  • ALWAYS_BEGIN −スコープが実行されるたびに新しいトランザクションが開始されることを示します。

  • BEGIN_OR_JOIN−フローの現在の処理がすでにトランザクションを開始している場合は、それに参加することを示します。それ以外の場合は、新しいものを開始します。