Zuul網關 @EnableZuulProxy 和 @EnableZuulServer 的區別


1. @EnableZuulProxy 

 

 

 

 

  

2. @EnableZuulServer 

 

 

 

 3.解釋

1)@EnableZuulProxy簡單理解為@EnableZuulServer的增強版,

當Zuul與Eureka、Ribbon等組件配合使用時,我們使用@EnableZuulProxy。

 

pre類型過濾器

  (1) ServletDetectionFilter:該過濾器用於檢查請求是否通過Spring Dispatcher。檢查后,通過isDispatcherServletRequest設置布爾值。

  (2) FormBodyWrapperFilter:解析表單數據,並為請求重新編碼。

  (3) DebugFilter:顧名思義,調試用的過濾器,可以通過zuul.debug.request=true,或在請求時,加上debug=true的參數,例如$ZUUL_HOST:ZUUL_PORT/path?debug=true開啟

  該過濾器。這樣,該過濾器就會把RequestContext.setDebugRouting()、RequestContext.setDebugRequest()設為true。

 

route類型過濾器

  SendForwardFilter:該過濾器使用Servlet RequestDispatcher轉發請求,轉發位置存儲在RequestContext.getCurrentContext().get("forward.to")中。可以將路由設置成:

  1. zuul: 
  2. routes: 
  3. abc:  
  4. path: /abc/** 
  5. url: forward:/abc 

  然后訪問$ZUUL_HOST:ZUUL_PORT/abc,觀察該過濾器的執行過程。

 

post類型過濾器

  SendResponseFilter:將Zuul所代理的微服務的響應寫入當前響應。

 

error類型過濾器

  SendErrorFilter:如果RequestContext.getThrowable()不為null,那么默認就會轉發到/error,也可以設置error.path屬性修改默認的轉發路徑。

 

 

2)如果使用注解@EnableZuulProxy,那么除上述過濾器之外,Spring Cloud還會增加以下過濾器:

pre類型過濾器

  PreDecorationFilter:該過濾器根據提供的RouteLocator確定路由到的地址,以及怎樣去路由。該路由器也可為后端請求設置各種代理相關的header。

 

route類型過濾器

  (1) RibbonRoutingFilter:該過濾器使用Ribbon,Hystrix和可插拔的HTTP客戶端發送請求。serviceId在RequestContext.getCurrentContext().get("serviceId")中。

  該過濾器可使用不同的HTTP客戶端,例如

  Apache HttpClient:默認的HTTP客戶端

  SquareupOkHttpClient v3:如需使用該客戶端,需保證com.squareup.okhttp3的依賴在classpath中,並設置ribbon.okhttp.enabled = true。

  Netflix Ribbon HTTP client:設置ribbon.restclient.enabled = true即可啟用該HTTP客戶端。需要注意的是,該客戶端有一定限制,例如不支持PATCH方法,

  另外,它有內置的重試機制。

  (2) SimpleHostRoutingFilter:該過濾器通過Apache HttpClient向指定的URL發送請求。URL在RequestContext.getRouteHost()中。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM