maven

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

配置

product:
  ribbon:
    listOfServers: 192.168.99.100:8080
zuul:
  routes:
    product:
      path: /product/**
      stripPrefix: false
  ratelimit:
    enabled: true #default false
    behind-proxy: true #default false
    policies:
      product:
        limit: 10
        refresh-interval: 120 #60 default value (in seconds)
        type: #optional
          - user
          - origin
          - url
spring:
  redis:
    timeout: 10
    database: 0
    host: 192.168.99.100
    port: 6379
    pool:
      max-active: 8
      max-idle: 8
      max-wait: -1
      min-idle: 0

filterOrder

类似spring-core-4.3.4.RELEASE-sources.jar!/org/springframework/core/Ordered.java

    /**
     * Useful constant for the highest precedence value.
     * @see java.lang.Integer#MIN_VALUE
     */
    int HIGHEST_PRECEDENCE = Integer.MIN_VALUE;

    /**
     * Useful constant for the lowest precedence value.
     * @see java.lang.Integer#MAX_VALUE
     */
    int LOWEST_PRECEDENCE = Integer.MAX_VALUE;

默认越小优先级越高,排查负数的情况下,0优先级最高

RateLimitFilter
com/marcosbarbero/zuul/filters/pre/ratelimit/RateLimitFilter.java

它的order为-1,表示更先执行

测试

wrk -t12 -c100 -d10s -T30s  --latency http://localhost:8080/product

限流结果:

workspace curl -i http://localhost:8080/product\?debug=true
HTTP/1.1 429
X-Application-Context: application
X-RateLimit-Limit: 10
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 13000
Content-Length: 0
Date: Sun, 09 Apr 2017 06:44:02 GMT

doc


codecraft
11.9k 声望2k 粉丝

当一个代码的工匠回首往事时,不因虚度年华而悔恨,也不因碌碌无为而羞愧,这样,当他老的时候,可以很自豪告诉世人,我曾经将代码注入生命去打造互联网的浪潮之巅,那是个很疯狂的时代,我在一波波的浪潮上留下...