From d204a54b760d719fc195de261496ee81dc0ac8b9 Mon Sep 17 00:00:00 2001 From: fangjian0423 Date: Tue, 18 Dec 2018 17:35:45 +0800 Subject: [PATCH] Optimize Sentinel RestTemplate url resource --- .../src/main/asciidoc-zh/sentinel.adoc | 2 +- spring-cloud-alibaba-docs/src/main/asciidoc/sentinel.adoc | 2 +- .../cloud/alibaba/cloud/examples/ExceptionUtil.java | 8 +++++++- .../src/main/resources/flowrule.json | 4 ++-- .../sentinel/custom/SentinelProtectInterceptor.java | 4 ++-- 5 files changed, 13 insertions(+), 7 deletions(-) diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/sentinel.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/sentinel.adoc index 0d54a60f..5d106bd3 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/sentinel.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/sentinel.adoc @@ -185,7 +185,7 @@ Sentinel RestTemplate 限流的资源规则提供两种粒度: * `schema://host:port`:协议、主机和端口 -NOTE: 以 `https://www.taobao.com/test` 这个 url 为例。对应的资源名有两种粒度,分别是 `https://www.taobao.com:80` 以及 `https://www.taobao.com:80/test` +NOTE: 以 `https://www.taobao.com/test` 这个 url 为例。对应的资源名有两种粒度,分别是 `https://www.taobao.com` 以及 `https://www.taobao.com/test` ### 动态数据源支持 diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc/sentinel.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc/sentinel.adoc index a604c3e7..40478e4b 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc/sentinel.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc/sentinel.adoc @@ -187,7 +187,7 @@ Sentinel RestTemplate provides two granularities for resource rate limiting: * `schema://host:port`: Protocol, host and port -NOTE: Take `https://www.taobao.com/test` as an example. The corresponding resource names have two levels of granularities, `https://www.taobao.com:80` and `https://www.taobao.com:80/test`. +NOTE: Take `https://www.taobao.com/test` as an example. The corresponding resource names have two levels of granularities, `https://www.taobao.com` and `https://www.taobao.com/test`. ### Dynamic Data Source Support diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ExceptionUtil.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ExceptionUtil.java index 3b8349fc..94ef5dde 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ExceptionUtil.java +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ExceptionUtil.java @@ -1,5 +1,9 @@ package org.springframework.cloud.alibaba.cloud.examples; +import org.springframework.cloud.alibaba.sentinel.rest.SentinelClientHttpResponse; +import org.springframework.http.HttpRequest; +import org.springframework.http.client.ClientHttpRequestExecution; + import com.alibaba.csp.sentinel.slots.block.BlockException; /** @@ -7,8 +11,10 @@ import com.alibaba.csp.sentinel.slots.block.BlockException; */ public class ExceptionUtil { - public static void handleException(BlockException ex) { + public static SentinelClientHttpResponse handleException(HttpRequest request, + byte[] body, ClientHttpRequestExecution execution, BlockException ex) { System.out.println("Oops: " + ex.getClass().getCanonicalName()); + return new SentinelClientHttpResponse("custom block info"); } } diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/resources/flowrule.json b/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/resources/flowrule.json index 679dff4a..d798f805 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/resources/flowrule.json +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/resources/flowrule.json @@ -16,9 +16,9 @@ "strategy": 0 }, { - "resource": "abc", + "resource": "http://www.taobao.com", "controlBehavior": 0, - "count": 1, + "count": 0, "grade": 1, "limitApp": "default", "strategy": 0 diff --git a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/custom/SentinelProtectInterceptor.java b/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/custom/SentinelProtectInterceptor.java index a1a26f6c..f21da49b 100644 --- a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/custom/SentinelProtectInterceptor.java +++ b/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/custom/SentinelProtectInterceptor.java @@ -58,8 +58,8 @@ public class SentinelProtectInterceptor implements ClientHttpRequestInterceptor public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException { URI uri = request.getURI(); - String hostResource = uri.getScheme() + "://" + uri.getHost() + ":" - + (uri.getPort() == -1 ? 80 : uri.getPort()); + String hostResource = uri.getScheme() + "://" + uri.getHost() + + (uri.getPort() == -1 ? "" : ":" + uri.getPort()); String hostWithPathResource = hostResource + uri.getPath(); Entry hostEntry = null, hostWithPathEntry = null; ClientHttpResponse response;