spring-cloud-zuul-ratelimit是和zuul整合提供分佈式限流策略的擴展,只需在yaml中配置幾行配置,就可以使應用支持限流git
<dependency> <groupId>com.marcosbarbero.cloud</groupId> <artifactId>spring-cloud-zuul-ratelimit</artifactId> <version>1.3.4.RELEASE</version> </dependency>
//默認實現 public String key(final HttpServletRequest request, final Route route, final RateLimitProperties.Policy policy) { final List<Type> types = policy.getType(); final StringJoiner joiner = new StringJoiner(":"); joiner.add(properties.getKeyPrefix()); if (route != null) { joiner.add(route.getId()); } if (!types.isEmpty()) { if (types.contains(Type.URL) && route != null) { joiner.add(route.getPath()); } if (types.contains(Type.ORIGIN)) { joiner.add(getRemoteAddr(request)); } // 這個結合文末總結。 if (types.contains(Type.USER)) { joiner.add(request.getUserPrincipal() != null ? request.getUserPrincipal().getName() : ANONYMOUS_USER); } } return joiner.toString(); }
zuul: ratelimit: key-prefix: your-prefix enabled: true repository: REDIS behind-proxy: true policies: myServiceId: limit: 10 quota: 20 refresh-interval: 30 type: - user
以上配置意思是:30秒內容許10個訪問,而且要求總請求時間小於20秒github
yaml配置:spring
zuul: ratelimit: key-prefix: pig-ratelimite enabled: true repository: REDIS behind-proxy: true policies: pig-admin-service: limit: 2 quota: 1 refresh-interval: 3
動態圖 ↓↓↓↓↓ 數據庫
Redis 中數據結構 注意紅色字體安全