[JAVA] Stoppen Sie das erneute Senden vom Client zum Server

Einführung

In diesem Fall bin ich keine Partei, ich habe es gerade gehört, daher kann es viele mehrdeutige Ausdrücke geben.

Die Antwort vom Server hat lange gedauert

Ich habe von einem Client (Java) über LB eine Verbindung zum Server hergestellt, und die Antwort vom Server dauerte n Minuten. Es dauert n Minuten wegen der großen Datenmenge in der Anfrage, die in gewissem Sinne eine Spezifikation ist (ohne das Tsukkomi, dass es nicht cool ist). Ich wusste, dass es lange dauern würde, aber nach n Minuten traf dieselbe Anfrage auf dem Server ein. alt

Auf der Serverseite ist ein Fehler aufgetreten, da dieselbe Anforderung erneut gesendet wurde, aber ich wusste nicht, wer die obige Abbildung (2) erstellt hat. Es scheint, dass es auf der Client-Seite keine besonderen Ausnahmen gab.

Wer ärgert sich

Schuld daran war der Client Java. Die LB, die ich benutzte, sollte fin an die Client-Seite zurückgeben, wenn n Minuten lang keine Antwort erfolgte. In Java sollte es ohne Erlaubnis erneut gesendet werden. Wie in RFC2616 beschrieben, sagt Java auch, dass Sie es erneut senden sollten, wenn Sie keine Verbindung per POST herstellen können. Ich denke, daraus folgt. Außerdem habe ich diesmal Commons-HttpClient (3.x) verwendet, aber es scheint, dass ich die HTTPClient-Klasse von Java intern verwende.

JDK-Netzwerkeigenschaften

Es wurde in [hier] geschrieben (https://docs.oracle.com/javase/jp/8/docs/technotes/guides/net/properties.html).

sun.net.http.retryPost (Standard: true) Legt fest, ob nicht erfolgreiche HTTP-POST-Anforderungen automatisch an den Server erneut gesendet werden. In diesem Fall bedeutet "nicht erfolgreich", dass der Server keine gültige HTTP-Anforderung oder eine aufgetretene IOException gesendet hat.

Wenn die obige Eigenschaft auf false gesetzt ist, wird sie nicht erneut gesendet. Wenn jedoch am Ende n Minuten lang keine Antwort erfolgt, tritt ein Fehler auf, sodass dies keine grundlegende Lösung darstellt.

Recommended Posts

Stoppen Sie das erneute Senden vom Client zum Server
Migrieren Sie von Java zu Server Side Kotlin + Spring-Boot
Migration von der Eclipse-Serverfunktion (Tomcat) zum Einbetten von Tomcat
Migrieren Sie vom Transport Client zum Rest High Level Client
Minecraft BE Serverentwicklung von PHP nach Java
Änderungen von Java 8 zu Java 11
Summe von Java_1 bis 100
Migrieren Sie von JUnit 4 zu JUnit 5
So stellen Sie auf einem virtuellen Server eine Verbindung von Spring zu MySQL her (ungelöst)
Von Java zu Ruby !!
[Android] Hochladen von Bildern vom Terminal auf den Server
Beispiel zum Erstellen eines Einmalkennworts auf Server- und Clientseite
Überprüfen Sie die Kommunikation von Android zum node.js-Server mit Protokollpuffern
Von iBATIS zu MyBatis3 verschoben
Versuchen Sie Spring Boot von 0 bis 100.
Migration von Cobol nach JAVA
Wechseln Sie von slim3-gen zu slim3-gen-jsr269
Wechsel von AWS zu PaizaCloud
Neue Funktionen von Java7 bis Java8
Stellen Sie eine Verbindung von Java zu PostgreSQL her
Konvertieren Sie von ○ Monaten in ○ Jahre ○ Monate
So beenden Sie den Rails-Server
Umschreiben von Applet zu Anwendung
[Java] Server Client Communication 1 (unvollendet)
Wechseln Sie von SQLite3 zu PostgreSQL
Von ineffektivem Java zu effektivem Java
Einführung des gRPC-Clients in Schienen