Zuul bietet Filer- und Router -Funktionen im Springcloud -Microservice -System, das ein unverzichtbarer Bestandteil von Mikrodiensten ist. Zusätzlich zur Standardimplementierung von Filer kann es auch die Autorisierung, die aktuelle Begrenzung, die Sicherheitsüberprüfung usw. anpassen, und der Router kann Nginx Reverse Proxy vollständig ersetzen. Die Zubehandlung von Zuul -Ausnahme erfolgt von SendErrorFilter.
Während unseres Bewerbungsprozesses haben wir festgestellt, dass es zwei Probleme gibt, die nicht sehr freundlich sind, den Standardausnahmefilter zu verwenden:
1.. Es ist unmöglich, schnell festzustellen, ob der Service -Anforderungsroute abgestimmt ist oder es keine verfügbaren Knoten gibt. Wenn ein Fehler auftritt, können Sie das Protokoll nur anzeigen und es über den Stapel finden.
2. Mit benutzerdefinierten Antwortpaketformaten wie {code:500,msg:”xx error”} -Format nicht kompatibel.
Als nächstes diskutieren wir, wie Sie die Ausnahmeregelung anpassen, Ausnahme -Eingabeaufforderungsinformationen anpassen usw. anpassen.
Zunächst müssen wir den Standard -SendErrorFilter deaktivieren. Der Beamte hat die Switch -Konfiguration bereitgestellt, sodass Sie sie direkt konfigurieren können.
Zuul.Senderrorfilter.post.Disable = true
Benutzerdefinierte Fehlerfilter, ich werde hier nicht viel sagen, poste einfach den Code
public class errorFilter erweitert Zuulfilter {private statische String -String error_status_code_key = "error.status_code"; private logger log = loggerFactory.getLogger (ERRORFILTER.CLASS); public static Final String default_err_msg = "Das System ist beschäftigt, bitte versuchen Sie es später erneut"; @Override public String filterType () {return "post"; } @Override public int filterOrder () {return 0; } @Override public boolean sollteFilter () {requestContext ctx = requestContext.getCurrentContext (); return ctx.containsKey (ERROR_STATUS_CODE_KEY); } @Override public Object run () {requestContext ctx = requestContext.getCurrentContext (); try {httpServletRequest request = ctx.getRequest (); int statuscode = (Integer) ctx.get (error_status_code_key); String message = (string) ctx.get ("error.message"); if (ctx.containsKey ("error.exception")) {throwable e = (exception) ctx.get ("error.exception"); Throwable Re = getoriginexception (e); if (re instanceof java.net.connectException) {message = "Real Service Connection abgelehnt"; log.warn ("uri: {}, error: {}", request.getRequesturi (), re.getMessage ()); } else if (re instanceof java.net.sockettimeoutException) {message = "Real Service Timeout"; log.warn ("uri: {}, error: {}", request.getRequesturi (), re.getMessage ()); } else if (re instanceof com.netflix.client.clientException) {message = re.getMessage (); log.warn ("uri: {}, error: {}", request.getRequesturi (), re.getMessage ()); } else {log.warn ("Fehler während des Filterens", e); }} if (stringutils.isblank (message)) message = default_err_msg; request.setAttribute ("javax.servlet.error.status_code", statuscode); Request.SetAttribute ("javax.servlet.Error.Message", Nachricht); Webutils.Responseoutjson (ctx.getResponse (), jsonutils.tojson (neue WrapperResponse <> (StatusCode, Message))); } catch (Ausnahme e) {String error = "Fehler während der Filterung [ERRORFILTER]"; log.Error (Fehler, e); Webutils.Responseoutjson (ctx.getResponse (), jsonutils.tojson (neue WrapperResponse <> (500, Fehler))); } return null; } private throwable getoriginexception (throwable e) {e = e.getCause (); while (e.getCause ()! = null) {e = e.getCause (); } return e; }}Registrieren Sie schließlich unseren benutzerdefinierten Fehlerfilter
@Bean public errorFilter ERRAGEFILTER () {Neue ERRORFILTER () zurückgeben;}Zusammenfassen
Das obige ist die implementierende Methode für die Spring Cloud Zuul Custom Unified Exception Device Device, die Ihnen vom Editor vorgestellt wurde. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird Ihnen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!