Java Code Examples for com.alibaba.csp.sentinel.adapter.gateway.common.rule.GatewayRuleManager#loadRules()

The following examples show how to use com.alibaba.csp.sentinel.adapter.gateway.common.rule.GatewayRuleManager#loadRules() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: SpringCloudGatewayParamParserTest.java    From Sentinel-Dashboard-Nacos with Apache License 2.0 6 votes vote down vote up
@Test
public void testParseParametersNoParamItem() {
    // Mock a request.
    ServerWebExchange exchange = mock(ServerWebExchange.class);
    // Prepare gateway rules.
    Set<GatewayFlowRule> rules = new HashSet<>();
    String routeId1 = "my_test_route_A";
    rules.add(new GatewayFlowRule(routeId1)
        .setCount(5)
        .setIntervalSec(1)
    );
    GatewayRuleManager.loadRules(rules);

    Object[] params = paramParser.parseParameterFor(routeId1, exchange,
        e -> e.getResourceMode() == 0);
    assertThat(params.length).isEqualTo(1);
}
 
Example 2
Source File: SpringCloudGatewayParamParserTest.java    From Sentinel with Apache License 2.0 6 votes vote down vote up
@Test
public void testParseParametersNoParamItem() {
    // Mock a request.
    ServerWebExchange exchange = mock(ServerWebExchange.class);
    // Prepare gateway rules.
    Set<GatewayFlowRule> rules = new HashSet<>();
    String routeId1 = "my_test_route_A";
    rules.add(new GatewayFlowRule(routeId1)
        .setCount(5)
        .setIntervalSec(1)
    );
    GatewayRuleManager.loadRules(rules);

    Object[] params = paramParser.parseParameterFor(routeId1, exchange,
        e -> e.getResourceMode() == 0);
    assertThat(params.length).isEqualTo(1);
}
 
Example 3
Source File: SentinelConfig.java    From lion with Apache License 2.0 6 votes vote down vote up
/**
 * 初始化限流规则(或在 dashboard 中配置)
 */
private void initGatewayRules() {
    Set<GatewayFlowRule> rules = new HashSet<>();
    rules.add(new GatewayFlowRule("lion-auth")
            // 限流阈值QPS
            .setCount(COUNT)
            // 统计时间窗口,单位是秒,默认是 1 秒
            .setIntervalSec(INTERVAL_SEC)
    );
    rules.add(new GatewayFlowRule("lion-demo-provider")
            .setCount(COUNT)
            .setIntervalSec(INTERVAL_SEC)
    );
    rules.add(new GatewayFlowRule("lion-demo-consumer")
            .setCount(COUNT)
            .setIntervalSec(INTERVAL_SEC)
    );
    GatewayRuleManager.loadRules(rules);
}
 
Example 4
Source File: UpdateGatewayRuleCommandHandler.java    From Sentinel with Apache License 2.0 6 votes vote down vote up
@Override
public CommandResponse<String> handle(CommandRequest request) {
    String data = request.getParam("data");
    if (StringUtil.isBlank(data)) {
        return CommandResponse.ofFailure(new IllegalArgumentException("Bad data"));
    }
    try {
        data = URLDecoder.decode(data, "utf-8");
    } catch (Exception e) {
        RecordLog.info("Decode gateway rule data error", e);
        return CommandResponse.ofFailure(e, "decode gateway rule data error");
    }

    RecordLog.info(String.format("[API Server] Receiving rule change (type: gateway rule): %s", data));

    String result = SUCCESS_MSG;
 Set<GatewayFlowRule> flowRules = JSON.parseObject(data, new TypeReference<Set<GatewayFlowRule>>() {
 });
    GatewayRuleManager.loadRules(flowRules);
    if (!writeToDataSource(gatewayFlowWds, flowRules)) {
        result = WRITE_DS_FAILURE_MSG;
    }
    return CommandResponse.ofSuccess(result);
}
 
