1. 程式人生 > 實用技巧 >springcloud zuul 閘道器限流

springcloud zuul 閘道器限流

1.新增pom包

<dependency>
        <groupId>com.marcosbarbero.cloud</groupId>
        <artifactId>spring-cloud-zuul-ratelimit</artifactId>
        <version>2.0.6.RELEASE</version>
    </dependency>

2.啟動類

@SpringBootApplication
@EnableDiscoveryClient
@EnableZuulProxy
public 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秒內訪問第六次就報錯