Entschuldigung: Ich habe keinen einfachen Testfall, der dieses Problem reproduziert, da es sehr zeitweise passiert. Ich wäre jedoch sehr dankbar für einige Hilfe, wie Sie überhaupt mit der Diagnose beginnen können.Jersey-Antwort mit falschen Daten
Ich habe einen Jersey-Server läuft auf Tomcat.
Wenn der Client eine Anforderung sendet, wird manchmal eine Antwort von einer völlig anderen Anforderung mit der richtigen Antwort gemischt.
Die "richtige" Anfrage kann von jeder Art sein, aber die "schlechte" Antwort, die eingemischt wird, kommt immer von einem SSE-Stream (EventOutput) oder einer AsyncResponse.
Zum Beispiel ist dies die Ausgabe von einem Client durch eine normale Anforderung empfangen:
event: message_sent
id: 1
data: {"value":"hello world"}
{"event-id":"13"}event: message_sent
id: 2
data: {"value":"hello world"}
Die echte Antwort {"event-id":"13"}
vorhanden ist ... aber umgibt, dass es zwei fehlerhafte SSE Ereignisse.
Die Methode, um diese Anforderung zu verarbeiten gibt einfach:
return Response.created(uri).entity(eventId).build();
So verstehe ich nicht an, die der unerwünschte Datenpunkt (gesendet wird, es sei denn Response.created()
wird ein Antwortobjekt zurückkehrt, die bereits für eine SSE verwendet worden waren, Strom).
Die Serverprotokolle zeigen immer die korrekte Ausgabe an. Wir wissen jedoch, dass der Client keinen Fehler hat, da wir einen Paket-Sniffer verwendet haben, um zu bestätigen, dass die Antworten fehlerhaft sind.
Hinweise:
- Für SSE-Streams, überprüfe ich immer, dass die EventOutput nicht geschlossen ist, bevor
- auf sie zu schreiben Wenn zu
AsyncResponse
Objekte zu schreiben, überprüfe ichisSuspended()
immer an erster Stelle (und sie sind mit der injizierte@Suspended
Annotation)
Noch einmal, alle Hinweise oder Hinweise wären so eine große Hilfe. Mir sind die Ideen ausgegangen!