Example 5
Source File: UpdateGatewayRuleCommandHandler.java    From Sentinel-Dashboard-Nacos with Apache License 2.0 6 votes vote down vote up
@Override
public CommandResponse<String> handle(CommandRequest request) {
    String data = request.getParam("data");
    if (StringUtil.isBlank(data)) {
        return CommandResponse.ofFailure(new IllegalArgumentException("Bad data"));
    }
    try {
        data = URLDecoder.decode(data, "utf-8");
    } catch (Exception e) {
        RecordLog.info("Decode gateway rule data error", e);
        return CommandResponse.ofFailure(e, "decode gateway rule data error");
    }

    RecordLog.info(String.format("[API Server] Receiving rule change (type: gateway rule): %s", data));

    String result = SUCCESS_MSG;
    List<GatewayFlowRule> flowRules = JSONArray.parseArray(data, GatewayFlowRule.class);
    GatewayRuleManager.loadRules(new HashSet<>(flowRules));
    return CommandResponse.ofSuccess(result);
}
 
Example 6
Source File: GatewayParamParserTest.java    From Sentinel-Dashboard-Nacos with Apache License 2.0 6 votes vote down vote up
@Test
public void testParseParametersNoParamItem() {
    RequestItemParser<Object> itemParser = mock(RequestItemParser.class);
    GatewayParamParser<Object> parser = new GatewayParamParser<>(itemParser);
    // Create a fake request.
    Object request = new Object();
    // Prepare gateway rules.
    Set<GatewayFlowRule> rules = new HashSet<>();
    String routeId1 = "my_test_route_A";
    rules.add(new GatewayFlowRule(routeId1)
        .setCount(5)
        .setIntervalSec(1)
    );
    rules.add(new GatewayFlowRule(routeId1)
        .setCount(10)
        .setControlBehavior(2)
        .setMaxQueueingTimeoutMs(1000)
    );
    GatewayRuleManager.loadRules(rules);

    Object[] params = parser.parseParameterFor(routeId1, request, routeIdPredicate);
    assertThat(params.length).isEqualTo(1);
}
 
Example 7
Source File: GatewayParamParserTest.java    From Sentinel with Apache License 2.0 6 votes vote down vote up
@Test
public void testParseParametersNoParamItem() {
    RequestItemParser<Object> itemParser = mock(RequestItemParser.class);
    GatewayParamParser<Object> parser = new GatewayParamParser<>(itemParser);
    // Create a fake request.
    Object request = new Object();
    // Prepare gateway rules.
    Set<GatewayFlowRule> rules = new HashSet<>();
    String routeId1 = "my_test_route_A";
    rules.add(new GatewayFlowRule(routeId1)
        .setCount(5)
        .setIntervalSec(1)
    );
    rules.add(new GatewayFlowRule(routeId1)
        .setCount(10)
        .setControlBehavior(2)
        .setMaxQueueingTimeoutMs(1000)
    );
    GatewayRuleManager.loadRules(rules);

    Object[] params = parser.parseParameterFor(routeId1, request, routeIdPredicate);
    assertThat(params.length).isEqualTo(1);
}
 
Example 8
Source File: GatewayParamParserTest.java    From Sentinel with Apache License 2.0 5 votes vote down vote up
@Test
public void testParseParametersWithEmptyItemPattern() {
    RequestItemParser<Object> itemParser = mock(RequestItemParser.class);
    GatewayParamParser<Object> paramParser = new GatewayParamParser<>(itemParser);
    // Create a fake request.
    Object request = new Object();
    // Prepare gateway rules.
    Set<GatewayFlowRule> rules = new HashSet<>();
    final String routeId = "my_test_route_DS(*H";
    final String headerName = "X-Sentinel-Flag";
    GatewayFlowRule routeRule1 = new GatewayFlowRule(routeId)
        .setCount(10)
        .setIntervalSec(2)
        .setParamItem(new GatewayParamFlowItem()
            .setParseStrategy(SentinelGatewayConstants.PARAM_PARSE_STRATEGY_HEADER)
            .setFieldName(headerName)
            .setPattern("")
            .setMatchStrategy(SentinelGatewayConstants.PARAM_MATCH_STRATEGY_EXACT)
        );
    rules.add(routeRule1);
    GatewayRuleManager.loadRules(rules);

    mockSingleHeader(itemParser, headerName, "Sent1nel");
    Object[] params = paramParser.parseParameterFor(routeId, request, routeIdPredicate);
    assertThat(params.length).isEqualTo(1);
    // Empty pattern should not take effect.
    assertThat(params[routeRule1.getParamItem().getIndex()]).isEqualTo("Sent1nel");
}
 
Example 9
Source File: GatewayConfiguration.java    From spring-cloud-sofastack-samples with Apache License 2.0 5 votes vote down vote up
/**
 * rules
 */
private void initGatewayRules() {
    Set<GatewayFlowRule> rules = new HashSet<>();
    rules.add(new GatewayFlowRule("biz-web")
    // 限流阈值
        .setCount(10)
        // 统计时间窗口,单位是秒,默认是 1 秒
        .setIntervalSec(1));
    GatewayRuleManager.loadRules(rules);
}
 
Example 10
Source File: SentinelGatewayFilterTest.java    From Sentinel with Apache License 2.0 4 votes vote down vote up
@After
public void tearDown() {
    GatewayApiDefinitionManager.loadApiDefinitions(new HashSet<>());
    GatewayRuleManager.loadRules(new HashSet<>());
}
 
Example 11
Source File: SpringCloudGatewayParamParserTest.java    From Sentinel with Apache License 2.0 4 votes vote down vote up
@Before
public void setUp() {
    GatewayApiDefinitionManager.loadApiDefinitions(new HashSet<>());
    GatewayRuleManager.loadRules(new HashSet<>());
}
 
Example 12
Source File: SpringCloudGatewayParamParserTest.java    From Sentinel with Apache License 2.0 4 votes vote down vote up
@After
public void tearDown() {
    GatewayApiDefinitionManager.loadApiDefinitions(new HashSet<>());
    GatewayRuleManager.loadRules(new HashSet<>());
}
 
Example 13
Source File: GatewayConfiguration.java    From Sentinel with Apache License 2.0 4 votes vote down vote up
private void initGatewayRules() {
    Set<GatewayFlowRule> rules = new HashSet<>();
    rules.add(new GatewayFlowRule("aliyun_route")
        .setCount(10)
        .setIntervalSec(1)
    );
    rules.add(new GatewayFlowRule("aliyun_route")
        .setCount(2)
        .setIntervalSec(2)
        .setBurst(2)
        .setParamItem(new GatewayParamFlowItem()
            .setParseStrategy(SentinelGatewayConstants.PARAM_PARSE_STRATEGY_CLIENT_IP)
        )
    );
    rules.add(new GatewayFlowRule("httpbin_route")
        .setCount(10)
        .setIntervalSec(1)
        .setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER)
        .setMaxQueueingTimeoutMs(600)
        .setParamItem(new GatewayParamFlowItem()
            .setParseStrategy(SentinelGatewayConstants.PARAM_PARSE_STRATEGY_HEADER)
            .setFieldName("X-Sentinel-Flag")
        )
    );
    rules.add(new GatewayFlowRule("httpbin_route")
        .setCount(1)
        .setIntervalSec(1)
        .setParamItem(new GatewayParamFlowItem()
            .setParseStrategy(SentinelGatewayConstants.PARAM_PARSE_STRATEGY_URL_PARAM)
            .setFieldName("pa")
        )
    );
    rules.add(new GatewayFlowRule("httpbin_route")
        .setCount(2)
        .setIntervalSec(30)
        .setParamItem(new GatewayParamFlowItem()
            .setParseStrategy(SentinelGatewayConstants.PARAM_PARSE_STRATEGY_URL_PARAM)
            .setFieldName("type")
            .setPattern("warn")
            .setMatchStrategy(SentinelGatewayConstants.PARAM_MATCH_STRATEGY_CONTAINS)
        )
    );

    rules.add(new GatewayFlowRule("some_customized_api")
        .setResourceMode(SentinelGatewayConstants.RESOURCE_MODE_CUSTOM_API_NAME)
        .setCount(5)
        .setIntervalSec(1)
        .setParamItem(new GatewayParamFlowItem()
            .setParseStrategy(SentinelGatewayConstants.PARAM_PARSE_STRATEGY_URL_PARAM)
            .setFieldName("pn")
        )
    );
    GatewayRuleManager.loadRules(rules);
}
 
Example 14
Source File: GatewayRuleConfig.java    From Sentinel with Apache License 2.0 4 votes vote down vote up
private void initGatewayRules() {
    Set<GatewayFlowRule> rules = new HashSet<>();
    rules.add(new GatewayFlowRule("images")
        .setCount(10)
        .setIntervalSec(1)
    );
    rules.add(new GatewayFlowRule("images")
        .setCount(2)
        .setIntervalSec(2)
        .setBurst(2)
        .setParamItem(new GatewayParamFlowItem()
            .setParseStrategy(SentinelGatewayConstants.PARAM_PARSE_STRATEGY_CLIENT_IP)
        )
    );
    rules.add(new GatewayFlowRule("comments")
        .setCount(3)
        .setIntervalSec(1)
        .setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER)
        .setMaxQueueingTimeoutMs(6000)
        .setParamItem(new GatewayParamFlowItem()
            .setParseStrategy(SentinelGatewayConstants.PARAM_PARSE_STRATEGY_HEADER)
            .setFieldName("X-Sentinel-Flag")
        )
    );
    rules.add(new GatewayFlowRule("comments")
        .setCount(1)
        .setIntervalSec(1)
        .setParamItem(new GatewayParamFlowItem()
            .setParseStrategy(SentinelGatewayConstants.PARAM_PARSE_STRATEGY_URL_PARAM)
            .setFieldName("pa")
        )
    );

    rules.add(new GatewayFlowRule("some_customized_api")
        .setResourceMode(SentinelGatewayConstants.RESOURCE_MODE_CUSTOM_API_NAME)
        .setCount(5)
        .setIntervalSec(1)
        .setParamItem(new GatewayParamFlowItem()
            .setParseStrategy(SentinelGatewayConstants.PARAM_PARSE_STRATEGY_URL_PARAM)
            .setFieldName("pn")
        )
    );
    GatewayRuleManager.loadRules(rules);
}
 
Example 15
Source File: GatewayParamParserTest.java    From Sentinel-Dashboard-Nacos with Apache License 2.0 4 votes vote down vote up
@Before
public void setUp() {
    GatewayApiDefinitionManager.loadApiDefinitions(new HashSet<ApiDefinition>());
    GatewayRuleManager.loadRules(new HashSet<GatewayFlowRule>());
    GatewayRegexCache.clear();
}
 
Example 16
Source File: GatewayRuleConfig.java    From Sentinel-Dashboard-Nacos with Apache License 2.0 4 votes vote down vote up
private void initGatewayRules() {
    Set<GatewayFlowRule> rules = new HashSet<>();
    rules.add(new GatewayFlowRule("aliyun-product-route")
        .setCount(10)
        .setIntervalSec(1)
    );
    rules.add(new GatewayFlowRule("aliyun-product-route")
        .setCount(2)
        .setIntervalSec(2)
        .setBurst(2)
        .setParamItem(new GatewayParamFlowItem()
            .setParseStrategy(SentinelGatewayConstants.PARAM_PARSE_STRATEGY_CLIENT_IP)
        )
    );
    rules.add(new GatewayFlowRule("another-route-httpbin")
        .setCount(10)
        .setIntervalSec(1)
        .setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER)
        .setMaxQueueingTimeoutMs(600)
        .setParamItem(new GatewayParamFlowItem()
            .setParseStrategy(SentinelGatewayConstants.PARAM_PARSE_STRATEGY_HEADER)
            .setFieldName("X-Sentinel-Flag")
        )
    );
    rules.add(new GatewayFlowRule("another-route-httpbin")
        .setCount(1)
        .setIntervalSec(1)
        .setParamItem(new GatewayParamFlowItem()
            .setParseStrategy(SentinelGatewayConstants.PARAM_PARSE_STRATEGY_URL_PARAM)
            .setFieldName("pa")
        )
    );

    rules.add(new GatewayFlowRule("some_customized_api")
        .setResourceMode(SentinelGatewayConstants.RESOURCE_MODE_CUSTOM_API_NAME)
        .setCount(5)
        .setIntervalSec(1)
        .setParamItem(new GatewayParamFlowItem()
            .setParseStrategy(SentinelGatewayConstants.PARAM_PARSE_STRATEGY_URL_PARAM)
            .setFieldName("pn")
        )
    );
    GatewayRuleManager.loadRules(rules);
}
 
