gateway网关集成Sentinel后,控制台默认限流是根据服务进行的,默认为资源名为ReactiveCompositeDiscoveryClient_服务名称,如下图:
所以限流都是根据整个服务进行的,那么如何像单机一样根据url分组限流呢;有两种方式:
1.通过初始化配置:
@Configurationpublic 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