1. 程式人生 > >spring cloud zuul配置詳解

spring cloud zuul配置詳解

spring cloud zuul配置詳解

zuul在spring cloud中作為閘道器存在,主要負責請求的分發,下面詳細講解zuul的所有核心配置(如有不對之處請各位大佬在評論指出):

zuul:
  # 是否開啟重試,預設為false
  # 注意使用此功能需要引入依賴,並且需要配合最下面的ribbon配置一起使用
  #        <dependency>
  #          <groupId>org.springframework.retry</groupId>
  #         <artifactId>spring-retry</artifactId>
# </dependency> retryable: false # 設定全域性訪問的字首,配置之後所有請求字首需要加上/api prefix: /api # 配置該屬性將會禁止header中的某些屬性向下傳遞,預設為"Cookie", "Set-Cookie", "Authorization" # 其原始碼在PreDecorationFilter.run()中體現,其原理主要是將配置項加入下面的ignored-headers而已 sensitive-headers: - Cookie - Set-Cookie - Authorization -
token # 忽略請求頭中的某些屬性,具體實現在構建ProxyRequestHelper.buildZuulRequestHeaders(HttpServletRequest request) 中體現, # 會根據配置的ignored-headers排除掉忽略的header然後重新構造一個header供ribbon使用 ignored-headers: - token # 此屬性只會對SimpleHostRoutingFilter生效,RibbonRoutingFilter使用的是ribbon的配置 host: # 最大連線數,預設為200 max-total-connections
: 200 # 單個路由可以使用的最大連線數,預設為20 max-per-route-connections: 20 # http client中從connection pool中獲得一個connection的超時時間,預設為-1,不超時 connection-request-timeout-millis: -1 # 連線建立的超時時間;,預設為2000ms connect-timeout-millis: 2000 # 響應超時時間,預設為10000ms socket-timeout-millis: 10000 # 路由規則 routes: # 使用者自定義一個名稱,內部是一個Map<String, ZuulRoute> user-server: # 需要攔截後轉發請求的地址,支援萬用字元匹配,不配置預設為/user-server/** path: /user-server/** # spring cloud服務id,不配預設為上面自定義的名稱 serverId: user-server # 是否支援上面的prefix,預設為true,設為false訪問該服務字首不需要/api stripPrefix: true # 將請求傳送到指定的伺服器,不會走ribbon、hystrix,正常請求是走RibbonRoutingFilter,此請求會走SimpleHostRoutingFilter url: http://localhost:9000 # 和全域性配置作用一樣,優先順序高於全域性配置 sensitive-headers: - Cookie - Set-Cookie - Authorization # 是否啟用自定義配置,預設為false,初始化時會根據sensitive-headers的長度來判斷,長度大於0則為true custom-sensitive-headers: false # 可配置THREAD(執行緒池模式), SEMAPHORE(訊號量模式),預設為SEMAPHORE # 此功能是基於hystrix實現,將請求包裝為一個HystrixCommond,hystrix內部自身實現了熔斷、隔離等機制 ribbonIsolationStrategy: SEMAPHORE # 可以通過這個配置控制所有服務的訊號量,預設為100,這裡指的是每個服務都是100不是所有服務加起來為100 semaphore: maxSemaphores: 100 # 單獨配置每個服務的訊號量,不配置預設為100 eureka: # 使用者自定義一個名稱 user-server: # 訊號量模式 semaphore: # 最大訪問量,預設為全域性配置的值也就是100,單獨配置的優先順序高於全域性配置 # 此配置的原始碼在AbstractRibbonCommand.getSetter(final String commandKey,ZuulProperties zuulProperties, IClientConfig config)中被使用 maxSemaphores: 100 # ribbon配置,ribbon的初始化原始碼在RibbonClientConfiguration.ribbonClientConfig() # 核心程式碼為config.loadProperties(this.name);這句程式碼載入了ribbon的配置 # 重試是針對在eureka登錄檔中能夠獲取到服務對應的例項然後發起http請求失敗時生效,如果根本無法獲取到服務例項則會直接丟擲異常 ribbon: # 下面三個引數在原始碼DefaultLoadBalancerRetryHandler的構造方法中被使用 # 構造方法:public DefaultLoadBalancerRetryHandler(IClientConfig clientConfig) # 是否所有請求都啟用重試機制,預設為false,原始碼中發現預設的時候只支援的是GET請求,如果配置為true支援所有請求 # 原始碼:return HttpMethod.GET == method || lbContext.isOkToRetryOnAllOperations(); # 重試核心原始碼在RetryTemplate.doExecute(RetryCallback<T, E> retryCallback,RecoveryCallback<T> recoveryCallback, RetryState state) # 重試的原理如下圖所示,N代表第一次請求,R代表重試 # 第一種情況MaxAutoRetries=1,MaxAutoRetriesNextServer=1,總請求次數為4次 # NR NR # 第二種情況MaxAutoRetries=2,MaxAutoRetriesNextServer=1,總請求次數為6次 # NRR NRR # 第三種情況MaxAutoRetries=1,MaxAutoRetriesNextServer=2,總請求次數為6次 # NR NR NR # 第四種情況MaxAutoRetries=2,MaxAutoRetriesNextServer=2,總請求次數為9次 # NRR NRR NRR OkToRetryOnAllOperations: true # 當前例項重試次數,預設為0 MaxAutoRetries: 1 # 切換例項重試次數,預設為1 MaxAutoRetriesNextServer: 2