轉自:https://blog.csdn.net/qq_29233293/article/details/84891865
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