2017-01-18 2 views
1

私は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

答えて

0

で説明したようにJMXでチャイルズと両親 -

理想的には私はすべてのコンテキストのを管理することができるだろう。

集約リクエストを介してネットワークの負荷を最小限に抑えたいが、アグリゲーターからプリントまで各アイテムを同時に送信したい。

本当にあなたの目標であることを自分で決める必要があります。

keyに基づいて特定のソケットがプリントサーバーに送信されるようにするロジックは、routerにする必要がありますか?

そうでない場合は申し訳ありません:あなたの問題は明確ではない...

+0

私は素晴らしい方法である春の統合を使用して、右のパターンと抽象化を探して.... ;-)あなたのポイントを参照してください! – chenrici

+0

ネットワークの負荷は最小限に抑えたいが、グループのリクエストは、Connectionとformostに接続して送信し、Connectionをいつ閉じるかの決定的な基準を持つようにしてください。私はAggreatorが完璧なフィット感を持っていると信じていますが、はい、集計が完了するまで待っています。あなたが示唆しているようにルータのアプローチではそうではなく、私が今追いかけているのですが、ここではメッセージ入力に基づいてソケットごとにチャネルソケットを持つ子コンテキストを確定的に閉じることはできません。 – chenrici

+0

それは別の話のように聞こえる...そして、あなたがソケットごとに子のコンテキストを持たなければならない理由は、私には完全にはっきりしない。厳密な数のプリントサーバーを持っているので、クライアントのソケットを介して通信するためには、 'いくつかの外部イベントまたはアイドル・インターバルによってクローズして再接続できます。 –

関連する問題