Example 17
Source File: SpringCloudGatewayParamParserTest.java    From Sentinel-Dashboard-Nacos with Apache License 2.0 4 votes vote down vote up
@After
public void tearDown() {
    GatewayApiDefinitionManager.loadApiDefinitions(new HashSet<>());
    GatewayRuleManager.loadRules(new HashSet<>());
}
 
Example 18
Source File: SpringCloudGatewayParamParserTest.java    From Sentinel-Dashboard-Nacos with Apache License 2.0 4 votes vote down vote up
@Before
public void setUp() {
    GatewayApiDefinitionManager.loadApiDefinitions(new HashSet<>());
    GatewayRuleManager.loadRules(new HashSet<>());
}
 
Example 19
Source File: SpringCloudGatewayParamParserTest.java    From Sentinel-Dashboard-Nacos with Apache License 2.0 4 votes vote down vote up
@Test
public void testParseParametersWithItems() {
    // Mock a request.
    ServerWebExchange exchange = mock(ServerWebExchange.class);
    ServerHttpRequest request = mock(ServerHttpRequest.class);
    when(exchange.getRequest()).thenReturn(request);
    RequestPath requestPath = mock(RequestPath.class);
    when(request.getPath()).thenReturn(requestPath);

    // Prepare gateway rules.
    Set<GatewayFlowRule> rules = new HashSet<>();
    String routeId1 = "my_test_route_A";
    String api1 = "my_test_route_B";
    String headerName = "X-Sentinel-Flag";
    String paramName = "p";
    GatewayFlowRule routeRule1 = new GatewayFlowRule(routeId1)
        .setCount(2)
        .setIntervalSec(2)
        .setBurst(2)
        .setParamItem(new GatewayParamFlowItem()
            .setParseStrategy(SentinelGatewayConstants.PARAM_PARSE_STRATEGY_CLIENT_IP)
        );
    GatewayFlowRule routeRule2 = new GatewayFlowRule(routeId1)
        .setCount(10)
        .setIntervalSec(1)
        .setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER)
        .setMaxQueueingTimeoutMs(600)
        .setParamItem(new GatewayParamFlowItem()
            .setParseStrategy(SentinelGatewayConstants.PARAM_PARSE_STRATEGY_HEADER)
            .setFieldName(headerName)
        );
    GatewayFlowRule routeRule3 = new GatewayFlowRule(routeId1)
        .setCount(20)
        .setIntervalSec(1)
        .setBurst(5)
        .setParamItem(new GatewayParamFlowItem()
            .setParseStrategy(SentinelGatewayConstants.PARAM_PARSE_STRATEGY_URL_PARAM)
            .setFieldName(paramName)
        );
    GatewayFlowRule routeRule4 = new GatewayFlowRule(routeId1)
        .setCount(120)
        .setIntervalSec(10)
        .setBurst(30)
        .setParamItem(new GatewayParamFlowItem()
            .setParseStrategy(SentinelGatewayConstants.PARAM_PARSE_STRATEGY_HOST)
        );
    GatewayFlowRule apiRule1 = new GatewayFlowRule(api1)
        .setResourceMode(SentinelGatewayConstants.RESOURCE_MODE_CUSTOM_API_NAME)
        .setCount(5)
        .setIntervalSec(1)
        .setParamItem(new GatewayParamFlowItem()
            .setParseStrategy(SentinelGatewayConstants.PARAM_PARSE_STRATEGY_URL_PARAM)
            .setFieldName(paramName)
        );
    rules.add(routeRule1);
    rules.add(routeRule2);
    rules.add(routeRule3);
    rules.add(routeRule4);
    rules.add(apiRule1);
    GatewayRuleManager.loadRules(rules);

    String expectedHost = "hello.test.sentinel";
    String expectedAddress = "66.77.88.99";
    String expectedHeaderValue1 = "Sentinel";
    String expectedUrlParamValue1 = "17";
    mockClientHostAddress(request, expectedAddress);
    Map<String, String> expectedHeaders = new HashMap<String, String>() {{
        put(headerName, expectedHeaderValue1); put("Host", expectedHost);
    }};
    mockHeaders(request, expectedHeaders);
    mockSingleUrlParam(request, paramName, expectedUrlParamValue1);
    Object[] params = paramParser.parseParameterFor(routeId1, exchange, e -> e.getResourceMode() == 0);
    assertThat(params.length).isEqualTo(4);
    assertThat(params[routeRule1.getParamItem().getIndex()]).isEqualTo(expectedAddress);
    assertThat(params[routeRule2.getParamItem().getIndex()]).isEqualTo(expectedHeaderValue1);
    assertThat(params[routeRule3.getParamItem().getIndex()]).isEqualTo(expectedUrlParamValue1);
    assertThat(params[routeRule4.getParamItem().getIndex()]).isEqualTo(expectedHost);

    assertThat(paramParser.parseParameterFor(api1, exchange, e -> e.getResourceMode() == 0).length).isZero();

    String expectedUrlParamValue2 = "fs";
    mockSingleUrlParam(request, paramName, expectedUrlParamValue2);
    params = paramParser.parseParameterFor(api1, exchange, e -> e.getResourceMode() == 1);
    assertThat(params.length).isEqualTo(1);
    assertThat(params[apiRule1.getParamItem().getIndex()]).isEqualTo(expectedUrlParamValue2);
}
 
