栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

gateway集成阿里Sentinel后,控制台如何根据url动态限流

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

gateway集成阿里Sentinel后,控制台如何根据url动态限流

gateway网关集成Sentinel后,控制台默认限流是根据服务进行的,默认为资源名为ReactiveCompositeDiscoveryClient_服务名称,如下图:

所以限流都是根据整个服务进行的,那么如何像单机一样根据url分组限流呢;有两种方式:

1.通过初始化配置:
@Configuration
public class SentinelInitUrlConfig {

    @PostConstruct
    public void doInit() {
        loadApiDefinitions();
    }

    public void loadApiDefinitions() {
        Set apiDefinitions = GatewayApiDefinitionManager.getApiDefinitions();

        ApiDefinition api = new ApiDefinition("分组")
                .setPredicateItems(new HashSet() {{
                    add(new ApiPathPredicateItem().setPattern("/auth/*")
                            //参数值的匹配策略
                            // 精确匹配(PARAM_MATCH_STRATEGY_EXACT)
                            // 子串匹配(PARAM_MATCH_STRATEGY_CONTAINS)
                            // 正则匹配(PARAM_MATCH_STRATEGY_REGEX)
                            .setMatchStrategy(SentinelGatewayConstants.PARAM_MATCH_STRATEGY_EXACT));
                }});
        apiDefinitions.add(api);
        GatewayApiDefinitionManager.loadApiDefinitions(apiDefinitions);
    }
}
2.通过过滤器动态添加分组:
@Component
@Order(Integer.MIN_VALUE)
public class SentinelUrlFilter implements GlobalFilter {
    private Set uris = new CopyOnWriteArraySet<>();

    @Override
    public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        Route gatewayUrl = exchange.getRequiredAttribute(ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR);
        String uri = "/" + gatewayUrl.getUri().getHost() + exchange.getRequest().getURI().getPath();

        if (uris.add(uri)) {
            loadApiDefinitions(uri);
        }

        return chain.filter(exchange);
    }

    public void loadApiDefinitions(String uri) {

        Set apiDefinitions = GatewayApiDefinitionManager.getApiDefinitions();

        ApiDefinition api = new ApiDefinition(uri)
                .setPredicateItems(new HashSet() {{
                    add(new ApiPathPredicateItem().setPattern(uri)
                            .setMatchStrategy(SentinelGatewayConstants.PARAM_MATCH_STRATEGY_EXACT));
                }});
        apiDefinitions.add(api);
        GatewayApiDefinitionManager.loadApiDefinitions(apiDefinitions);
    }
}
更多关注 GaoY's Day

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/735789.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号