Mulesoft-mule-error-handling
MuleSoft-ラバのエラー処理
新しいMuleエラー処理は、Mule 4で行われた最大かつ大きな変更の1つです。 新しいエラー処理は複雑に見えるかもしれませんが、より効率的です。 この章では、Muleエラーのコンポーネント、エラータイプ、Muleエラーのカテゴリ、およびMuleエラーを処理するためのコンポーネントについて説明します。
ラバエラーのコンポーネント
ESB Muleエラーは、ESB Mule例外エラーの結果であり、次のコンポーネントがあります
説明
Muleエラーの重要な要素であり、問題について説明します。 その式は次のとおりです-
#[error.description]
Type
ESB MuleエラーのTypeコンポーネントは、問題を特徴付けるために使用されます。 また、エラーハンドラー内でルーティングすることもできます。 その式は次のとおりです-
#[error.errorType]
原因
ESB Muleエラーの原因コンポーネントは、失敗の原因となる基礎となるJavaスロー可能オブジェクトを提供します。 その式は次のとおりです-
#[error.cause]
メッセージ
ESB Muleエラーの_Message_コンポーネントには、エラーに関するオプションのメッセージが表示されます。 その式は次のとおりです-
#[error.errorMessage]
子エラー
ESB Muleエラーの_Child Errors_コンポーネントは、オプションで内部エラーのコレクションを提供します。 これらの内部エラーは、主に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 | Error Type and Description |
---|---|
1 |
TRANSFORMATION このエラータイプは、値の変換中にエラーが発生したことを示します。 変換はMule Runtime内部変換であり、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 成功した応答の処理中に、フローのソースでエラーが発生したことを表します。 |
上記の例では、ラバエラーの_message_コンポーネントを確認できます。
エラーの種類
その特性の助けを借りてエラータイプを理解しましょう-
- ESB Muleエラータイプの最初の特徴は、名前空間と識別子*の両方で構成されることです。 これにより、ドメインに応じてタイプを区別できます。 上記の例では、エラータイプは *HTTP:UNAUTHORIZED です。
- 2番目の重要な特性は、エラータイプに親タイプがある場合があることです。 たとえば、エラータイプ HTTP:UNAUTHORIZED の親は MULE:CLIENT_SECURITY であり、その親は MULE:SECURITY という名前の親も持っています。 この特性は、よりグローバルなアイテムの仕様としてエラータイプを確立します。
エラーの種類
以下は、すべてのエラーが分類されるカテゴリです-
ANY
このカテゴリのエラーは、フローで発生する可能性のあるエラーです。 それらはそれほど厳しくなく、簡単に処理できます。
クリティカル
このカテゴリのエラーは、処理できない重大なエラーです。 以下は、このカテゴリの下のエラータイプのリストです-
Sr.NO | Error Type and Description |
---|---|
1 |
OVERLOAD このエラータイプは、過負荷の問題によりエラーが発生したことを示します。 この場合、実行は拒否されます。 |
2 |
FATAL_JVM_ERROR この種類のエラータイプは、致命的なエラーの発生を示します。 たとえば、スタックオーバーフロー。 |
カスタムエラータイプ
カスタムエラータイプは、当社が定義したエラーです。 それらは、マッピング時またはエラー発生時に定義できます。 ESB Muleアプリケーション内の他の既存のエラータイプと区別するために、これらのエラータイプに特定のカスタム名前空間を与える必要があります。 たとえば、HTTPを使用するESB Muleアプリケーションでは、カスタムエラータイプとしてHTTPを使用できません。
ラバエラーのカテゴリ
広い意味で、Muleのエラーは2つのカテゴリ、つまり Messaging ErrorsとSystem Errors に分類できます。
メッセージングエラー
Muleエラーのこのカテゴリは、Muleフローに関連しています。 ESB Muleフロー内で問題が発生すると、ESB Muleはメッセージングエラーをスローします。 これらのESB Muleエラーを処理するために、エラーハンドラコンポーネント内に On Error コンポーネントを設定できます。
システムエラー
システムエラーは、システムレベルで例外が発生したことを示します。 ESB Muleイベントがない場合、システムエラーはシステムエラーハンドラーによって処理されます。 次の種類の例外は、システムエラーハンドラによって処理されます-
- アプリケーションの起動中に発生する例外。
- 外部システムへの接続が失敗したときに発生する例外。
システムエラーが発生した場合、Muleは登録されたリスナーにエラー通知を送信します。 エラーも記録します。 一方、Muleは、エラーが接続の失敗によって引き起こされた場合、再接続戦略を実行します。
ESB Muleエラーの処理
ESB Muleには、エラーを処理するための次の2つのエラーハンドラがあります-
エラー時のエラーハンドラー
Muleの最初のエラーハンドラはOn-Errorコンポーネントで、処理可能なエラーのタイプを定義します。 前に説明したように、スコープのようなエラーハンドラコンポーネント内でOn-Errorコンポーネントを構成できます。 各Muleフローにはエラーハンドラーが1つしか含まれていませんが、このエラーハンドラーには必要な数のOn-Errorスコープを含めることができます。 On-Errorコンポーネントの助けを借りて、フロー内のMuleエラーを処理する手順は次のとおりです-
- まず、ESB Muleフローでエラーが発生すると、通常のフロー実行は停止します。
- 次に、プロセスは、エラーの種類と式に一致する* On Errorコンポーネント*を既に持っている Error Handler Component に転送されます。
- 最後に、エラーハンドラコンポーネントは、エラーに一致する最初の* On Errorスコープ*にエラーをルーティングします。
ESB MuleがサポートしているOn-Errorコンポーネントには2種類あります-
エラー時の伝播
On-Error Propagateコンポーネントは実行されますが、エラーを次のレベルに伝播し、所有者の実行を中断します。 On Error Propagate コンポーネントによって処理される場合、トランザクションはロールバックされます。
エラー時の続行
On-Error Propagateコンポーネントと同様に、On-Error Continueコンポーネントもトランザクションを実行します。 唯一の条件は、所有者が実行を正常に完了した場合、このコンポーネントは実行結果を所有者の結果として使用することです。 On-Error Continueコンポーネントによって処理される場合、トランザクションはコミットされます。
Scopeコンポーネントを試す
Try Scopeは、Mule 4で利用可能な多くの新機能の1つです。 これは、例外の可能性があるコードを囲むJavaのtryブロックと同様に機能するため、コード全体を壊すことなく処理できます。
Try Scopeで1つ以上のMuleイベントプロセッサをラップできます。その後、tryスコープはこれらのイベントプロセッサによってスローされる例外をキャッチして処理します。 tryスコープの主な機能は、フロー全体ではなく内部コンポーネントのエラー処理をサポートする独自のエラー処理戦略を中心に展開します。 そのため、フローを別のフローに抽出する必要はありません。
例
以下は、tryスコープの使用例です-
トランザクションを処理するためのtryスコープの構成
私たちが知っているように、トランザクションは部分的に実行されるべきではない一連のアクションです。 トランザクションのスコープ内のすべての操作は同じスレッドで実行され、エラーが発生した場合、ロールバックまたはコミットにつながるはずです。 次の方法でtryスコープを構成して、子操作をトランザクションとして扱うことができます。
- INDIFFERENT [デフォルト] -tryブロックでこの構成を選択した場合、子アクションはトランザクションとして扱われません。 この場合、エラーはロールバックもコミットも引き起こしません。
- ALWAYS_BEGIN -スコープが実行されるたびに新しいトランザクションが開始されることを示します。
- BEGIN_OR_JOIN -フローの現在の処理が既にトランザクションを開始している場合、それを結合することを示します。 それ以外の場合は、新しいものを開始します。