Idempotent Message Validator (<idempotent-message-validator/>)

受信メッセージの一意の ID を確認することによって、一意のメッセージのみがフローの実行を継続するようにします。

Mule メッセージの任意の入力属性を ID として使用するか、または DataWeave 式を設定することで ID を計算できます。また、DataWeave ​Crypto​ 関数を使用してデータからハッシュ (SHA、MD5) を計算することもできます。

コンポーネント XML

このコンポーネントは、次の XML 構造をサポートします。

<idempotent-message-validator
  doc:name="Idempotent message validator"
  doc:id="cyuupj"
  idExpression="#[]">
  <!-- Object Store to use for storing the processed message IDs -->
  <os:private-object-store />

</idempotent-message-validator>

Idempotent Message Validator (​<idempotent-message-validator/>​) 属性は UI および XML で設定できます。

属性名 属性 XML 説明

Idempotent message validator (冪等性のあるメッセージバリデーター)​ (デフォルト)

doc:name

キャンバスに表示されるコンポーネントの編集可能な名前。

なし

doc:id

コンポーネントの自動生成された識別子。

Value expression (値の式)

valueExpression

なし

Id expression (ID 式)

idExpression

Mule が ID を生成するために使用する式。DataWeave 関数を使用して ID を計算するか、または Mule メッセージの任意の既存の値から ID を抽出することができます。

Store prefix (ストアプレフィックス)

storePrefix

なし

Object store (オブジェクトストア)

objectStore

なし

この例では、一意の識別子として使用するために HTTP 要求から ID を抽出するように Idempotent Message Validator を設定する方法と、DataWeave 式を使用してペイロードをハッシュし、メッセージ ID を一意の識別子として使用する方法を示します。

例: HTTP 要求から ID を生成

次の例では、HTTP 要求からクエリパラメーター ID を抽出して、その値を一意の ID として使用してメッセージを絞り込むように Idempotent Message Validator を設定しています。

<flow name="myFlow">
  <http:listener doc:name="Listener" config-ref="HTTP_Listener_config" path="/"/>
  ...
  <idempotent-message-validator doc:name="Idempotent Message Validator" idExpression="#[attributes.queryParams.id]"/>
  ...
</flow>

例: DataWeave でペイロードをハッシュして ID を生成

次の例では、DataWeave 式を使用してペイロードをハッシュし、その結果を永続的なオブジェクトストアに保存して、処理後のメッセージ ID を一意の ID として使用してメッセージを絞り込むように Idempotent Message Validator を設定しています。

<flow name="myFlow">
  <http:listener doc:name="Listener" config-ref="HTTP_Listener_config" path="/"/>
  ...
  <idempotent-message-validator doc:name="Idempotent Message Validator" idExpression="
    #[%dw 2.0
      import dw::Crypto
      output application/octet-stream
      ---
      Crypto::hashWith(payload,'MD5')]">
    <os:private-object-store alias="privateObjectStore"
       entryTtl="1"
       entryTtlUnit="MINUTES"
       maxEntries="10" />
  </idempotent-message-validator>
  ...
</flow>

関連情報