私は、Spring統合フローの入力ペイロードとして巨大なxmlを持っています。だから、私はペイロードを保持するためにヘッダーエンリッチャーの代わりにトランスのクレームチェックを使用しています。私はメモリ内メッセージストアを使用しています。Spring統合で複数のスレッドを使用する場合のクレームチェック
後で私のSIフローでは、ペイロードを複数のスレッドに分割し、各スレッドは属性ペイロードの1つに基づいて異なるチャネルを呼び出します。私はこれを達成するためにルータを使用しています。各フローまたは各スレッドは、クレーム・チェックアウト・トランスを使用して初期ペイロードを検索し、必要な応答を構築するために使用します。各スレッドは応答を生成し、それらを集約する必要はありません。だから私は複数の応答をキューから落とされる私の流れから出てくるでしょう。
他のスレッドも同じメッセージをチェックアウトしようとするので、チェックアウト中にメッセージを削除できません。メッセージストアからメッセージを削除する最も良い方法は何ですか?
サンプル構成
`<int:chain input-channel="myInputChannel"
output-channel="myOutputchannel">
<int:claim-check-in />
<int:header-enricher>
<int:header name="myClaimCheckID" expression="payload"/>
</int:header-enricher>
</int:chain>`
フロー内の他のすべての構成要素は、クレームは、初期ペイロードのための変圧器をチェックアウトしているスプリッタ
<int:splitter input-channel="mySplitterChannel" output-channel="myRouterChannel" expression="mySplitExpression"> </int:splitter>
`<int:router input-channel="myRouterChannel" expression="routerExpression"
resolution-required="true">
<int:mapping value="A" channel="aChannel" />
<int:mapping value="B" channel="bChannel" />
<int:mapping value="C" channel="cChannel" />
</int:router>`
各チャネルの前に呼び出されます。では、スレッドがすべて処理された後にメッセージが削除されるようにするにはどうすればよいですか?
ご回答いただきありがとうございます。 –
@GaryRusellご回答いただきありがとうございます。私がヘッダーエンリッチャーを超えてクレームチェックを選択した理由は、ペイロードが巨大であるためヘッダーにペイロードを詰めたくないからです。私のSIフローには、今後の使用のためにペイロードを保持する必要のある他のコンポーネントがあります。すべてのペイロードをヘッダーに昇格させたいのではなく、persistentMessageStoreを必要としません。だから私はSimpleMessageStoreを使っていました。私の場合は、パフォーマンスや効率性に関して、クレームチェックやヘッダーエンリッチャーを使用することに違いがないことを意味しますか。 –
一日の終わりには、ストア内にあるかどうかにかかわらず、ヒープ上に1つのインスタンスが存在するか、多くのメッセージから複数の参照があります。主張チェックの主な目的は、ネットワーク帯域幅を節約することです。ウサギやJMSのようなブローカに接続されている4つのアプリA→B→C→Dを考えてみましょう。 AとDだけがペイロードを必要とします。クレーム・チェックを外部ストアで使用すると、大きなペイロードがネットワークに3回ではなく2回だけヒットします。 –