再配信ポリシーの設定

再配信ポリシーとは、エラーを発生するメッセージを Mule Runtime Engine (Mule) で実行する回数を制限することでリソースを節約するのに役立つ検索条件です。再配信ポリシーは、フロー内の任意のソースに追加できます。

再配信ポリシーをフローのソースに追加すると、Mule によってフローのコンポーネントが実行される前に受信データが評価されます。指定した回数メッセージ配信に失敗すると、再配信ポリシーによってフローで受信データの処理が防止され、​REDELIVERY_EXHAUSTED​ エラーが生成されます。

再配信ポリシーの設定パラメーター

項目 デフォルト値 説明

Max Redelivery Count (最大再配信数)

Number (数値)

5

MULE:REDELIVERY_EXHAUSTED​ エラーが生成される前に、失敗してもメッセージをフローに再配信して処理できる最大回数。

Use Secure Hash (セキュアハッシュを使用)

Boolean (ブール)

True

再配信されたメッセージの識別にセキュアハッシュアルゴリズムを使用するかどうかを示します。

Message Digest Algorithm (メッセージダイジェストアルゴリズム)

String (文字列)

SHA-256

メッセージに使用するセキュアハッシュアルゴリズム。メッセージのペイロードが Java オブジェクトの場合、Mule では ​[Message Digest Algorithm (メッセージダイジェストアルゴリズム)]​ 値が無視され、ペイロードの ​hashCode()​ が返した値を返します。

ID Expression (ID の式)

Expression (式)

-

メッセージがいつ再配信されたのかを判断する 1 つ以上の式を定義します。このプロパティは、​[Use Secure Hash (セキュアハッシュを使用)]​ の値が False の場合にのみ設定できます。

Object Store

String (文字列)

Mule のデフォルトの ​ObjectStoreManager​ によって作成される Object Store。永続的ではなく、​entryTtl​ は 300 秒、​expirationInterval​ は 6 秒です。

各メッセージの再配信カウンターが保存される Object Store。Object Store は参照または内部要素として設定できます。

詳細は、​「Object Store Connector ドキュメント」​を参照してください。

再配信ポリシーのしくみ

ソースが新しいメッセージを受信するたびに、Mule はそのキーを生成してメッセージを識別します。

  • 処理フローで例外が発生すると、Mule は、メッセージキーに関連付けられているカウンターを増分します。カウンター値が、設定されている ​maxRedeliveryCount​ の値を超えると、Mule で MULE:REDELIVERY_EXHAUSTED​ エラーがスローされます。

  • 処理フローで例外が発生しなければ、カウンターがリセットされます。

エラー

  • MULE:REDELIVERY_EXHAUSTED

    エラーが発生した実行回数が設定されている ​maxRedeliveryCount​ 値より大きい場合にスローされます。

次の例では、​maxRedeliveryCount​ である 2 を超えた場合に Mule で ​Redelivery exhausted in http listener​ メッセージが含まれるエラーが記録されます。

<flow name="logOnRedeliveryExhausted">
    <http:listener path="test" config-ref="listenerConfig">
        <redelivery-policy maxRedeliveryCount="2" useSecureHash="true"/>
    </http:listener>
    <flow-ref name="processData"/>
    <error-handler>
        <on-error-continue type="MULE:REDELIVERY_EXHAUSTED">
            <logger message="Redelivery exhausted in http listener" level="ERROR"/>
        </on-error-continue>
    </error-handler>
</flow>