私はSpring Integration Aggregatorを使用するための完璧なフィット感のように見えます。Spring統合アグリゲータまたはルータに正しいパターンがありますか?
現在、大量のPDFレポートが作成されています。これらは、Printrequests経由でJMSキューに出力されます。プリントサーバーは、プリント要求のあるクライアントソケットを受け入れます。
負荷に関して一定の「公正さ」を達成するために、同じプリンタの印刷要求を集約したいと考えています。そして、集約された要求をプリントサーバーに送信します。基本的に「バッチ」用に作成されたpdfの数と、要求されたPDFレポートの「バッチ」ごとに固有のキーを持っています。集約された要求は、サービスアクティベータを介して同じクライアントソケットを介してプリントサーバーに「送信」されます。ですから、基本的には、Spring Integration Documentationで説明されているアプローチを採用しています。
問題:レポートは「バッチ」の最後のpdfレポートが作成されたときに印刷を開始します。これはかなりのボトルネックを作成するようです。
メッセージグループの最初のメッセージが到着し、印刷要求の結果を効果的に集計するとすぐに印刷を開始することができます。
は私がpublic void add(Message<?> messageToAdd)
メソッドが追加ロジックは、プリンタ・サーバを呼び出すと、実際にサーバーの応答を集約実装するカスタムMessageStore、でこれを達成するために考えられてきました。 「アクティブな」MessageStoreのようなもの。
しかし、カスタムMessageStoreのaddメソッドは、「大きな」ボトルネックになる可能性があります。「アクティブな」MessageStoreへの各追加をブロックします。また、間違ったメタファーのように見えます。
アグリゲータは、これらの要件に適切なアプローチですか?
またはIは、ダイナミックルータのチャンネルが印刷要求の各「バッチ」の子(S)/親applicationscontextでDynamic Ftp Spring Integration Example
にdecribedアプローチのためにもっと行くべきでしょうか? 子のapplicationcontextのライフサイクルが私にはあまり明確ではありません。あなたには、いくつかのButtered cat paradoxを持っているように見えますthe Monitoring Example of Spring Integration
私は素晴らしい方法である春の統合を使用して、右のパターンと抽象化を探して.... ;-)あなたのポイントを参照してください! – chenrici
ネットワークの負荷は最小限に抑えたいが、グループのリクエストは、Connectionとformostに接続して送信し、Connectionをいつ閉じるかの決定的な基準を持つようにしてください。私はAggreatorが完璧なフィット感を持っていると信じていますが、はい、集計が完了するまで待っています。あなたが示唆しているようにルータのアプローチではそうではなく、私が今追いかけているのですが、ここではメッセージ入力に基づいてソケットごとにチャネルソケットを持つ子コンテキストを確定的に閉じることはできません。 – chenrici
それは別の話のように聞こえる...そして、あなたがソケットごとに子のコンテキストを持たなければならない理由は、私には完全にはっきりしない。厳密な数のプリントサーバーを持っているので、クライアントのソケットを介して通信するためには、 'いくつかの外部イベントまたはアイドル・インターバルによってクローズして再接続できます。 –