Example 20
Source File: GatewayConfiguration.java    From Sentinel-Dashboard-Nacos with Apache License 2.0 4 votes vote down vote up
private void initGatewayRules() {
    Set<GatewayFlowRule> rules = new HashSet<>();
    rules.add(new GatewayFlowRule("aliyun_route")
        .setCount(10)
        .setIntervalSec(1)
    );
    rules.add(new GatewayFlowRule("aliyun_route")
        .setCount(2)
        .setIntervalSec(2)
        .setBurst(2)
        .setParamItem(new GatewayParamFlowItem()
            .setParseStrategy(SentinelGatewayConstants.PARAM_PARSE_STRATEGY_CLIENT_IP)
        )
    );
    rules.add(new GatewayFlowRule("httpbin_route")
        .setCount(10)
        .setIntervalSec(1)
        .setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER)
        .setMaxQueueingTimeoutMs(600)
        .setParamItem(new GatewayParamFlowItem()
            .setParseStrategy(SentinelGatewayConstants.PARAM_PARSE_STRATEGY_HEADER)
            .setFieldName("X-Sentinel-Flag")
        )
    );
    rules.add(new GatewayFlowRule("httpbin_route")
        .setCount(1)
        .setIntervalSec(1)
        .setParamItem(new GatewayParamFlowItem()
            .setParseStrategy(SentinelGatewayConstants.PARAM_PARSE_STRATEGY_URL_PARAM)
            .setFieldName("pa")
        )
    );
    rules.add(new GatewayFlowRule("httpbin_route")
        .setCount(2)
        .setIntervalSec(30)
        .setParamItem(new GatewayParamFlowItem()
            .setParseStrategy(SentinelGatewayConstants.PARAM_PARSE_STRATEGY_URL_PARAM)
            .setFieldName("type")
            .setPattern("warn")
            .setMatchStrategy(SentinelGatewayConstants.PARAM_MATCH_STRATEGY_CONTAINS)
        )
    );

    rules.add(new GatewayFlowRule("some_customized_api")
        .setResourceMode(SentinelGatewayConstants.RESOURCE_MODE_CUSTOM_API_NAME)
        .setCount(5)
        .setIntervalSec(1)
        .setParamItem(new GatewayParamFlowItem()
            .setParseStrategy(SentinelGatewayConstants.PARAM_PARSE_STRATEGY_URL_PARAM)
            .setFieldName("pn")
        )
    );
    GatewayRuleManager.loadRules(rules);
}