Netflix Feign - Propagiere Status und Ausnahme durch Microservices

9

Ich benutze Netflix Feign Aufruf einer Operation eines Microservice A an eine andere Operation eines Microservices B, der einen Code mit Spring Boot validiert.

Die Operation von Microservice B löst eine Ausnahme aus, wenn die Validierung schlecht war. Dann behandelte ich in den Microservices und gebe ein HttpStatus.UNPROCESSABLE_ENTITY (422) wie folgt zurück:

%Vor%

Also, wenn Microservice A in einer Schnittstelle als nächstes zu B aufruft:

%Vor%

und die Validierung schlägt fehl Es wird ein interner Fehler 500 mit der nächsten Nachricht zurückgegeben:

%Vor%

Aber ich muss dasselbe wie die Microservice-Operation B zurückgeben.

Was wären die besten Wege oder Techniken, um Status und Ausnahmen durch Microservices mit Netflix Feign zu propagieren?

    
Pau 05.08.2016, 09:46
quelle

4 Antworten

10

Sie könnten ein Feign ErrorDecoder

verwenden

Ссылка

Hier ist ein Beispiel

%Vor%

Um den ErrorDecoder im Frühling aufzunehmen, müssen Sie ihn auf den ApplicationContext setzen:

%Vor%     
Mathias Dpunkt 05.08.2016, 13:43
quelle
3

Shameless-Plug für eine kleine Bibliothek, die ich verwendet habe, die Reflektion verwendet, um geprüfte Ausnahmen (basierend auf einem Fehlercode, der im Hauptteil der Antwort zurückgegeben wird) dynamisch erneut auszulösen (und nicht aktiviert, wenn sie sich auf der Feign-Schnittstelle befinden).

Weitere Informationen zur Readme-Datei: Ссылка

    
jebeaudet 14.12.2016 19:12
quelle
0

Schreiben Sie Ihren benutzerdefinierten Exception Mapper und registrieren Sie ihn. Sie können Antworten anpassen.

Das vollständige Beispiel ist hier

%Vor%     
Tugrul 05.08.2016 13:48
quelle
0

Was wir tun, ist wie folgt:

Gemeinsame jar teilen, die Ausnahmen mit beiden Microservices enthält.

1.) In Microservices Eine Konvertierungs-Ausnahme in eine DTO-Klasse kann sagen, ErrorInfo. Diese enthält alle Attribute Ihrer benutzerdefinierten Ausnahme mit einem String exceptionType, der den Namen der Ausnahmeklasse enthält.

2.) Wenn es bei Microservice B empfangen wird, wird es von ErrorDecoder in Microservice B behandelt und es wird versucht, ein Ausnahmeobjekt von AusnahmeTyp wie folgt zu erstellen:

%Vor%     
asif malek 24.01.2018 15:29
quelle