spring cloud zuul配置詳解
阿新 • • 發佈:2018-12-08
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