From a3fef5d955d64e9b8be4282ec42c843306ba7c68 Mon Sep 17 00:00:00 2001 From: fangjian0423 Date: Tue, 18 Dec 2018 17:45:10 +0800 Subject: [PATCH] Optimize Sentinel RestTemplate url resource for 1.x branch --- .../alibaba/cloud/examples/ExceptionUtil.java | 8 +++++++- .../alibaba/cloud/examples/TestController.java | 17 +++++++++-------- .../src/main/resources/flowrule.json | 4 ++-- .../custom/SentinelProtectInterceptor.java | 4 ++-- 4 files changed, 20 insertions(+), 13 deletions(-) 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/java/org/springframework/cloud/alibaba/cloud/examples/TestController.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/TestController.java index 4f4d2e08..d96ed802 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/TestController.java +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/TestController.java @@ -1,23 +1,24 @@ package org.springframework.cloud.alibaba.cloud.examples; -import com.alibaba.csp.sentinel.annotation.SentinelResource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; +import com.alibaba.csp.sentinel.annotation.SentinelResource; + /** * @author xiaojing */ @RestController public class TestController { - @Autowired - private RestTemplate restTemplate; + @Autowired + private RestTemplate restTemplate; @RequestMapping(value = "/hello", method = RequestMethod.GET) - @SentinelResource("resource") + @SentinelResource("resource") public String hello() { return "Hello"; } @@ -27,9 +28,9 @@ public class TestController { return "Hello test"; } - @RequestMapping(value = "/template", method = RequestMethod.GET) - public String client() { - return restTemplate.getForObject("http://www.taobao.com/test", String.class); - } + @RequestMapping(value = "/template", method = RequestMethod.GET) + public String client() { + return restTemplate.getForObject("http://www.taobao.com/test", String.class); + } } 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;