java-Implementierung : polling-a-web-service
Unten finden Sie meine Anforderung.
Voraussetzung : Umfrage a-web-service. Zwei entscheidende Parameter des polling max_timeout, polling_interval konfiguriert werden in properties-Datei. Hauptziel ist, zu verbringen, für eine Zeit von insgesamt in den Erhalt der Antwort. Wenn wir die Antwort mit in max_timeout, können wir Rückgabe der Antwort an den client. Sonst werden wir werfen eine Fehlermeldung, dass der Vorgang fehlgeschlagen ist.
Unten ist das code-snippet, das ich geschrieben habe.
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
Konnte Sie korrigieren Sie mich, wenn dies der ordnungsgemäßen Durchführung von polling. Ich bin wenig besorgt, dass dieser code geht davon aus, dass der webservice-Aufruf liefert in kürzester Zeit. Wenn dies dauert 2-3 Sekunden (normalerweise tut ), dann würden wir mehr ausgeben, als max_timeout insgesamt für POLLING allein. Wie könnten wir dieses Problem beheben. Gibt es einen besseren Ansatz als diesen.
catch (InterruptedException ie) { System.out.println(ie.getMessage()); }
... tun Sie das nicht. Nur rethrow es{ throw new RuntimeException(ie) }
- Dank artbristol für Ihren Vorschlag. Ich will diesen code ändern zu werfen RTE anstelle von SOP.
Du musst angemeldet sein, um einen Kommentar abzugeben.
können Sie kombinieren die Verwendung eines
ScheduledExecutorService
mit derHttpURLConnection
-Timeout poll in einer gegebenen Verzögerung und Abbruch der Aufgabe, wenn es dauert länger.Wenn polling bedeutet einfach nur, dass das webservice eingerichtet ist und ausgeführt wird, in deinem poll-code können Sie versuchen, die Verbindung zu dem webservice (mit connection timeout) .Wenn Sie erfolgreich eine Verbindung herstellen können, dies bedeutet, dass der webservice ist.
BEARBEITEN
Alternativ können Sie rufen Sie den webservice mit einem executor (siehe java.util.gleichzeitige.ExecutorService) in eine Aufgabe mit Zeitlimit und können entsprechend entscheiden. Beispiel :