<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
相似spring-core-4.3.4.RELEASE-sources.jar!/org/springframework/core/Ordered.javajava
/** * 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優先級最高git
RateLimitFilter
com/marcosbarbero/zuul/filters/pre/ratelimit/RateLimitFilter.javagithub
它的order爲-1,表示更先執行redis
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