Ich stoße auf ein zyklisches Fehlermuster in einer Spring Boot-Anwendung, die einen Feign-Client für die Kommunikation zwischen Diensten verwendet. Dieses Problem tritt insbesondere bei geplanten Aufgaben auf, die in Abständen von einer Minute HTTP-POST-Anfragen stellen. Das beobachtete Verhalten ist deutlich zyklisch: Wenn die Anwendung gestartet wird und die erste geplante Anfrage einen HTTP 400-Fehler (Bad Request) zurückgibt, geben alle nachfolgenden Anfragen in dieser Sitzung weiterhin HTTP 400-Fehler zurück. Wenn ich den Prozess abbreche und die Anwendung neu starte, kehrt sich das Verhalten um – dieses Mal sind alle Anfragen ohne Fehler erfolgreich. Dieses Muster wiederholt sich jedes Mal, wenn die Anwendung neu gestartet wird: Eine Sitzung, die mit Fehlern beginnt, weist ständig Fehler auf, und eine Sitzung, die ordnungsgemäß gestartet wird, wird durchgehend korrekt ausgeführt.
Dieses zyklische Problem bleibt bestehen, ohne dass Änderungen daran vorgenommen werden der Server, der für die konsistente Verarbeitung von Anfragen konfiguriert ist.
Beispielszenario:
Starten Sie die Anwendung – die erste Anfrage gibt HTTP 400 zurück.
Alle folgenden Anfragen in dieser Sitzung geben auch HTTP zurück 400.
Beenden Sie den Anwendungsprozess und starten Sie neu.
Diesmal ist die erste Anfrage nach dem Neustart erfolgreich.
Alle nachfolgenden Anfragen in dieser neuen Sitzung sind erfolgreich.
Beenden Sie den Prozess und starten Sie ihn neu. Das Problem aus Schritt 1 wiederholt sich.
Hier ist die vereinfachte Version meines Client- und Servercodes, der an der Kommunikation beteiligt ist:
@FeignClient(name = "withdraw-feign-client", url = "127.0.0.1:8081")
public interface WithdrawFeignClient {
@PostMapping("/withdraw/pullWithdraw")
@ResponseBody
CommonResult pullWithdraw(@RequestBody RequestData req);
}
RequestData requestData = new RequestData();
requestData.setChain(Chain.FIL);
requestData.setDataString("123");
requestData.setData(pullWithdrawReq);
CommonResult result = withdrawFeignClient.pullWithdraw(requestData);
@PostMapping("/pullWithdraw")
public CommonResult pullWithdraw(@RequestBody RequestData req) {
String k = formatParma(req);
PullWithdrawReq withdrawReq = JSONObject.parseObject(k, PullWithdrawReq.class);
checkSign(withdrawReq);
return CommonResult.success(withdrawService.pullWithdraw(req.getChain().name(), withdrawReq));
}
Zyklische HTTP 400-Fehler in der Spring Boot-Anwendung, die den Feign-Client für geplante Aufgaben verwendet ⇐ Java
-
- Similar Topics
- Replies
- Views
- Last post