2011-07-08 22 views
0

私はアプリケーションを設計していて、どのように動作するべきか、そして私が使うことができるヒントなどについていくつかの調査をしています。別のWebサービスを使用するWebサービスに関するアドバイス

私は、クライアントプログラムは、私のWebサービスを消費

6. Tomcat上で実行されているミドルウェアのWebサービスを開発する必要があります。

私のウェブサービスは、クライアントからの情報に基づいて、多くの検索を10回実行する必要があります。これらの検索はサードパーティのWebサービスを使用しています。サードパーティはJavaスタブクラスを提供します。

Can /各スレッドが作成され、検索に使用され、結果が照合されてクライアントに返されるように、Webサービスをマルチスレッドにする必要がありますか?

検索は約完了するまでにしばらく時間がかかることができますすべてのアドバイスをありがたく受け取られる

を200-500ms、

答えて

0

私はあなたのニーズを正確に何であるかについてのビット不確かです。検索は並行して実行できますか?そうであれば、それらを実行するためにマルチスレッドを使用することは悪い考えではないかもしれません。

私が取り組んでいるアプリケーションでは、長時間の検索が別のスレッドで実行されるため、他の処理を続行できるようになり、結果がクライアントに返されます。

問題はありません。私たちはTomcat 6で動作し、正常に動作します。明らかに、マルチスレッドの通常の注意事項が当てはまりますが、Java 6 java.util.concurrentライブラリを使用しています。これは本当に便利です。

0

いくつかのバックエンドクエリを並行して実行すると、潜在的な利点があるようですので、何らかのマルチスレッドが良い考えのようです。

私に起こるいくつかの問題があります。

  1. は、Java EEコンテナ内のスレッドの直接の産卵が一般的にお奨めされていない - のJava EEコンテナは、そのコントロールになりたい - ので、具体的がありますJava EEの世界でこれを行うためのサポートされているAPIです(このトピックについてはthis answerを参照してください)。最近、TomcatがこのようなAPIをサポートしているかどうかは分かりません。
  2. あなたは壊れた反応を遅らせるためには良い戦略が必要です。あなたが8つの回答のうち7つを持っていて、8番目が非常に長い時間を要すると思われる場合は、迅速な部分的回答をする方が良いです。この最前線について考えるのがベストです。
  3. これは、ある種の「noticebaord」アプローチを使用し、要求を送信し、中間結果を収集するために後で戻ってきて、より完全な結果を収集するために後で戻って来る方が良いです。
  4. 一部のバックエンドシステムは、同じソースからの過度の要求に悪影響を与える場合があります。リクエストの頻度を「社交的」にしたり、ブラックリストポリシーを回避したりする必要があります。