Vor kurzem fand ich ein Problem bei der Synchronisierung von Daten. Nachdem ich Daten in den Hintergrund eingefügt hatte, habe ich sie mit anderen Abteilungen synchronisiert. Um es einfach auszudrücken, rufen Sie tatsächlich die von der andere Partei bereitgestellte Schnittstelle an und tätigen Sie HTTP -Anforderungsanrufe. Dann fand ich später ein Problem. Wenn eine HTTP -Anforderung angefordert wird, ist das Anfrage -Timeout, der Interrupt fehlgeschlagen und die IO -Ausnahme ist tatsächlich möglich. Wenn es normal ist, eine Webseite zu öffnen, ist es in Ordnung, aber wenn sie nicht geöffnet werden kann, schließen Sie sie oder die Seite zeigt Ihnen Informationen an. Synchronisation kann jedoch nicht durchgeführt werden. Sobald die Anfrage fehlschlägt, müssen die Daten korrekt synchronisiert werden. Heute ist mir klar, wie wichtig dieses Problem ist.
String httpurl = "https://www.baidu.com/s?ie=utf-8&tn=90594569_hao_pg&wd=1"; URL URL = NULL; HttpurlConnection httpconn = null; String result = ""; try {String address = httpurl; URL = neue URL (Adresse); httpconn = (httpurlConnection) url.openconnection (); // Eine URL -Verbindung kann für Eingabe und/oder Ausgabe verwendet werden. Setzen Sie das // doInput -Flag auf true, wenn Sie die URL -Verbindung für die Eingabe verwenden möchten, // Falsch, wenn nicht. Der Standard ist wahr. // URL -Verbindung kann zur Eingabe oder Ausgabe verwendet werden. Wenn Sie die Eingabe mit URL anschließen möchten, stellen Sie das DOInput -Tag auf True ein. // Eingabe und Ausgabe richten sich an Computer. Wenn Sie dies aus der Sicht eines Programmierers betrachten, werden Sie oft verwirrt. // Eingangseingangs- und Ausgangsausgabe, dann wird es dann nicht aus der Ausgabe gelesen oder von der Eingabe geschrieben? Im Gegenteil wird // Eingabeeingang in den Computer eingegeben und der Computer kann ihn lesen, sodass er aus der Eingabelese erfolgt, und die Ausgabe ist die Computerausgabe, die über Output -Write erfolgt. httpconn.setDooutput (false); // Wenn setDoInput (false), können Sie nicht lesen, wenn Sie aus urlConnection lesen möchten // nicht aus urlConnection lesen können, wenn doInput = false (setDoInput (true)) httpconn.setDoInput (true); // Die Zeitüberschreitungszeit der Verbindungseinrichtung und die Zeitüberschreitungszeit werden ebenfalls gelesen, httpconn.setConnectTimeout (6000000); httpconn.setReadtimeout (6000000); httpconn.setRequestMethod ("get"); httpconn.connect (); // den Statuscode int code = httpconn.getresponseCode () abrufen; System.out.println (Code); // HTTP Request Antwort BufferedReader Reader = New BufferedReader (neuer InputStreamReader (httpconn.getInputStream ())); Stringlinie; while ((line = reader.readline ())! = null) {result = result + line + "/n"; } System.out.println (Ergebnis); // IO schließen und leser verbinden.CLOSE (); httpconn.disconnect (); } catch (Ausnahme e) {log.Error (e); } endlich {if (httpconn! = null) httpconn.disconnect (); }Der Code scheint wenig geschrieben zu sein, und die Orte, an denen Ressourcen veröffentlicht werden sollten, werden ebenfalls veröffentlicht. Wenn Sie die Protokollausgabe anrufen sollten, werden Sie es auch aufrufen. Tatsächlich ist das Problem die Behandlung von Ausnahmen. Ich dachte, einige Dinge wurden zuvor wegen des Timeout -Problems mit Verbindungen nicht synchronisiert. Also habe ich speziell die SockettimeoutException -Ausnahme erwischt. Nachdem ich mich das Protokoll später angesehen hatte, stellte ich fest, dass es sich um ein Problem mit dem Server auf der Synchronisationsschnittstelle handelte und einen 502 -Fehler meldete. Tatsächlich ist die Ausnahme eine IO -Ausnahme.
Unabhängig von in diesem Fall müssen wir nach diesem Problem die Anfrage erneut senden und bestätigen, dass die andere Partei gemäß dem von der Schnittstelle zurückgegebenen Ergebnis synchronisiert wurde. Wenn es ein vorübergehendes Problem mit dem Server gibt, können wir ihn für einen kurzen Zeitraum pausieren und ihn dann erneut anfordern.
Die Methode, die in den Sinn kommt, ist also, dass das Intervall länger sein kann, da die Echtzeitanforderung der Synchronisation nicht hoch ist. Schleifen Sie dann den Faden und starten Sie jedes Mal zwischen 5 Minuten, bis das Ergebnis normal ist.
catch (Ausnahme e) {für (int i = 0; i <6; i ++) {Thread t = neuer Thread () {public void run () {get ();}}; t.start (); if (result.equals ("ok")) {break; } try {thread.sleep (300000); } catch (InterruptedException E2) {log.Error (e2); }} log.Error (e); }Das obige ist eine Zusammenstellung der Informationen zu Java httpurlConnection Timeout und IO -Ausnahmehandhabung. Wir werden in Zukunft weiterhin relevante Informationen hinzufügen. Vielen Dank für Ihre Unterstützung für diese Seite!