0

我們正在嘗試覆蓋Zuul Edge Server內發生路由失敗並且沒有任何運氣時獲得的默認錯誤頁面。我們有路線設置,像這樣:設置Zuul路由失敗的默認回退

zuul: 
    routes: 
    ui: /** 
    api: /api/** 

默認SendErrorFilter試圖在默認情況下將請求發送到/錯誤,並且工作時UI服務啓動並運行,因爲它會成爲向上/錯誤。但問題是,當ui服務器關閉時,它會嘗試路由到/錯誤並失敗。然後,您的屏幕上出現嚴重的異常情況,表示存在轉發錯誤,並且沒有可用的後備功能。

com.netflix.zuul.exception.ZuulException: Forwarding error 
    org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.forward(RibbonRoutingFilter.java:140) 
    org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.run(RibbonRoutingFilter.java:105) 
    com.netflix.zuul.ZuulFilter.runFilter(ZuulFilter.java:112) 
    com.netflix.zuul.FilterProcessor.processZuulFilter(FilterProcessor.java:197) 
    com.netflix.zuul.FilterProcessor.runFilters(FilterProcessor.java:161) 
    com.netflix.zuul.FilterProcessor.route(FilterProcessor.java:120) 
    com.netflix.zuul.ZuulRunner.route(ZuulRunner.java:84) 
    com.netflix.zuul.http.ZuulServlet.route(ZuulServlet.java:111) 

Root Cause: 
    com.netflix.hystrix.exception.HystrixRuntimeException: uiRibbonCommand failed and no fallback available. 
    com.netflix.hystrix.AbstractCommand$16.call(AbstractCommand.java:807) 
    com.netflix.hystrix.AbstractCommand$16.call(AbstractCommand.java:794) 
    rx.internal.operators.OperatorOnErrorResumeNextViaFunction$1.onError(OperatorOnErrorResumeNextViaFunction.java:77) 
    rx.internal.operators.OperatorDoOnEach$1.onError(OperatorDoOnEach.java:70) 
    rx.internal.operators.OperatorDoOnEach$1.onError(OperatorDoOnEach.java:70) 
    rx.internal.operators.OperatorDoOnEach$1.onError(OperatorDoOnEach.java:70) 
    com.netflix.hystrix.AbstractCommand$DeprecatedOnFallbackHookApplication$1.onError(AbstractCommand.java:1516) 
    com.netflix.hystrix.AbstractCommand$FallbackHookApplication$1.onError(AbstractCommand.java:1406) 
    com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:314) 
    com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:306) 

如何設置Zuul中的默認回退來處理這些錯誤,以便用戶不會看到令人厭惡的異常?我已經看到這個open issue on spring-cloud-netflix (#250),但我會處理所有路由的默認回退,而不僅僅是特定的路由。什麼是正確的方法來做到這一點?

+1

您是否想要默認回退或自定義錯誤?因爲你映射了一個默認路由'/ **',所以你失去了'/ error'。你可以通過server.error.whitelabel.enabled = false關閉錯誤頁面。 http://docs.spring.io/spring-boot/docs/current/reference/html/howto-actuator.html#howto-customize-the-whitelabel-error-page – spencergibb

+0

我們想提供一個自定義的500錯誤html頁面。所以我認爲我們可以做一個回退,從邊緣服務器返回一個視圖,但不知道如何。 zuul不支持 –

+0

回退。你可以寫一個後過濾器。 – spencergibb

回答