Wir versuchen, Spring Cloud Netflix in die Produktionsumgebung zu bringen. Im Moment haben wir ein Problem mit der Fehlerbehandlung von Geschäftslogik.Spring Cloud Netflix: Remote-Service-Fehlerbehandlung mit Feign
Wir verwenden Feign als HTTP-REST-Client. Microservice A muss den Microservice B aufrufen, der in verschiedenen JVM (oder physischen Servern) bereitgestellt wird. Der Microservice B gibt möglicherweise eine Fehlernachricht zurück, die zum Geschäft gehört. Zum Beispiel muss A Auftragsinformationen von B abfragen, aber die Auftrags-ID existiert möglicherweise nicht, so dass B die Fehlermeldung zurückgeben muss, die A mitteilt, dass diese Bestellung nicht existiert. A hat if-else
Urteil aus der Rückmeldung zu tun, um zu bestimmen, ob es erorrs ist, dann wird Code wie der folgende Schnipsel sein:
//remoteServiceA is an interface annotated with @FeignClient
resultA = remoteServiceA.foo();
if (resultA.hasError) {
} else {
}
resultB = remoteServiceB.foo();
if (resultB.hasError) {
} else {
}
// ... ...
Es gibt so viele if-else
, so dass es nicht genug anmutig ist. Was wir wollen ist remoteServieA.foo()
kann eine selbst definierte Laufzeit Ausnahme wie OrderNotExistException
werfen. Irgendeine Idee, um dieses Ziel zu erreichen?
Im Sinne von REST-APIs sollte der zurückgegebene HTTP-Fehlercode selbsterklärend sein. Wenn Sie also nach einem Auftrag (einer Ressource) suchen und einen 404 erhalten, bedeutet dies "Ressource nicht gefunden", was "Auftrag nicht gefunden" ist. – cherit