springcloud zuul 閘道器限流
阿新 • • 發佈:2020-09-12
1.新增pom包
<dependency> <groupId>com.marcosbarbero.cloud</groupId> <artifactId>spring-cloud-zuul-ratelimit</artifactId> <version>2.0.6.RELEASE</version> </dependency>
2.啟動類
@SpringBootApplication @EnableDiscoveryClient @EnableZuulProxypublic class ZuulServerApplication { public static void main(String[] args) { SpringApplication.run(ZuulServerApplication.class, args); } }
3.yml配置
############################## # 閘道器配置 ############################# server: port: 8080 spring: application: name: cmtt-gateway desc: 系統中心配置 feign: hystrix: enabled:true #feginClient 熔斷超時配置 hystrix: command: default: execution: isolation: thread: timeoutInMilliseconds: 60000 #ribbon超時和重試配置【重試次數=MaxAutoRetries + MaxAutoRetriesNextServer + (MaxAutoRetries * MaxAutoRetriesNextServer)】 # 熔斷時間與ribbon超時關係: # 重試時間 =(MaxAutoRetries+MaxAutoRetriesNextServer+MaxAutoRetriesNextServer*MaxAutoRetries)*ReadTimeout+網路響應時間 # 重試時間<timeoutInMilliseconds ribbon: OkToRetryOnAllOperations: false #是否對所有請求進行重試 MaxAutoRetries: 0 #對當前例項的重試次數,預設0 MaxAutoRetriesNextServer: 0 #對切換例項的重試次數,預設1 ReadTimeout: 60000 #負載均衡超時時間,預設值5000 ConnectTimeout: 60000 #ribbon請求連線的超時時間,預設值2000 zuul: host: socket-timeout-millis: 88000 connect-timeout-millis: 88000 routes: auth: path: /biz/sys/** serviceId: cmtt-biz-sys sensitive-headers: Access-Control-Allow-Origin ignored-headers: Access-Control-Allow-Origin,H-APP-Id,Access-Token,APPToken pmis: path: /biz/pmis/** serviceId: cmtt-biz-project sensitive-headers: Access-Control-Allow-Origin ignored-headers: Access-Control-Allow-Origin,H-APP-Id,Access-Token,APPToken fms: path: /biz/fms/** serviceId: cmtt-biz-fms ratelimit: key-prefix: springcloud-book #按粒度拆分的臨時變數key字首 enabled: true #啟用開關 repository: IN_MEMORY #key儲存型別,預設是IN_MEMORY本地記憶體,此外還有多種形式 behind-proxy: true #表示代理之後 default-policy: #全侷限流策略,可單獨細化到服務粒度 limit: 2 #在一個單位時間視窗的請求數量 quota: 1 #在一個單位時間視窗的請求時間限制 refresh-interval: 3 #單位時間視窗 type: - user #可指定使用者粒度 - origin #可指定客戶端地址粒度 - url #可指定url粒度
全域性開啟了限流,策略是,3秒內訪問不允許超過 2 次,並且這 2 次請求要小於 1 秒。
下面是針對某個服務
############################## # 閘道器配置 ############################# server: port: 8080 spring: application: name: cmtt-gateway desc: 系統中心配置 feign: hystrix: enabled: true #feginClient 熔斷超時配置 hystrix: command: default: execution: isolation: thread: timeoutInMilliseconds: 60000 #ribbon超時和重試配置【重試次數=MaxAutoRetries + MaxAutoRetriesNextServer + (MaxAutoRetries * MaxAutoRetriesNextServer)】 # 熔斷時間與ribbon超時關係: # 重試時間 =(MaxAutoRetries+MaxAutoRetriesNextServer+MaxAutoRetriesNextServer*MaxAutoRetries)*ReadTimeout+網路響應時間 # 重試時間 <timeoutInMilliseconds ribbon: OkToRetryOnAllOperations: false #是否對所有請求進行重試 MaxAutoRetries: 0 #對當前例項的重試次數,預設0 MaxAutoRetriesNextServer: 0 #對切換例項的重試次數,預設1 ReadTimeout: 60000 #負載均衡超時時間,預設值5000 ConnectTimeout: 60000 #ribbon請求連線的超時時間,預設值2000 zuul: host: socket-timeout-millis: 88000 connect-timeout-millis: 88000 routes: auth: path: /biz/sys/** serviceId: cmtt-biz-sys sensitive-headers: Access-Control-Allow-Origin ignored-headers: Access-Control-Allow-Origin,H-APP-Id,Access-Token,APPToken pmis: path: /biz/pmis/** serviceId: cmtt-biz-project sensitive-headers: Access-Control-Allow-Origin ignored-headers: Access-Control-Allow-Origin,H-APP-Id,Access-Token,APPToken fms: path: /biz/fms/** serviceId: cmtt-biz-fms ratelimit: key-prefix: springcloud-book #按粒度拆分的臨時變數key字首 enabled: true #啟用開關 repository: IN_MEMORY #key儲存型別,預設是IN_MEMORY本地記憶體,此外還有多種形式 behind-proxy: true #表示代理之後 default-policy: #全侷限流策略,可單獨細化到服務粒度 limit: 2 #在一個單位時間視窗的請求數量 quota: 1 #在一個單位時間視窗的請求時間限制 refresh-interval: 3 #單位時間視窗 type: - user #可指定使用者粒度 - origin #可指定客戶端地址粒度 - url #可指定url粒度 policies: cmtt-biz-sys: limit: 5 quota: 5 efresh-interval: 10
policies 配置,含義是我們對 client-a 服務進行特殊限流配置,10秒內請求數量不得大於 5 次,這 5 次請求總時長不能大於 5秒,其他服務對限流策略還是按照 上面預設的,不衝突
最後啟動測試,10秒內訪問第六次就報錯