5

私の現在の状況:

私は現在、2 つの異なるソースから発信されたメッセージを処理する 3 つのフローを持つ Mule ESB アプリケーションを使用しています。これらの 3 つのフローは、VM キューを使用して結合されています。

フロー #1:

インバウンド (エンドポイント #1) -> (メッセージの処理と変換を実行) -> アウトバウンド (エンドポイント #3)

フロー #2:

インバウンド (エンドポイント #2) -> (メッセージの処理と変換を実行) -> アウトバウンド (エンドポイント #3)

フロー #3

インバウンド (エンドポイント #3) -> (メッセージの処理と変換を実行し、何かを行う) -> アウトバウンド

問題/問題:

ここで私がやりたいことは、受信エンドポイントから状態情報を取得する 4 番目のフローであるフロー #4 を導入することです。この情報に基づいて、フロー #3 が実行されるのを防ぎ、受信メッセージを処理するのを防ぐことができます。

言い換えれば、私が理想的に望むのは、フロー #4 を ESB アプリケーションの起動時に実行し (すべてのフローが自動的に実行するように)、インバウンド メッセージから取得した状態情報に基づいて、防止/許可することです。または、エンドポイント #3 からのメッセージを処理しないようにフロー #3 を有効または無効にします。

私が理想的に必要とするものは次のとおりです。

要件:

  1. Mule フロー XML のみを使用して実行できる必要があり、POJO/カスタム Java オブジェクトを追加する必要はありません。
  2. フロー #4 は ESB アプリケーションの起動時に実行する必要があり、最初の受信メッセージのみを処理する必要があります。
  3. 理想的には、フロー #3 に複合インバウンド ソースを持たせたり、すべてのインバウンド メッセージを何らかのグローバル変数の状態で評価したりしたくありません。

私がやりたいことを達成するための最良の方法は何ですか?

本当に良い解決策がない場合、#3 の要件を省略しなければならない場合、アウトバウンド -> インバウンド エンドポイントによって結び付けられていない 2 つの独立したフロー間で共有されるグローバル変数を実現する最善の方法は何ですか? XML構成?セッション プロパティを使用してみましたが、フローをサブフローとして、またはエンドポイントで結び付ける必要があります。

ありがとう。

4

1 に答える 1

7

これを実現するには、グローバル プロパティといくつかの MEL エクスプレッションを使用します。

<global-property name="gate_open" value="true" />

<flow name="gated-flow">
    <vm:inbound-endpoint path="gated.in" />
    <expression-filter expression="#[app.registry.gate_open]" />
    ...
</flow>


<flow name="gate-controller">
    <vm:inbound-endpoint path="gate.in"  />
    <expression-component>
      app.registry.gate_open = false
    </expression-component>
</flow>

にメッセージを送信するvm://gate.inと、ゲートが閉じられ、gated-flow受信したメッセージの処理が停止されます。

VM の代わりに任意のプロトコルを使用できます。

于 2012-08-09T16:23:22.980 に答える