下記を参照してください。java実装:Webサービスをポーリングする
要件:Webサービスをポーリングします。 max_timeout、polling_intervalのポーリングに関する2つの重要なパラメータが、プロパティファイルで設定されます。全体的な目的は、全体的な時間を費やして回答を得ることです。 max_timeoutで応答を受け取った場合、クライアントに応答を返すことができます。それ以外の場合は、操作が失敗したというエラーが表示されます。
以下は、私が書いたコードスニペットです。
int maxTimeOut = 10;
int interval = 2;
int iterations = maxTimeOut/interval;
boolean success = false;
for (int i = 0; i < iterations; i++)
{
System.out.println("Number of iteration = " + i);
try
{
Thread.sleep(interval * 1000);
System.out.println("Waited for " + interval + " seconds");
success = getWSResponse(i);
System.out.println("CALL" + ((success) ? "SUCCESSFUL" : "FAIL"));
if(success) break;
}catch (InterruptedException ie)
{
System.out.println(ie.getMessage());
}
}
//Send the success flag to client
これがポーリングの適切な実装である場合は、私を修正してもらえますか?このコードでは、webservice呼び出しがすぐに返ってくることを前提としているとは少しは心配しています。これに2〜3秒かかる場合(通常はそうです)、POLLINGだけでmax_timeout以上を費やしています。どうすればこの問題を解決できますか?これ以上のアプローチはありませんか?
catch(InterruptedException ie){System.out.println(ie.getMessage()); } '...しないでください。ただそれを投げ直してください。{{new runtimeException(ie)} 'を投げてください。 – artbristol
あなたの提案に感謝してくれたartbristol。 SOPではなくRTEをスローするようにこのコードを変更します。 –