带spring云网关的redis速率限制,按分钟限制

jqjz2hbq  于 2021-07-23  发布在  Java
关注(0)|答案(0)|浏览(195)

我需要限制每分钟的请求数。我还没有找到任何方法来使用SpringCloudGateway+redis。以下是当前的建议mentation:image implementation

private void builderRouter(CustomRouterLocatorDto customRouter) {
    customRouter.getBuilder().route(r -> r
            .path(customRouter.getPath())
            .filters(f -> {
                if(!customRouter.getRewritePath().equals("/"))
                    f.rewritePath(customRouter.getRewritePath() + "(?<segment>/?.*)", "$\\{segment}");

                f.circuitBreaker(c -> c.setName("cbServicies").setFallbackUri("forward:/offlineservicies/down"));

                if(customRouter.isEnableRateLimiter()) {
                    f.requestRateLimiter()
                            .rateLimiter(RedisRateLimiter.class, rl ->
                                    rl.setBurstCapacity(customRouter.getBurstCapacity())
                                        .setReplenishRate(customRouter.getReplenishRate())
                            ).and();
                }

                return f;
            })
            .metadata(RouteMetadataUtils.RESPONSE_TIMEOUT_ATTR, RESPONSE_TIMEOUT_ATTR_VALUE_MILLIS)
            .metadata(RouteMetadataUtils.CONNECT_TIMEOUT_ATTR, CONNECT_TIMEOUT_ATTR_VALUE_MILLIS)
            .uri(customRouter.getUriType() + customRouter.getServiceName())
    );
}

setburstcapacity(customrouter.getburstcapacity())setRefunderRate(customrouter.getRefunderRate())
两者仅在几秒钟内运行。示例:在同一秒钟内有20个请求。
一分钟内我需要20个请求。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题