1

次の問題を解決する必要があります。

次のJavaプログラムを作成する必要があります。

  1. Web サービスから JSON オブジェクト j1,j2,...,jn を読み取ります。
  2. j1',j2',...,jn' を見つけるために、各オブジェクトに対していくつかの計算を行います。
  3. オブジェクト j1'、j2'、...、jn' を Web サービスに送信します。

ステップ 1、2、および 3 の計算上のスペース要件は、いつでも変わる可能性があります。

例えば:

  1. ステップ 2 で JSON オブジェクトを処理するのにかかる時間は、JSON オブジェクトの内容によって異なります。
  2. ステップ 1 で Web サービスによって生成されるオブジェクトのレートは、時間とともに増減する可能性があります。
  3. 手順 3 で使用する Web サービスがバックログになる可能性があります。

上記の設計上の問題に対処するには、次のアーキテクチャを実装する必要があります。

ここに画像の説明を入力

  1. 外部 Web サービスから JSON オブジェクトを読み取り、Q に配置する
  2. Q から JSON オブジェクトを消費して処理する、自動サイズ調整ワーカー スレッド プール。それらを処理した後、結果のオブジェクトを 2 番目の Q に配置します
  3. 2 番目の Q から JSON オブジェクトを消費して消費 Web サービスに送信する、自動サイズ調整ワーカー スレッド プール。

質問:

この問題を解決するために使用できるフレームワークがあるかどうか興味がありますか?

ノート:

  1. カスタム キュー、同時実行パッケージを使用したスレッドプールなどのさまざまなコンポーネントを使用してこれを解決できますが、そのようなソリューションを作成できるソリューションを探しています。
  2. これはコンテナ内には存在しません。これは、エントリ ポイントが public static void main(String args[]) である Java プロセスになります。
  3. ただし、このパラダイムに適したコンテナーがある場合は、それについて学びたいと思います。
  4. これを複数のプロセスに分割することもできますが、非常にシンプルにして単一のプロセスにしたいと考えています。

ありがとう。

ありがとう。

4

2 に答える 2

1

あなたの投稿の最終的な質問が何であるかは正確にはわかりませんが、あなたは合理的なデザインコンセプトを持っています。私があなたに持っている一つの質問は、あなたはどのような環境にいるのかということです。JavaEEコンテナを使用していますか、それとも単純なスタンドアロンアプリケーションを使用していますか?

コンテナ内にいる場合は、ワーカースレッドのプールを使用するよりも、メッセージドリブンBeanをJMSキューから処理する方が理にかなっています。

独自のコンテナ内にある場合は、スレッドプールを自分で管理する方が理にかなっています。そうは言っても、キューから作業を引き抜く個別のアプリケーションを実行することも検討します。これにより、より優れたスケーリングアーキテクチャが実現します。必要が生じた場合は、1つのキューを指すワーカーを増やしてマシンを追加できます。

于 2012-10-23T18:57:39.693 に答える
1

Apache camelまたはSpring Integrationを試して接続してください。これらは一種の統合フレームワークであり、Web サービスとのやり取りを容易にします。あなたがする必要があるのは、webservice 1 -> number cruncher -> web service 2 からのルートを定義することです。間に必要なルーティングと変換は、フレームワーク自体で処理できます。

クランチャーをキャメル プロセッサとして実装します。cruncher の並列化は、SEDAを介して実現できます。Camel には、このパターンのコンポーネントがあります。別の代替手段はAsyncProcessor です

最初に、camel のようなフレームワークの背後にある原則を見てください。彼らが作成する抽象化は、当面の問題に非常に関連しています。

于 2012-10-23T20:54:59.890 に答える