0

今日は、理論的な質問があります (サンプル コードの書き方がわかりません)。

私のシステム アーキテクチャは次のようになりますClient <--> Web Service1 <--> query <--> Web Service2 <--> Server

私の会社では別の必要があるため、変更できません。

client問題は、にリクエストを送信し、オブジェクトをクエリに入れ、 WebService1常にクエリを監視し、何か新しいものがあるかどうかを確認するときの同期にあります。に戻る。WS1WS2ServerClient

にはServer、すべての要求の処理時間が同じではありません。クライアントからリクエストを取得し、1 つのセッション内でリクエストを送信する必要があります。Thread.sleepまたは、コードの実行を停止するあらゆる種類のメソッドは受け入れられません。

誰が私に何を使うべきかヒントを教えてもらえますか?

4

1 に答える 1

0

OK、キューとサーバー間の通信については忘れましょう。

  1. クライアントは、WS1 (同期通信) 経由でサーバー 1 に要求を送信します。
  2. サーバー 1 のプロセスがキューに書き込みます。
  3. サーバー 1 のプロセスは、キューからの応答を待ちます。この時点で、クライアントとの通信は同期的であるため、クライアントは待機する必要があります。どのように?Thread.sleep解決策です。

クライアントはどのくらい待つ必要がありますか? による:

  • サーバー 2 の頻度プロセスがキューを読み取る
  • WS2 経由でサーバー 1 の呼び出しサーバーにかかる時間
  • サーバーがリクエストを処理するのにかかる時間。
  • サーバー 1 の頻度プロセスは、サーバー 2 からの応答を探してキューを読み取ります

したがって、ループを使用できます。

  1. 待ち行列に答えを求める
  2. 答えがあれば、クライアントに応答します。そうでない場合、スレッドは待機する必要があります。ループが再び始まります。

ただし、クライアントをあまり待たせることはできません。次のようなことができます。

  1. 待機時間が最大時間を超えていませんか?はいの場合は、ループを中断し、クライアントに何かが間違っていると答えます。
  2. 待ち行列に答えを求める
  3. 答えがあれば、クライアントに応答します。そうでない場合、スレッドは待機する必要があります。ループが再び始まります。

キューからの応答があるまで実行するコードがないため、コードの実行を停止することを再検討する必要があると思います。とにかく、スリープの代替案をスレッド化するには、この質問を参照してください。

于 2012-11-23T12:36:35.947 に答える