From 80f85eeaab9d815e3b4230dada5507e91e65f485 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E7=A6=B9=E5=85=89?= Date: Wed, 6 May 2020 17:49:57 +0800 Subject: [PATCH 01/17] okhttp --- sentinel-adapter/pom.xml | 1 + .../sentinel-okhttp-adapter/README.md | 64 +++++++++++++ .../sentinel-okhttp-adapter/pom.xml | 69 ++++++++++++++ .../okhttp/SentinelOkHttpInterceptor.java | 50 ++++++++++ .../cleaner/DefaultOkHttpUrlCleaner.java | 31 ++++++ .../okhttp/cleaner/OkHttpUrlCleaner.java | 28 ++++++ .../okhttp/config/SentinelOkHttpConfig.java | 50 ++++++++++ .../fallback/DefaultOkHttpFallback.java | 35 +++++++ .../okhttp/fallback/OkHttpFallback.java | 30 ++++++ .../okhttp/SentinelOkHttpInterceptorTest.java | 95 +++++++++++++++++++ .../adapter/okhttp/app/TestApplication.java | 31 ++++++ .../okhttp/app/controller/TestController.java | 38 ++++++++ .../okhttp/cleaner/OkHttpUrlCleanerTest.java | 57 +++++++++++ .../config/SentinelOkHttpConfigTest.java | 35 +++++++ .../okhttp/fallback/OkHttpFallbackTest.java | 35 +++++++ sentinel-demo/pom.xml | 1 + sentinel-demo/sentinel-demo-okhttp/pom.xml | 49 ++++++++++ .../demo/okhttp/OkHttpDemoApplication.java | 45 +++++++++ .../controller/OkHttpTestController.java | 68 +++++++++++++ .../src/main/resources/application.properties | 2 + 20 files changed, 814 insertions(+) create mode 100755 sentinel-adapter/sentinel-okhttp-adapter/README.md create mode 100644 sentinel-adapter/sentinel-okhttp-adapter/pom.xml create mode 100644 sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptor.java create mode 100644 sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/DefaultOkHttpUrlCleaner.java create mode 100644 sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpUrlCleaner.java create mode 100644 sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfig.java create mode 100644 sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/DefaultOkHttpFallback.java create mode 100644 sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/OkHttpFallback.java create mode 100644 sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java create mode 100644 sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/app/TestApplication.java create mode 100644 sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/app/controller/TestController.java create mode 100644 sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpUrlCleanerTest.java create mode 100644 sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfigTest.java create mode 100644 sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/OkHttpFallbackTest.java create mode 100644 sentinel-demo/sentinel-demo-okhttp/pom.xml create mode 100644 sentinel-demo/sentinel-demo-okhttp/src/main/java/com/alibaba/csp/sentinel/demo/okhttp/OkHttpDemoApplication.java create mode 100644 sentinel-demo/sentinel-demo-okhttp/src/main/java/com/alibaba/csp/sentinel/demo/okhttp/controller/OkHttpTestController.java create mode 100644 sentinel-demo/sentinel-demo-okhttp/src/main/resources/application.properties diff --git a/sentinel-adapter/pom.xml b/sentinel-adapter/pom.xml index a8ef8810e7..329658161f 100755 --- a/sentinel-adapter/pom.xml +++ b/sentinel-adapter/pom.xml @@ -27,6 +27,7 @@ sentinel-spring-cloud-gateway-adapter sentinel-spring-webmvc-adapter sentinel-zuul2-adapter + sentinel-okhttp-adapter sentinel-jax-rs-adapter diff --git a/sentinel-adapter/sentinel-okhttp-adapter/README.md b/sentinel-adapter/sentinel-okhttp-adapter/README.md new file mode 100755 index 0000000000..bf49c59ee9 --- /dev/null +++ b/sentinel-adapter/sentinel-okhttp-adapter/README.md @@ -0,0 +1,64 @@ +# Sentinel Spring OkHttp Adapter + +## Introduction + +Sentinel provides integration for OkHttp client to enable flow control for web requests. + +Add the following dependency in `pom.xml` (if you are using Maven): + +```xml + + com.alibaba.csp + sentinel-okhttp-adapter + x.y.z + +``` + +We can add the `SentinelOkHttpInterceptor` interceptor when `OkHttpClient` at initialization, for example: + +```java +OkHttpClient client = new OkHttpClient.Builder() + .addInterceptor(new SentinelOkHttpInterceptor()) + .build(); +``` + +## Configuration + + +- `SentinelOkHttpConfig` configuration: + +| name | description | type | default value | +|------|------------|------|-------| +| cleaner | aggregate URLs according to actual scenarios | `OkHttpUrlCleaner` | `DefaultOkHttpUrlCleaner` | +| fallback | handle request when it is blocked | `OkHttpFallback` | `DefaultOkHttpFallback` | + +### cleaner (URL cleaner) + +We can define `OkHttpUrlCleaner` to aggregate URLs according to actual scenarios, for example: /okhttp/back/1 ==> /okhttp/back/{id} + +```java +OkHttpUrlCleaner cleaner = (request, connection) -> { + String url = request.url().toString(); + String regex = "/okhttp/back/"; + if (url.contains(regex)) { + url = url.substring(0, url.indexOf(regex) + regex.length()) + "{id}"; + } + return url; +}; +SentinelOkHttpConfig.setCleaner(cleaner); +``` + +### fallback (Block handling) + +We can define `OkHttpFallback` to handle request is blocked according to the actual scenario, for example: + +```java +public class DefaultOkHttpFallback implements OkHttpFallback { + + @Override + public Response handle(Request request, Connection connection, BlockException e) { + // Just wrap and throw the exception. + throw new SentinelRpcException(e); + } +} +``` \ No newline at end of file diff --git a/sentinel-adapter/sentinel-okhttp-adapter/pom.xml b/sentinel-adapter/sentinel-okhttp-adapter/pom.xml new file mode 100644 index 0000000000..1b16d2a6d6 --- /dev/null +++ b/sentinel-adapter/sentinel-okhttp-adapter/pom.xml @@ -0,0 +1,69 @@ + + + + sentinel-adapter + com.alibaba.csp + 1.8.0-SNAPSHOT + +4.0.0 + +sentinel-okhttp-adapter +jar + + + 1.8 + 1.8 + 3.6.0 + 2.1.3.RELEASE + 5.1.5.RELEASE + + + + + com.alibaba.csp + sentinel-core + + + + com.squareup.okhttp3 + okhttp + ${okhttp.version} + + + + junit + junit + test + + + org.mockito + mockito-core + test + + + com.alibaba + fastjson + test + + + org.springframework.boot + spring-boot-starter-web + ${spring.boot.version} + test + + + org.springframework.boot + spring-boot-test + ${spring.boot.version} + test + + + org.springframework + spring-test + ${spring-test.version} + test + + + \ No newline at end of file diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptor.java b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptor.java new file mode 100644 index 0000000000..341b58307b --- /dev/null +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptor.java @@ -0,0 +1,50 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.csp.sentinel.adapter.okhttp; + +import com.alibaba.csp.sentinel.*; +import com.alibaba.csp.sentinel.adapter.okhttp.config.SentinelOkHttpConfig; +import com.alibaba.csp.sentinel.slots.block.BlockException; +import okhttp3.Interceptor; +import okhttp3.Response; + +import java.io.IOException; + +/** + * @author zhaoyuguang + */ + +public class SentinelOkHttpInterceptor implements Interceptor { + + @Override + public Response intercept(Chain chain) throws IOException { + Entry entry = null; + try { + String name = SentinelOkHttpConfig.getCleaner().clean(chain.request(), chain.connection()); + entry = SphU.entry(name, ResourceTypeConstants.COMMON_WEB, EntryType.OUT); + return chain.proceed(chain.request()); + } catch (BlockException e) { + return SentinelOkHttpConfig.getFallback().handle(chain.request(), chain.connection(), e); + } catch (Throwable t) { + Tracer.traceEntry(t, entry); + throw t; + } finally { + if (entry != null) { + entry.exit(); + } + } + } +} \ No newline at end of file diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/DefaultOkHttpUrlCleaner.java b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/DefaultOkHttpUrlCleaner.java new file mode 100644 index 0000000000..2fcefa4ccb --- /dev/null +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/DefaultOkHttpUrlCleaner.java @@ -0,0 +1,31 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.csp.sentinel.adapter.okhttp.cleaner; + +import okhttp3.Connection; +import okhttp3.Request; + +/** + * @author zhaoyuguang + */ + +public class DefaultOkHttpUrlCleaner implements OkHttpUrlCleaner { + + @Override + public String clean(Request request, Connection connection) { + return request.url().toString(); + } +} diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpUrlCleaner.java b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpUrlCleaner.java new file mode 100644 index 0000000000..7cda4d8215 --- /dev/null +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpUrlCleaner.java @@ -0,0 +1,28 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.csp.sentinel.adapter.okhttp.cleaner; + +import okhttp3.Connection; +import okhttp3.Request; + +/** + * @author zhaoyuguang + */ + +public interface OkHttpUrlCleaner { + + String clean(Request request, Connection connection); +} diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfig.java b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfig.java new file mode 100644 index 0000000000..2d9ec9f1b5 --- /dev/null +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfig.java @@ -0,0 +1,50 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.csp.sentinel.adapter.okhttp.config; + +import com.alibaba.csp.sentinel.adapter.okhttp.cleaner.DefaultOkHttpUrlCleaner; +import com.alibaba.csp.sentinel.adapter.okhttp.cleaner.OkHttpUrlCleaner; +import com.alibaba.csp.sentinel.adapter.okhttp.fallback.DefaultOkHttpFallback; +import com.alibaba.csp.sentinel.adapter.okhttp.fallback.OkHttpFallback; +import com.alibaba.csp.sentinel.util.AssertUtil; + +/** + * @author zhaoyuguang + */ + +public final class SentinelOkHttpConfig { + + private static volatile OkHttpUrlCleaner cleaner = new DefaultOkHttpUrlCleaner(); + private static volatile OkHttpFallback fallback = new DefaultOkHttpFallback(); + + public static OkHttpUrlCleaner getCleaner() { + return cleaner; + } + + public static void setCleaner(OkHttpUrlCleaner cleaner) { + AssertUtil.notNull(cleaner, "cleaner cannot be null"); + SentinelOkHttpConfig.cleaner = cleaner; + } + + public static OkHttpFallback getFallback() { + return fallback; + } + + public static void setFallback(OkHttpFallback fallback) { + AssertUtil.notNull(fallback, "fallback cannot be null"); + SentinelOkHttpConfig.fallback = fallback; + } +} diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/DefaultOkHttpFallback.java b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/DefaultOkHttpFallback.java new file mode 100644 index 0000000000..e6cd3de4b6 --- /dev/null +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/DefaultOkHttpFallback.java @@ -0,0 +1,35 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.csp.sentinel.adapter.okhttp.fallback; + +import com.alibaba.csp.sentinel.slots.block.BlockException; +import com.alibaba.csp.sentinel.slots.block.SentinelRpcException; +import okhttp3.Connection; +import okhttp3.Request; +import okhttp3.Response; + +/** + * @author zhaoyuguang + */ + +public class DefaultOkHttpFallback implements OkHttpFallback { + + @Override + public Response handle(Request request, Connection connection, BlockException e) { + // Just wrap and throw the exception. + throw new SentinelRpcException(e); + } +} diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/OkHttpFallback.java b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/OkHttpFallback.java new file mode 100644 index 0000000000..adf23628ea --- /dev/null +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/OkHttpFallback.java @@ -0,0 +1,30 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.csp.sentinel.adapter.okhttp.fallback; + +import com.alibaba.csp.sentinel.slots.block.BlockException; +import okhttp3.Connection; +import okhttp3.Request; +import okhttp3.Response; + +/** + * @author zhaoyuguang + */ + +public interface OkHttpFallback { + + Response handle(Request request, Connection connection, BlockException e); +} diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java new file mode 100644 index 0000000000..2251122d63 --- /dev/null +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java @@ -0,0 +1,95 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.csp.sentinel.adapter.okhttp; + +import com.alibaba.csp.sentinel.Constants; +import com.alibaba.csp.sentinel.adapter.okhttp.app.TestApplication; +import com.alibaba.csp.sentinel.adapter.okhttp.cleaner.OkHttpUrlCleaner; +import com.alibaba.csp.sentinel.adapter.okhttp.config.SentinelOkHttpConfig; +import com.alibaba.csp.sentinel.node.ClusterNode; +import com.alibaba.csp.sentinel.slots.clusterbuilder.ClusterBuilderSlot; +import okhttp3.Connection; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import static org.junit.Assert.assertNotNull; + +/** + * @author zhaoyuguang + */ + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = TestApplication.class, + webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT, + properties = { + "server.port=8086" + }) +public class SentinelOkHttpInterceptorTest { + + @Value("${server.port}") + private Integer port; + + @Test + public void testSentinelOkHttpInterceptor0() throws Exception { + + String url0 = "http://localhost:" + port + "/okhttp/back"; + OkHttpClient client = new OkHttpClient.Builder() + .addInterceptor(new SentinelOkHttpInterceptor()) + .build(); + Request request = new Request.Builder() + .url(url0) + .build(); + System.out.println(client.newCall(request).execute().body().string()); + ClusterNode cn = ClusterBuilderSlot.getClusterNode(url0); + assertNotNull(cn); + + Constants.ROOT.removeChildList(); + ClusterBuilderSlot.getClusterNodeMap().clear(); + } + + @Test + public void testSentinelOkHttpInterceptor1() throws Exception { + + String url0 = "http://localhost:" + port + "/okhttp/back/1"; + SentinelOkHttpConfig.setCleaner((request, connection) -> { + String url = request.url().toString(); + String regex = "/okhttp/back/"; + if (url.contains(regex)) { + url = url.substring(0, url.indexOf(regex) + regex.length()) + "{id}"; + } + return url; + }); + OkHttpClient client = new OkHttpClient.Builder() + .addInterceptor(new SentinelOkHttpInterceptor()) + .build(); + Request request = new Request.Builder() + .url(url0) + .build(); + System.out.println(client.newCall(request).execute().body().string()); + + String url1 = "http://localhost:" + port + "/okhttp/back/{id}"; + ClusterNode cn = ClusterBuilderSlot.getClusterNode(url1); + assertNotNull(cn); + + Constants.ROOT.removeChildList(); + ClusterBuilderSlot.getClusterNodeMap().clear(); + } +} diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/app/TestApplication.java b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/app/TestApplication.java new file mode 100644 index 0000000000..7c1f2a2b58 --- /dev/null +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/app/TestApplication.java @@ -0,0 +1,31 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.csp.sentinel.adapter.okhttp.app; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * @author zhaoyuguang + */ + +@SpringBootApplication +public class TestApplication { + + public static void main(String[] args) { + SpringApplication.run(TestApplication.class); + } +} diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/app/controller/TestController.java b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/app/controller/TestController.java new file mode 100644 index 0000000000..32c121c27e --- /dev/null +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/app/controller/TestController.java @@ -0,0 +1,38 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.csp.sentinel.adapter.okhttp.app.controller; + +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author zhaoyuguang + */ + +@RestController +public class TestController { + + @RequestMapping("/okhttp/back") + public String back() { + return "Welcome Back!"; + } + + @RequestMapping("/okhttp/back/{id}") + public String back(@PathVariable String id) { + return "Welcome Back! " + id; + } +} \ No newline at end of file diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpUrlCleanerTest.java b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpUrlCleanerTest.java new file mode 100644 index 0000000000..6d216f160e --- /dev/null +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpUrlCleanerTest.java @@ -0,0 +1,57 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.csp.sentinel.adapter.okhttp.cleaner; + +import okhttp3.Request; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +/** + * @author zhaoyuguang + */ + +public class OkHttpUrlCleanerTest { + + @Test + public void testDefaultOkHttpUrlCleaner() { + OkHttpUrlCleaner cleaner = new DefaultOkHttpUrlCleaner(); + String url = "http://localhost:8083/okhttp/back"; + Request request = new Request.Builder() + .url(url) + .build(); + cleaner.clean(request, null); + assertEquals(url, cleaner.clean(request, null)); + } + + @Test + public void testCustomizeOkHttpUrlCleaner() { + OkHttpUrlCleaner cleaner = (request, connection) -> { + String url = request.url().toString(); + String regex = "/okhttp/back/"; + if (url.contains(regex)) { + url = url.substring(0, url.indexOf(regex) + regex.length()) + "{id}"; + } + return url; + }; + String url = "http://localhost:8083/okhttp/back/abc"; + Request request = new Request.Builder() + .url(url) + .build(); + cleaner.clean(request, null); + assertEquals("http://localhost:8083/okhttp/back/{id}", cleaner.clean(request, null)); + } +} \ No newline at end of file diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfigTest.java b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfigTest.java new file mode 100644 index 0000000000..94413a95dd --- /dev/null +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfigTest.java @@ -0,0 +1,35 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.csp.sentinel.adapter.okhttp.config; + +import org.junit.Test; + +/** + * @author zhaoyuguang + */ + +public class SentinelOkHttpConfigTest { + + @Test(expected = IllegalArgumentException.class) + public void testConfigSetCleaner() { + SentinelOkHttpConfig.setCleaner(null); + } + + @Test(expected = IllegalArgumentException.class) + public void testConfigSetFallback() { + SentinelOkHttpConfig.setFallback(null); + } +} diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/OkHttpFallbackTest.java b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/OkHttpFallbackTest.java new file mode 100644 index 0000000000..274f3c1874 --- /dev/null +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/OkHttpFallbackTest.java @@ -0,0 +1,35 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.csp.sentinel.adapter.okhttp.fallback; + +import com.alibaba.csp.sentinel.slots.block.BlockException; +import com.alibaba.csp.sentinel.slots.block.SentinelRpcException; +import com.alibaba.csp.sentinel.slots.block.flow.FlowException; +import org.junit.Test; + +/** + * @author zhaoyuguang + */ + +public class OkHttpFallbackTest { + + @Test(expected = SentinelRpcException.class) + public void testDefaultOkHttpFallback() { + BlockException e = new FlowException("xxx"); + OkHttpFallback fallback = new DefaultOkHttpFallback(); + fallback.handle(null, null, e); + } +} diff --git a/sentinel-demo/pom.xml b/sentinel-demo/pom.xml index a5465da0c5..6507641505 100755 --- a/sentinel-demo/pom.xml +++ b/sentinel-demo/pom.xml @@ -39,6 +39,7 @@ sentinel-demo-spring-webmvc sentinel-demo-zuul2-gateway sentinel-demo-log-logback + sentinel-demo-okhttp sentinel-demo-jax-rs diff --git a/sentinel-demo/sentinel-demo-okhttp/pom.xml b/sentinel-demo/sentinel-demo-okhttp/pom.xml new file mode 100644 index 0000000000..8894e3ac1e --- /dev/null +++ b/sentinel-demo/sentinel-demo-okhttp/pom.xml @@ -0,0 +1,49 @@ + + + + sentinel-demo + com.alibaba.csp + 1.8.0-SNAPSHOT + + 4.0.0 + + sentinel-demo-okhttp + + + 2.1.3.RELEASE + 3.6.0 + + + + + com.alibaba.csp + sentinel-core + + + com.alibaba.csp + sentinel-transport-simple-http + + + com.alibaba.csp + sentinel-okhttp-adapter + ${project.version} + + + org.springframework.boot + spring-boot-starter-web + ${spring.boot.version} + + + org.springframework.boot + spring-boot-starter-test + ${spring.boot.version} + + + com.squareup.okhttp3 + okhttp + ${okhttp.version} + + + \ No newline at end of file diff --git a/sentinel-demo/sentinel-demo-okhttp/src/main/java/com/alibaba/csp/sentinel/demo/okhttp/OkHttpDemoApplication.java b/sentinel-demo/sentinel-demo-okhttp/src/main/java/com/alibaba/csp/sentinel/demo/okhttp/OkHttpDemoApplication.java new file mode 100644 index 0000000000..67ab53ca9e --- /dev/null +++ b/sentinel-demo/sentinel-demo-okhttp/src/main/java/com/alibaba/csp/sentinel/demo/okhttp/OkHttpDemoApplication.java @@ -0,0 +1,45 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.csp.sentinel.demo.okhttp; + +import com.alibaba.csp.sentinel.adapter.okhttp.config.SentinelOkHttpConfig; +import org.springframework.boot.CommandLineRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * @author zhaoyuguang + */ + +@SpringBootApplication +public class OkHttpDemoApplication implements CommandLineRunner { + + public static void main(String[] args) { + SpringApplication.run(OkHttpDemoApplication.class); + } + + @Override + public void run(String... args) { + SentinelOkHttpConfig.setCleaner((request, connection) -> { + String url = request.url().toString(); + String regex = "/okhttp/back/"; + if (url.contains(regex)) { + url = url.substring(0, url.indexOf(regex) + regex.length()) + "{id}"; + } + return url; + }); + } +} \ No newline at end of file diff --git a/sentinel-demo/sentinel-demo-okhttp/src/main/java/com/alibaba/csp/sentinel/demo/okhttp/controller/OkHttpTestController.java b/sentinel-demo/sentinel-demo-okhttp/src/main/java/com/alibaba/csp/sentinel/demo/okhttp/controller/OkHttpTestController.java new file mode 100644 index 0000000000..dcd9ae2ce5 --- /dev/null +++ b/sentinel-demo/sentinel-demo-okhttp/src/main/java/com/alibaba/csp/sentinel/demo/okhttp/controller/OkHttpTestController.java @@ -0,0 +1,68 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.csp.sentinel.demo.okhttp.controller; + +import com.alibaba.csp.sentinel.adapter.okhttp.SentinelOkHttpInterceptor; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; + +/** + * @author zhaoyuguang + */ +@RestController +public class OkHttpTestController { + + @Value("${server.port}") + private Integer port; + + @RequestMapping("/okhttp/back") + public String back() { + return "Welcome Back!"; + } + + @RequestMapping("/okhttp/back/{id}") + public String back(@PathVariable String id) { + return "Welcome Back! " + id; + } + + @RequestMapping("/okhttp/testcase/{id}") + public String testcase(@PathVariable String id) throws Exception { + return getRemoteString(id); + } + + @RequestMapping("/okhttp/testcase") + public String testcase() throws Exception { + return getRemoteString(null); + } + + private String getRemoteString(String id) throws IOException { + OkHttpClient client = new OkHttpClient.Builder() + .addInterceptor(new SentinelOkHttpInterceptor()) + .build(); + Request request = new Request.Builder() + .url("http://localhost:" + port + "/okhttp/back" + (id == null ? "" : "/" + id)) + .build(); + Response response = client.newCall(request).execute(); + return response.body().string(); + } +} \ No newline at end of file diff --git a/sentinel-demo/sentinel-demo-okhttp/src/main/resources/application.properties b/sentinel-demo/sentinel-demo-okhttp/src/main/resources/application.properties new file mode 100644 index 0000000000..973e6c2560 --- /dev/null +++ b/sentinel-demo/sentinel-demo-okhttp/src/main/resources/application.properties @@ -0,0 +1,2 @@ +spring.application.name=sentinel-demo-okhttp +server.port=8085 \ No newline at end of file From 7476ca2b148aa712e75bb42b7c3bebc6551da8e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E7=A6=B9=E5=85=89?= Date: Wed, 6 May 2020 18:00:34 +0800 Subject: [PATCH 02/17] fix --- sentinel-adapter/sentinel-okhttp-adapter/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/sentinel-adapter/sentinel-okhttp-adapter/README.md b/sentinel-adapter/sentinel-okhttp-adapter/README.md index bf49c59ee9..964216a2d1 100755 --- a/sentinel-adapter/sentinel-okhttp-adapter/README.md +++ b/sentinel-adapter/sentinel-okhttp-adapter/README.md @@ -24,7 +24,6 @@ OkHttpClient client = new OkHttpClient.Builder() ## Configuration - - `SentinelOkHttpConfig` configuration: | name | description | type | default value | From 1b1b482547d98ef8e5e9e71b5076cc0d1193f55e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E7=A6=B9=E5=85=89?= Date: Thu, 7 May 2020 09:32:04 +0800 Subject: [PATCH 03/17] fix --- sentinel-adapter/sentinel-okhttp-adapter/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/sentinel-adapter/sentinel-okhttp-adapter/pom.xml b/sentinel-adapter/sentinel-okhttp-adapter/pom.xml index 1b16d2a6d6..8c0f45910b 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/pom.xml +++ b/sentinel-adapter/sentinel-okhttp-adapter/pom.xml @@ -30,6 +30,7 @@ com.squareup.okhttp3 okhttp ${okhttp.version} + provided From 593ba141e74f2da3eed1678933b0297c1820201f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E7=A6=B9=E5=85=89?= Date: Thu, 7 May 2020 11:15:46 +0800 Subject: [PATCH 04/17] fix --- .../sentinel-okhttp-adapter/pom.xml | 4 +-- .../okhttp/SentinelOkHttpInterceptor.java | 3 +-- ...va => DefaultOkHttpResourceExtractor.java} | 14 +++++++--- ...aner.java => OkHttpResourceExtractor.java} | 5 ++-- .../okhttp/config/SentinelOkHttpConfig.java | 26 ++++++++++++------- .../fallback/DefaultOkHttpFallback.java | 1 - .../okhttp/fallback/OkHttpFallback.java | 1 - .../okhttp/SentinelOkHttpInterceptorTest.java | 9 +++---- .../adapter/okhttp/app/TestApplication.java | 1 - .../okhttp/app/controller/TestController.java | 1 - ....java => OkHttpResourceExtractorTest.java} | 16 ++++++------ .../config/SentinelOkHttpConfigTest.java | 8 ++++-- .../okhttp/fallback/OkHttpFallbackTest.java | 1 - .../demo/okhttp/OkHttpDemoApplication.java | 3 +-- 14 files changed, 50 insertions(+), 43 deletions(-) rename sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/{DefaultOkHttpUrlCleaner.java => DefaultOkHttpResourceExtractor.java} (57%) rename sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/{OkHttpUrlCleaner.java => OkHttpResourceExtractor.java} (88%) rename sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/{OkHttpUrlCleanerTest.java => OkHttpResourceExtractorTest.java} (78%) diff --git a/sentinel-adapter/sentinel-okhttp-adapter/pom.xml b/sentinel-adapter/sentinel-okhttp-adapter/pom.xml index 8c0f45910b..ef4249da41 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/pom.xml +++ b/sentinel-adapter/sentinel-okhttp-adapter/pom.xml @@ -13,8 +13,8 @@ jar - 1.8 - 1.8 + 1.7 + 1.7 3.6.0 2.1.3.RELEASE 5.1.5.RELEASE diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptor.java b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptor.java index 341b58307b..361a5db1ce 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptor.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptor.java @@ -26,14 +26,13 @@ /** * @author zhaoyuguang */ - public class SentinelOkHttpInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { Entry entry = null; try { - String name = SentinelOkHttpConfig.getCleaner().clean(chain.request(), chain.connection()); + String name = SentinelOkHttpConfig.getExtractor().extract(chain.request(), chain.connection()); entry = SphU.entry(name, ResourceTypeConstants.COMMON_WEB, EntryType.OUT); return chain.proceed(chain.request()); } catch (BlockException e) { diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/DefaultOkHttpUrlCleaner.java b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/DefaultOkHttpResourceExtractor.java similarity index 57% rename from sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/DefaultOkHttpUrlCleaner.java rename to sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/DefaultOkHttpResourceExtractor.java index 2fcefa4ccb..2ccc918d25 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/DefaultOkHttpUrlCleaner.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/DefaultOkHttpResourceExtractor.java @@ -15,17 +15,23 @@ */ package com.alibaba.csp.sentinel.adapter.okhttp.cleaner; +import com.alibaba.csp.sentinel.adapter.okhttp.config.SentinelOkHttpConfig; +import com.alibaba.csp.sentinel.util.StringUtil; import okhttp3.Connection; import okhttp3.Request; /** * @author zhaoyuguang */ - -public class DefaultOkHttpUrlCleaner implements OkHttpUrlCleaner { +public class DefaultOkHttpResourceExtractor implements OkHttpResourceExtractor { @Override - public String clean(Request request, Connection connection) { - return request.url().toString(); + public String extract(Request request, Connection connection) { + StringBuilder buf = new StringBuilder(64); + if (!StringUtil.isEmpty(SentinelOkHttpConfig.getPrefix())) { + buf.append(SentinelOkHttpConfig.getPrefix()); + } + buf.append(request.method()).append(":").append(request.url().toString()); + return buf.toString(); } } diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpUrlCleaner.java b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpResourceExtractor.java similarity index 88% rename from sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpUrlCleaner.java rename to sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpResourceExtractor.java index 7cda4d8215..6aa0c9f5b3 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpUrlCleaner.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpResourceExtractor.java @@ -21,8 +21,7 @@ /** * @author zhaoyuguang */ +public interface OkHttpResourceExtractor { -public interface OkHttpUrlCleaner { - - String clean(Request request, Connection connection); + String extract(Request request, Connection connection); } diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfig.java b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfig.java index 2d9ec9f1b5..1c5a24e98b 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfig.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfig.java @@ -15,8 +15,8 @@ */ package com.alibaba.csp.sentinel.adapter.okhttp.config; -import com.alibaba.csp.sentinel.adapter.okhttp.cleaner.DefaultOkHttpUrlCleaner; -import com.alibaba.csp.sentinel.adapter.okhttp.cleaner.OkHttpUrlCleaner; +import com.alibaba.csp.sentinel.adapter.okhttp.cleaner.DefaultOkHttpResourceExtractor; +import com.alibaba.csp.sentinel.adapter.okhttp.cleaner.OkHttpResourceExtractor; import com.alibaba.csp.sentinel.adapter.okhttp.fallback.DefaultOkHttpFallback; import com.alibaba.csp.sentinel.adapter.okhttp.fallback.OkHttpFallback; import com.alibaba.csp.sentinel.util.AssertUtil; @@ -24,19 +24,27 @@ /** * @author zhaoyuguang */ - public final class SentinelOkHttpConfig { - private static volatile OkHttpUrlCleaner cleaner = new DefaultOkHttpUrlCleaner(); + private static volatile String prefix = "okhttp:"; + private static volatile OkHttpResourceExtractor extractor = new DefaultOkHttpResourceExtractor(); private static volatile OkHttpFallback fallback = new DefaultOkHttpFallback(); - public static OkHttpUrlCleaner getCleaner() { - return cleaner; + public static String getPrefix() { + return prefix; + } + + public static void setPrefix(String prefix) { + SentinelOkHttpConfig.prefix = prefix; + } + + public static OkHttpResourceExtractor getExtractor() { + return extractor; } - public static void setCleaner(OkHttpUrlCleaner cleaner) { - AssertUtil.notNull(cleaner, "cleaner cannot be null"); - SentinelOkHttpConfig.cleaner = cleaner; + public static void setExtractor(OkHttpResourceExtractor extractor) { + AssertUtil.notNull(extractor, "cleaner cannot be null"); + SentinelOkHttpConfig.extractor = extractor; } public static OkHttpFallback getFallback() { diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/DefaultOkHttpFallback.java b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/DefaultOkHttpFallback.java index e6cd3de4b6..73c56a0563 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/DefaultOkHttpFallback.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/DefaultOkHttpFallback.java @@ -24,7 +24,6 @@ /** * @author zhaoyuguang */ - public class DefaultOkHttpFallback implements OkHttpFallback { @Override diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/OkHttpFallback.java b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/OkHttpFallback.java index adf23628ea..339dcc0b4c 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/OkHttpFallback.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/OkHttpFallback.java @@ -23,7 +23,6 @@ /** * @author zhaoyuguang */ - public interface OkHttpFallback { Response handle(Request request, Connection connection, BlockException e); diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java index 2251122d63..2dc96a0c2e 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java @@ -17,11 +17,9 @@ import com.alibaba.csp.sentinel.Constants; import com.alibaba.csp.sentinel.adapter.okhttp.app.TestApplication; -import com.alibaba.csp.sentinel.adapter.okhttp.cleaner.OkHttpUrlCleaner; import com.alibaba.csp.sentinel.adapter.okhttp.config.SentinelOkHttpConfig; import com.alibaba.csp.sentinel.node.ClusterNode; import com.alibaba.csp.sentinel.slots.clusterbuilder.ClusterBuilderSlot; -import okhttp3.Connection; import okhttp3.OkHttpClient; import okhttp3.Request; import org.junit.Test; @@ -35,7 +33,6 @@ /** * @author zhaoyuguang */ - @RunWith(SpringRunner.class) @SpringBootTest(classes = TestApplication.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT, @@ -58,7 +55,7 @@ public void testSentinelOkHttpInterceptor0() throws Exception { .url(url0) .build(); System.out.println(client.newCall(request).execute().body().string()); - ClusterNode cn = ClusterBuilderSlot.getClusterNode(url0); + ClusterNode cn = ClusterBuilderSlot.getClusterNode("okhttp:GET:" + url0); assertNotNull(cn); Constants.ROOT.removeChildList(); @@ -69,7 +66,7 @@ public void testSentinelOkHttpInterceptor0() throws Exception { public void testSentinelOkHttpInterceptor1() throws Exception { String url0 = "http://localhost:" + port + "/okhttp/back/1"; - SentinelOkHttpConfig.setCleaner((request, connection) -> { + SentinelOkHttpConfig.setExtractor((request, connection) -> { String url = request.url().toString(); String regex = "/okhttp/back/"; if (url.contains(regex)) { @@ -85,7 +82,7 @@ public void testSentinelOkHttpInterceptor1() throws Exception { .build(); System.out.println(client.newCall(request).execute().body().string()); - String url1 = "http://localhost:" + port + "/okhttp/back/{id}"; + String url1 = "okhttp:GET:http://localhost:" + port + "/okhttp/back/{id}"; ClusterNode cn = ClusterBuilderSlot.getClusterNode(url1); assertNotNull(cn); diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/app/TestApplication.java b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/app/TestApplication.java index 7c1f2a2b58..04d72ee99f 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/app/TestApplication.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/app/TestApplication.java @@ -21,7 +21,6 @@ /** * @author zhaoyuguang */ - @SpringBootApplication public class TestApplication { diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/app/controller/TestController.java b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/app/controller/TestController.java index 32c121c27e..a701d19939 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/app/controller/TestController.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/app/controller/TestController.java @@ -22,7 +22,6 @@ /** * @author zhaoyuguang */ - @RestController public class TestController { diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpUrlCleanerTest.java b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpResourceExtractorTest.java similarity index 78% rename from sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpUrlCleanerTest.java rename to sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpResourceExtractorTest.java index 6d216f160e..62f06d4d8d 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpUrlCleanerTest.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpResourceExtractorTest.java @@ -23,23 +23,23 @@ /** * @author zhaoyuguang */ - -public class OkHttpUrlCleanerTest { +public class OkHttpResourceExtractorTest { @Test public void testDefaultOkHttpUrlCleaner() { - OkHttpUrlCleaner cleaner = new DefaultOkHttpUrlCleaner(); + OkHttpResourceExtractor cleaner = new DefaultOkHttpResourceExtractor(); String url = "http://localhost:8083/okhttp/back"; Request request = new Request.Builder() .url(url) .build(); - cleaner.clean(request, null); - assertEquals(url, cleaner.clean(request, null)); + cleaner.extract(request, null); + System.out.println(cleaner.extract(request, null)); + assertEquals("okhttp:GET:" + url, cleaner.extract(request, null)); } @Test public void testCustomizeOkHttpUrlCleaner() { - OkHttpUrlCleaner cleaner = (request, connection) -> { + OkHttpResourceExtractor cleaner = (request, connection) -> { String url = request.url().toString(); String regex = "/okhttp/back/"; if (url.contains(regex)) { @@ -51,7 +51,7 @@ public void testCustomizeOkHttpUrlCleaner() { Request request = new Request.Builder() .url(url) .build(); - cleaner.clean(request, null); - assertEquals("http://localhost:8083/okhttp/back/{id}", cleaner.clean(request, null)); + cleaner.extract(request, null); + assertEquals("http://localhost:8083/okhttp/back/{id}", cleaner.extract(request, null)); } } \ No newline at end of file diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfigTest.java b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfigTest.java index 94413a95dd..90ad44c77a 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfigTest.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfigTest.java @@ -20,12 +20,16 @@ /** * @author zhaoyuguang */ - public class SentinelOkHttpConfigTest { + @Test + public void testConfigSetPrefix() { + SentinelOkHttpConfig.setPrefix(null); + } + @Test(expected = IllegalArgumentException.class) public void testConfigSetCleaner() { - SentinelOkHttpConfig.setCleaner(null); + SentinelOkHttpConfig.setExtractor(null); } @Test(expected = IllegalArgumentException.class) diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/OkHttpFallbackTest.java b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/OkHttpFallbackTest.java index 274f3c1874..7403a7782b 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/OkHttpFallbackTest.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/OkHttpFallbackTest.java @@ -23,7 +23,6 @@ /** * @author zhaoyuguang */ - public class OkHttpFallbackTest { @Test(expected = SentinelRpcException.class) diff --git a/sentinel-demo/sentinel-demo-okhttp/src/main/java/com/alibaba/csp/sentinel/demo/okhttp/OkHttpDemoApplication.java b/sentinel-demo/sentinel-demo-okhttp/src/main/java/com/alibaba/csp/sentinel/demo/okhttp/OkHttpDemoApplication.java index 67ab53ca9e..50cf863776 100644 --- a/sentinel-demo/sentinel-demo-okhttp/src/main/java/com/alibaba/csp/sentinel/demo/okhttp/OkHttpDemoApplication.java +++ b/sentinel-demo/sentinel-demo-okhttp/src/main/java/com/alibaba/csp/sentinel/demo/okhttp/OkHttpDemoApplication.java @@ -23,7 +23,6 @@ /** * @author zhaoyuguang */ - @SpringBootApplication public class OkHttpDemoApplication implements CommandLineRunner { @@ -33,7 +32,7 @@ public static void main(String[] args) { @Override public void run(String... args) { - SentinelOkHttpConfig.setCleaner((request, connection) -> { + SentinelOkHttpConfig.setExtractor((request, connection) -> { String url = request.url().toString(); String regex = "/okhttp/back/"; if (url.contains(regex)) { From 708c614695f56b61082f4c3088de5ac86ae63f9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E7=A6=B9=E5=85=89?= Date: Thu, 7 May 2020 11:22:04 +0800 Subject: [PATCH 05/17] fix md --- .../sentinel-okhttp-adapter/README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/sentinel-adapter/sentinel-okhttp-adapter/README.md b/sentinel-adapter/sentinel-okhttp-adapter/README.md index 964216a2d1..531c6fea79 100755 --- a/sentinel-adapter/sentinel-okhttp-adapter/README.md +++ b/sentinel-adapter/sentinel-okhttp-adapter/README.md @@ -28,23 +28,23 @@ OkHttpClient client = new OkHttpClient.Builder() | name | description | type | default value | |------|------------|------|-------| -| cleaner | aggregate URLs according to actual scenarios | `OkHttpUrlCleaner` | `DefaultOkHttpUrlCleaner` | +| extractor | custom resource extractor | `OkHttpResourceExtractor` | `DefaultOkHttpResourceExtractor` | | fallback | handle request when it is blocked | `OkHttpFallback` | `DefaultOkHttpFallback` | -### cleaner (URL cleaner) +### extractor (resource extractor) -We can define `OkHttpUrlCleaner` to aggregate URLs according to actual scenarios, for example: /okhttp/back/1 ==> /okhttp/back/{id} +We can define `OkHttpResourceExtractor` to custom resource extractor replace `DefaultOkHttpResourceExtractor`, for example: okhttp:GET:ip:port/okhttp/back/1 ==> /okhttp/back/{id} ```java -OkHttpUrlCleaner cleaner = (request, connection) -> { - String url = request.url().toString(); +OkHttpResourceExtractor extractor = (request, connection) -> { + String resource = request.url().toString(); String regex = "/okhttp/back/"; - if (url.contains(regex)) { - url = url.substring(0, url.indexOf(regex) + regex.length()) + "{id}"; + if (resource.contains(regex)) { + resource = resource.substring(0, resource.indexOf(regex) + regex.length()) + "{id}"; } - return url; + return resource; }; -SentinelOkHttpConfig.setCleaner(cleaner); +SentinelOkHttpConfig.setExtractor(extractor); ``` ### fallback (Block handling) From 219e65c74d7952764854e56606a595595ce3d23b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E7=A6=B9=E5=85=89?= Date: Thu, 7 May 2020 11:27:45 +0800 Subject: [PATCH 06/17] fix --- .../sentinel-okhttp-adapter/pom.xml | 2 -- .../cleaner/OkHttpResourceExtractorTest.java | 20 +++++++++++-------- .../demo/okhttp/OkHttpDemoApplication.java | 18 +++++++++++------ 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/sentinel-adapter/sentinel-okhttp-adapter/pom.xml b/sentinel-adapter/sentinel-okhttp-adapter/pom.xml index ef4249da41..b25f45595f 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/pom.xml +++ b/sentinel-adapter/sentinel-okhttp-adapter/pom.xml @@ -13,8 +13,6 @@ jar - 1.7 - 1.7 3.6.0 2.1.3.RELEASE 5.1.5.RELEASE diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpResourceExtractorTest.java b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpResourceExtractorTest.java index 62f06d4d8d..624d20b36d 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpResourceExtractorTest.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpResourceExtractorTest.java @@ -15,6 +15,7 @@ */ package com.alibaba.csp.sentinel.adapter.okhttp.cleaner; +import okhttp3.Connection; import okhttp3.Request; import org.junit.Test; @@ -39,19 +40,22 @@ public void testDefaultOkHttpUrlCleaner() { @Test public void testCustomizeOkHttpUrlCleaner() { - OkHttpResourceExtractor cleaner = (request, connection) -> { - String url = request.url().toString(); - String regex = "/okhttp/back/"; - if (url.contains(regex)) { - url = url.substring(0, url.indexOf(regex) + regex.length()) + "{id}"; + OkHttpResourceExtractor extractor = new OkHttpResourceExtractor() { + @Override + public String extract(Request request, Connection connection) { + String url = request.url().toString(); + String regex = "/okhttp/back/"; + if (url.contains(regex)) { + url = url.substring(0, url.indexOf(regex) + regex.length()) + "{id}"; + } + return url; } - return url; }; String url = "http://localhost:8083/okhttp/back/abc"; Request request = new Request.Builder() .url(url) .build(); - cleaner.extract(request, null); - assertEquals("http://localhost:8083/okhttp/back/{id}", cleaner.extract(request, null)); + extractor.extract(request, null); + assertEquals("http://localhost:8083/okhttp/back/{id}", extractor.extract(request, null)); } } \ No newline at end of file diff --git a/sentinel-demo/sentinel-demo-okhttp/src/main/java/com/alibaba/csp/sentinel/demo/okhttp/OkHttpDemoApplication.java b/sentinel-demo/sentinel-demo-okhttp/src/main/java/com/alibaba/csp/sentinel/demo/okhttp/OkHttpDemoApplication.java index 50cf863776..cf07c1cdfc 100644 --- a/sentinel-demo/sentinel-demo-okhttp/src/main/java/com/alibaba/csp/sentinel/demo/okhttp/OkHttpDemoApplication.java +++ b/sentinel-demo/sentinel-demo-okhttp/src/main/java/com/alibaba/csp/sentinel/demo/okhttp/OkHttpDemoApplication.java @@ -15,7 +15,10 @@ */ package com.alibaba.csp.sentinel.demo.okhttp; +import com.alibaba.csp.sentinel.adapter.okhttp.cleaner.OkHttpResourceExtractor; import com.alibaba.csp.sentinel.adapter.okhttp.config.SentinelOkHttpConfig; +import okhttp3.Connection; +import okhttp3.Request; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -32,13 +35,16 @@ public static void main(String[] args) { @Override public void run(String... args) { - SentinelOkHttpConfig.setExtractor((request, connection) -> { - String url = request.url().toString(); - String regex = "/okhttp/back/"; - if (url.contains(regex)) { - url = url.substring(0, url.indexOf(regex) + regex.length()) + "{id}"; + SentinelOkHttpConfig.setExtractor(new OkHttpResourceExtractor() { + @Override + public String extract(Request request, Connection connection) { + String url = request.url().toString(); + String regex = "/okhttp/back/"; + if (url.contains(regex)) { + url = url.substring(0, url.indexOf(regex) + regex.length()) + "{id}"; + } + return url; } - return url; }); } } \ No newline at end of file From b1a9fbca9a27f4b21330e60770899f3f68401161 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E7=A6=B9=E5=85=89?= Date: Thu, 7 May 2020 11:32:00 +0800 Subject: [PATCH 07/17] fix ci --- .../okhttp/SentinelOkHttpInterceptorTest.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java index 2dc96a0c2e..149596f0df 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java @@ -17,9 +17,11 @@ import com.alibaba.csp.sentinel.Constants; import com.alibaba.csp.sentinel.adapter.okhttp.app.TestApplication; +import com.alibaba.csp.sentinel.adapter.okhttp.cleaner.OkHttpResourceExtractor; import com.alibaba.csp.sentinel.adapter.okhttp.config.SentinelOkHttpConfig; import com.alibaba.csp.sentinel.node.ClusterNode; import com.alibaba.csp.sentinel.slots.clusterbuilder.ClusterBuilderSlot; +import okhttp3.Connection; import okhttp3.OkHttpClient; import okhttp3.Request; import org.junit.Test; @@ -66,13 +68,16 @@ public void testSentinelOkHttpInterceptor0() throws Exception { public void testSentinelOkHttpInterceptor1() throws Exception { String url0 = "http://localhost:" + port + "/okhttp/back/1"; - SentinelOkHttpConfig.setExtractor((request, connection) -> { - String url = request.url().toString(); - String regex = "/okhttp/back/"; - if (url.contains(regex)) { - url = url.substring(0, url.indexOf(regex) + regex.length()) + "{id}"; + SentinelOkHttpConfig.setExtractor(new OkHttpResourceExtractor() { + @Override + public String extract(Request request, Connection connection) { + String url = request.url().toString(); + String regex = "/okhttp/back/"; + if (url.contains(regex)) { + url = url.substring(0, url.indexOf(regex) + regex.length()) + "{id}"; + } + return url; } - return url; }); OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(new SentinelOkHttpInterceptor()) From cde6958d031df41a65b7ae8ecfe422911dbc0006 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E7=A6=B9=E5=85=89?= Date: Thu, 7 May 2020 11:37:17 +0800 Subject: [PATCH 08/17] fix --- .../sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java index 149596f0df..1bc90e0d9d 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java @@ -87,7 +87,7 @@ public String extract(Request request, Connection connection) { .build(); System.out.println(client.newCall(request).execute().body().string()); - String url1 = "okhttp:GET:http://localhost:" + port + "/okhttp/back/{id}"; + String url1 = "http://localhost:" + port + "/okhttp/back/{id}"; ClusterNode cn = ClusterBuilderSlot.getClusterNode(url1); assertNotNull(cn); From e9d8825209e2a83c4ab64bdcc51fc3511585817b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E7=A6=B9=E5=85=89?= Date: Thu, 7 May 2020 11:49:15 +0800 Subject: [PATCH 09/17] fix --- .../adapter/okhttp/config/SentinelOkHttpConfig.java | 3 ++- .../okhttp/SentinelOkHttpInterceptorTest.java | 1 + .../okhttp/cleaner/OkHttpResourceExtractorTest.java | 12 +++++++----- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfig.java b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfig.java index 1c5a24e98b..b51e6877ec 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfig.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfig.java @@ -26,7 +26,7 @@ */ public final class SentinelOkHttpConfig { - private static volatile String prefix = "okhttp:"; + private static volatile String prefix = ""; private static volatile OkHttpResourceExtractor extractor = new DefaultOkHttpResourceExtractor(); private static volatile OkHttpFallback fallback = new DefaultOkHttpFallback(); @@ -35,6 +35,7 @@ public static String getPrefix() { } public static void setPrefix(String prefix) { + AssertUtil.notNull(extractor, "prefix cannot be null"); SentinelOkHttpConfig.prefix = prefix; } diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java index 1bc90e0d9d..3a49fe8e25 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java @@ -50,6 +50,7 @@ public class SentinelOkHttpInterceptorTest { public void testSentinelOkHttpInterceptor0() throws Exception { String url0 = "http://localhost:" + port + "/okhttp/back"; + SentinelOkHttpConfig.setPrefix("okhttp:"); OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(new SentinelOkHttpInterceptor()) .build(); diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpResourceExtractorTest.java b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpResourceExtractorTest.java index 624d20b36d..4a326a61cd 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpResourceExtractorTest.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpResourceExtractorTest.java @@ -15,6 +15,7 @@ */ package com.alibaba.csp.sentinel.adapter.okhttp.cleaner; +import com.alibaba.csp.sentinel.adapter.okhttp.config.SentinelOkHttpConfig; import okhttp3.Connection; import okhttp3.Request; import org.junit.Test; @@ -27,15 +28,16 @@ public class OkHttpResourceExtractorTest { @Test - public void testDefaultOkHttpUrlCleaner() { - OkHttpResourceExtractor cleaner = new DefaultOkHttpResourceExtractor(); + public void testDefaultOkHttpResourceExtractor() { + SentinelOkHttpConfig.setPrefix("okhttp:"); + OkHttpResourceExtractor extractor = new DefaultOkHttpResourceExtractor(); String url = "http://localhost:8083/okhttp/back"; Request request = new Request.Builder() .url(url) .build(); - cleaner.extract(request, null); - System.out.println(cleaner.extract(request, null)); - assertEquals("okhttp:GET:" + url, cleaner.extract(request, null)); + extractor.extract(request, null); + System.out.println(extractor.extract(request, null)); + assertEquals("okhttp:GET:" + url, extractor.extract(request, null)); } @Test From 182273a17d75a7bc064f87e82758a17edd8d730a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E7=A6=B9=E5=85=89?= Date: Thu, 7 May 2020 18:22:11 +0800 Subject: [PATCH 10/17] fix --- .../sentinel/adapter/okhttp/config/SentinelOkHttpConfig.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfig.java b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfig.java index b51e6877ec..b1c6a18871 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfig.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfig.java @@ -35,7 +35,7 @@ public static String getPrefix() { } public static void setPrefix(String prefix) { - AssertUtil.notNull(extractor, "prefix cannot be null"); + AssertUtil.notNull(prefix, "prefix cannot be null"); SentinelOkHttpConfig.prefix = prefix; } @@ -44,7 +44,7 @@ public static OkHttpResourceExtractor getExtractor() { } public static void setExtractor(OkHttpResourceExtractor extractor) { - AssertUtil.notNull(extractor, "cleaner cannot be null"); + AssertUtil.notNull(extractor, "extractor cannot be null"); SentinelOkHttpConfig.extractor = extractor; } From 111bf62fede0a17ee051776ebcbd2f55337e38a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E7=A6=B9=E5=85=89?= Date: Thu, 7 May 2020 18:22:59 +0800 Subject: [PATCH 11/17] fix --- .../adapter/okhttp/config/SentinelOkHttpConfigTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfigTest.java b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfigTest.java index 90ad44c77a..2605d0014a 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfigTest.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfigTest.java @@ -22,7 +22,7 @@ */ public class SentinelOkHttpConfigTest { - @Test + @Test(expected = IllegalArgumentException.class) public void testConfigSetPrefix() { SentinelOkHttpConfig.setPrefix(null); } From ad223bb59a2ef442445174f0447e8cc68401cbfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E7=A6=B9=E5=85=89?= Date: Thu, 7 May 2020 18:27:23 +0800 Subject: [PATCH 12/17] fix --- sentinel-adapter/sentinel-okhttp-adapter/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sentinel-adapter/sentinel-okhttp-adapter/README.md b/sentinel-adapter/sentinel-okhttp-adapter/README.md index 531c6fea79..6b5e61d54a 100755 --- a/sentinel-adapter/sentinel-okhttp-adapter/README.md +++ b/sentinel-adapter/sentinel-okhttp-adapter/README.md @@ -1,4 +1,4 @@ -# Sentinel Spring OkHttp Adapter +# Sentinel OkHttp Adapter ## Introduction From 108184a3d24b9ac375f208d695d023891f92f0c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E7=A6=B9=E5=85=89?= Date: Thu, 7 May 2020 19:00:16 +0800 Subject: [PATCH 13/17] fix --- .../sentinel-jax-rs-adapter/pom.xml | 2 +- .../sentinel-okhttp-adapter/pom.xml | 116 +++++++++--------- .../okhttp/SentinelOkHttpInterceptor.java | 2 +- .../DefaultOkHttpResourceExtractor.java | 2 +- .../cleaner/OkHttpResourceExtractor.java | 2 +- .../okhttp/config/SentinelOkHttpConfig.java | 2 +- .../fallback/DefaultOkHttpFallback.java | 2 +- .../okhttp/fallback/OkHttpFallback.java | 2 +- .../okhttp/SentinelOkHttpInterceptorTest.java | 2 +- .../adapter/okhttp/app/TestApplication.java | 2 +- .../okhttp/app/controller/TestController.java | 2 +- .../cleaner/OkHttpResourceExtractorTest.java | 2 +- .../config/SentinelOkHttpConfigTest.java | 2 +- .../okhttp/fallback/OkHttpFallbackTest.java | 2 +- .../demo/okhttp/OkHttpDemoApplication.java | 2 +- .../controller/OkHttpTestController.java | 2 +- 16 files changed, 73 insertions(+), 73 deletions(-) diff --git a/sentinel-adapter/sentinel-jax-rs-adapter/pom.xml b/sentinel-adapter/sentinel-jax-rs-adapter/pom.xml index b0a94298ad..41e8282891 100755 --- a/sentinel-adapter/sentinel-jax-rs-adapter/pom.xml +++ b/sentinel-adapter/sentinel-jax-rs-adapter/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 diff --git a/sentinel-adapter/sentinel-okhttp-adapter/pom.xml b/sentinel-adapter/sentinel-okhttp-adapter/pom.xml index b25f45595f..658d4e413d 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/pom.xml +++ b/sentinel-adapter/sentinel-okhttp-adapter/pom.xml @@ -2,67 +2,67 @@ - - sentinel-adapter - com.alibaba.csp - 1.8.0-SNAPSHOT - -4.0.0 + + sentinel-adapter + com.alibaba.csp + 1.8.0-SNAPSHOT + + 4.0.0 -sentinel-okhttp-adapter -jar + sentinel-okhttp-adapter + jar - - 3.6.0 - 2.1.3.RELEASE - 5.1.5.RELEASE - + + 3.6.0 + 2.1.3.RELEASE + 5.1.5.RELEASE + - - - com.alibaba.csp - sentinel-core - + + + com.alibaba.csp + sentinel-core + - - com.squareup.okhttp3 - okhttp - ${okhttp.version} - provided - + + com.squareup.okhttp3 + okhttp + ${okhttp.version} + provided + - - junit - junit - test - - - org.mockito - mockito-core - test - - - com.alibaba - fastjson - test - - - org.springframework.boot - spring-boot-starter-web - ${spring.boot.version} - test - - - org.springframework.boot - spring-boot-test - ${spring.boot.version} - test - - - org.springframework - spring-test - ${spring-test.version} - test - - + + junit + junit + test + + + org.mockito + mockito-core + test + + + com.alibaba + fastjson + test + + + org.springframework.boot + spring-boot-starter-web + ${spring.boot.version} + test + + + org.springframework.boot + spring-boot-test + ${spring.boot.version} + test + + + org.springframework + spring-test + ${spring-test.version} + test + + \ No newline at end of file diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptor.java b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptor.java index 361a5db1ce..7de37f3fbe 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptor.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptor.java @@ -1,5 +1,5 @@ /* - * Copyright 1999-2018 Alibaba Group Holding Ltd. + * Copyright 1999-2020 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/DefaultOkHttpResourceExtractor.java b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/DefaultOkHttpResourceExtractor.java index 2ccc918d25..98cc2dfa14 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/DefaultOkHttpResourceExtractor.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/DefaultOkHttpResourceExtractor.java @@ -1,5 +1,5 @@ /* - * Copyright 1999-2018 Alibaba Group Holding Ltd. + * Copyright 1999-2020 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpResourceExtractor.java b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpResourceExtractor.java index 6aa0c9f5b3..dde17a85c0 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpResourceExtractor.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpResourceExtractor.java @@ -1,5 +1,5 @@ /* - * Copyright 1999-2018 Alibaba Group Holding Ltd. + * Copyright 1999-2020 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfig.java b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfig.java index b1c6a18871..5d7819c02f 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfig.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfig.java @@ -1,5 +1,5 @@ /* - * Copyright 1999-2018 Alibaba Group Holding Ltd. + * Copyright 1999-2020 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/DefaultOkHttpFallback.java b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/DefaultOkHttpFallback.java index 73c56a0563..6ece854fc3 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/DefaultOkHttpFallback.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/DefaultOkHttpFallback.java @@ -1,5 +1,5 @@ /* - * Copyright 1999-2018 Alibaba Group Holding Ltd. + * Copyright 1999-2020 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/OkHttpFallback.java b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/OkHttpFallback.java index 339dcc0b4c..4127c195fa 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/OkHttpFallback.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/OkHttpFallback.java @@ -1,5 +1,5 @@ /* - * Copyright 1999-2018 Alibaba Group Holding Ltd. + * Copyright 1999-2020 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java index 3a49fe8e25..8bee3f401a 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java @@ -1,5 +1,5 @@ /* - * Copyright 1999-2018 Alibaba Group Holding Ltd. + * Copyright 1999-2020 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/app/TestApplication.java b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/app/TestApplication.java index 04d72ee99f..8eef58939a 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/app/TestApplication.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/app/TestApplication.java @@ -1,5 +1,5 @@ /* - * Copyright 1999-2018 Alibaba Group Holding Ltd. + * Copyright 1999-2020 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/app/controller/TestController.java b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/app/controller/TestController.java index a701d19939..96dd3674c4 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/app/controller/TestController.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/app/controller/TestController.java @@ -1,5 +1,5 @@ /* - * Copyright 1999-2018 Alibaba Group Holding Ltd. + * Copyright 1999-2020 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpResourceExtractorTest.java b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpResourceExtractorTest.java index 4a326a61cd..28ea3c8248 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpResourceExtractorTest.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpResourceExtractorTest.java @@ -1,5 +1,5 @@ /* - * Copyright 1999-2018 Alibaba Group Holding Ltd. + * Copyright 1999-2020 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfigTest.java b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfigTest.java index 2605d0014a..b9f605530b 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfigTest.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfigTest.java @@ -1,5 +1,5 @@ /* - * Copyright 1999-2018 Alibaba Group Holding Ltd. + * Copyright 1999-2020 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/OkHttpFallbackTest.java b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/OkHttpFallbackTest.java index 7403a7782b..f355275393 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/OkHttpFallbackTest.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/fallback/OkHttpFallbackTest.java @@ -1,5 +1,5 @@ /* - * Copyright 1999-2018 Alibaba Group Holding Ltd. + * Copyright 1999-2020 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/sentinel-demo/sentinel-demo-okhttp/src/main/java/com/alibaba/csp/sentinel/demo/okhttp/OkHttpDemoApplication.java b/sentinel-demo/sentinel-demo-okhttp/src/main/java/com/alibaba/csp/sentinel/demo/okhttp/OkHttpDemoApplication.java index cf07c1cdfc..096e5822a5 100644 --- a/sentinel-demo/sentinel-demo-okhttp/src/main/java/com/alibaba/csp/sentinel/demo/okhttp/OkHttpDemoApplication.java +++ b/sentinel-demo/sentinel-demo-okhttp/src/main/java/com/alibaba/csp/sentinel/demo/okhttp/OkHttpDemoApplication.java @@ -1,5 +1,5 @@ /* - * Copyright 1999-2018 Alibaba Group Holding Ltd. + * Copyright 1999-2020 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/sentinel-demo/sentinel-demo-okhttp/src/main/java/com/alibaba/csp/sentinel/demo/okhttp/controller/OkHttpTestController.java b/sentinel-demo/sentinel-demo-okhttp/src/main/java/com/alibaba/csp/sentinel/demo/okhttp/controller/OkHttpTestController.java index dcd9ae2ce5..a0da1baca1 100644 --- a/sentinel-demo/sentinel-demo-okhttp/src/main/java/com/alibaba/csp/sentinel/demo/okhttp/controller/OkHttpTestController.java +++ b/sentinel-demo/sentinel-demo-okhttp/src/main/java/com/alibaba/csp/sentinel/demo/okhttp/controller/OkHttpTestController.java @@ -1,5 +1,5 @@ /* - * Copyright 1999-2018 Alibaba Group Holding Ltd. + * Copyright 1999-2020 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 6ab51b96a15d81577fb9834d089e0d808b67f1ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=8E=E7=8E=89=E6=A1=94?= Date: Thu, 7 May 2020 19:01:17 +0800 Subject: [PATCH 14/17] Update pom.xml --- sentinel-adapter/sentinel-jax-rs-adapter/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sentinel-adapter/sentinel-jax-rs-adapter/pom.xml b/sentinel-adapter/sentinel-jax-rs-adapter/pom.xml index 41e8282891..b0a94298ad 100755 --- a/sentinel-adapter/sentinel-jax-rs-adapter/pom.xml +++ b/sentinel-adapter/sentinel-jax-rs-adapter/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 From ed1209f5d6a8a53ce285014951b306f4caa094ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E7=A6=B9=E5=85=89?= Date: Fri, 8 May 2020 13:41:04 +0800 Subject: [PATCH 15/17] fix --- sentinel-demo/sentinel-demo-okhttp/pom.xml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/sentinel-demo/sentinel-demo-okhttp/pom.xml b/sentinel-demo/sentinel-demo-okhttp/pom.xml index 8894e3ac1e..25897f6075 100644 --- a/sentinel-demo/sentinel-demo-okhttp/pom.xml +++ b/sentinel-demo/sentinel-demo-okhttp/pom.xml @@ -17,10 +17,6 @@ - - com.alibaba.csp - sentinel-core - com.alibaba.csp sentinel-transport-simple-http From a5d7e02f6cf38d27c0b6bd9f7aef8d4889ad22eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E7=A6=B9=E5=85=89?= Date: Thu, 14 May 2020 14:36:49 +0800 Subject: [PATCH 16/17] fix --- .../okhttp/SentinelOkHttpInterceptor.java | 7 +++++-- .../okhttp/config/SentinelOkHttpConfig.java | 6 +++--- .../DefaultOkHttpResourceExtractor.java | 13 +++---------- .../OkHttpResourceExtractor.java | 4 ++-- .../okhttp/SentinelOkHttpInterceptorTest.java | 11 +++++------ .../OkHttpResourceExtractorTest.java | 18 ++++++++---------- .../demo/okhttp/OkHttpDemoApplication.java | 7 +++---- 7 files changed, 29 insertions(+), 37 deletions(-) rename sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/{cleaner => extractor}/DefaultOkHttpResourceExtractor.java (59%) rename sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/{cleaner => extractor}/OkHttpResourceExtractor.java (85%) rename sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/{cleaner => extractor}/OkHttpResourceExtractorTest.java (74%) diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptor.java b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptor.java index 7de37f3fbe..1df143277b 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptor.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptor.java @@ -19,6 +19,7 @@ import com.alibaba.csp.sentinel.adapter.okhttp.config.SentinelOkHttpConfig; import com.alibaba.csp.sentinel.slots.block.BlockException; import okhttp3.Interceptor; +import okhttp3.Request; import okhttp3.Response; import java.io.IOException; @@ -32,9 +33,11 @@ public class SentinelOkHttpInterceptor implements Interceptor { public Response intercept(Chain chain) throws IOException { Entry entry = null; try { - String name = SentinelOkHttpConfig.getExtractor().extract(chain.request(), chain.connection()); + Request request = chain.request(); + String url = request.method() + ":" + request.url().toString(); + String name = SentinelOkHttpConfig.getExtractor().extract(url, request, chain.connection()); entry = SphU.entry(name, ResourceTypeConstants.COMMON_WEB, EntryType.OUT); - return chain.proceed(chain.request()); + return chain.proceed(request); } catch (BlockException e) { return SentinelOkHttpConfig.getFallback().handle(chain.request(), chain.connection(), e); } catch (Throwable t) { diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfig.java b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfig.java index 5d7819c02f..48e986f7a0 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfig.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/config/SentinelOkHttpConfig.java @@ -15,8 +15,8 @@ */ package com.alibaba.csp.sentinel.adapter.okhttp.config; -import com.alibaba.csp.sentinel.adapter.okhttp.cleaner.DefaultOkHttpResourceExtractor; -import com.alibaba.csp.sentinel.adapter.okhttp.cleaner.OkHttpResourceExtractor; +import com.alibaba.csp.sentinel.adapter.okhttp.extractor.DefaultOkHttpResourceExtractor; +import com.alibaba.csp.sentinel.adapter.okhttp.extractor.OkHttpResourceExtractor; import com.alibaba.csp.sentinel.adapter.okhttp.fallback.DefaultOkHttpFallback; import com.alibaba.csp.sentinel.adapter.okhttp.fallback.OkHttpFallback; import com.alibaba.csp.sentinel.util.AssertUtil; @@ -26,7 +26,7 @@ */ public final class SentinelOkHttpConfig { - private static volatile String prefix = ""; + private static volatile String prefix = "okhttp:"; private static volatile OkHttpResourceExtractor extractor = new DefaultOkHttpResourceExtractor(); private static volatile OkHttpFallback fallback = new DefaultOkHttpFallback(); diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/DefaultOkHttpResourceExtractor.java b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/extractor/DefaultOkHttpResourceExtractor.java similarity index 59% rename from sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/DefaultOkHttpResourceExtractor.java rename to sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/extractor/DefaultOkHttpResourceExtractor.java index 98cc2dfa14..dd00c26b36 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/DefaultOkHttpResourceExtractor.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/extractor/DefaultOkHttpResourceExtractor.java @@ -13,10 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.alibaba.csp.sentinel.adapter.okhttp.cleaner; +package com.alibaba.csp.sentinel.adapter.okhttp.extractor; -import com.alibaba.csp.sentinel.adapter.okhttp.config.SentinelOkHttpConfig; -import com.alibaba.csp.sentinel.util.StringUtil; import okhttp3.Connection; import okhttp3.Request; @@ -26,12 +24,7 @@ public class DefaultOkHttpResourceExtractor implements OkHttpResourceExtractor { @Override - public String extract(Request request, Connection connection) { - StringBuilder buf = new StringBuilder(64); - if (!StringUtil.isEmpty(SentinelOkHttpConfig.getPrefix())) { - buf.append(SentinelOkHttpConfig.getPrefix()); - } - buf.append(request.method()).append(":").append(request.url().toString()); - return buf.toString(); + public String extract(String url, Request request, Connection connection) { + return url; } } diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpResourceExtractor.java b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/extractor/OkHttpResourceExtractor.java similarity index 85% rename from sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpResourceExtractor.java rename to sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/extractor/OkHttpResourceExtractor.java index dde17a85c0..2a376d41dc 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpResourceExtractor.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/extractor/OkHttpResourceExtractor.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.alibaba.csp.sentinel.adapter.okhttp.cleaner; +package com.alibaba.csp.sentinel.adapter.okhttp.extractor; import okhttp3.Connection; import okhttp3.Request; @@ -23,5 +23,5 @@ */ public interface OkHttpResourceExtractor { - String extract(Request request, Connection connection); + String extract(String url, Request request, Connection connection); } diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java index 8bee3f401a..a7b2a43a98 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java @@ -17,7 +17,7 @@ import com.alibaba.csp.sentinel.Constants; import com.alibaba.csp.sentinel.adapter.okhttp.app.TestApplication; -import com.alibaba.csp.sentinel.adapter.okhttp.cleaner.OkHttpResourceExtractor; +import com.alibaba.csp.sentinel.adapter.okhttp.extractor.OkHttpResourceExtractor; import com.alibaba.csp.sentinel.adapter.okhttp.config.SentinelOkHttpConfig; import com.alibaba.csp.sentinel.node.ClusterNode; import com.alibaba.csp.sentinel.slots.clusterbuilder.ClusterBuilderSlot; @@ -58,7 +58,7 @@ public void testSentinelOkHttpInterceptor0() throws Exception { .url(url0) .build(); System.out.println(client.newCall(request).execute().body().string()); - ClusterNode cn = ClusterBuilderSlot.getClusterNode("okhttp:GET:" + url0); + ClusterNode cn = ClusterBuilderSlot.getClusterNode("GET:" + url0); assertNotNull(cn); Constants.ROOT.removeChildList(); @@ -71,13 +71,12 @@ public void testSentinelOkHttpInterceptor1() throws Exception { String url0 = "http://localhost:" + port + "/okhttp/back/1"; SentinelOkHttpConfig.setExtractor(new OkHttpResourceExtractor() { @Override - public String extract(Request request, Connection connection) { - String url = request.url().toString(); + public String extract(String url, Request request, Connection connection) { String regex = "/okhttp/back/"; if (url.contains(regex)) { url = url.substring(0, url.indexOf(regex) + regex.length()) + "{id}"; } - return url; + return SentinelOkHttpConfig.getPrefix() + url; } }); OkHttpClient client = new OkHttpClient.Builder() @@ -88,7 +87,7 @@ public String extract(Request request, Connection connection) { .build(); System.out.println(client.newCall(request).execute().body().string()); - String url1 = "http://localhost:" + port + "/okhttp/back/{id}"; + String url1 = SentinelOkHttpConfig.getPrefix() + "GET:http://localhost:" + port + "/okhttp/back/{id}"; ClusterNode cn = ClusterBuilderSlot.getClusterNode(url1); assertNotNull(cn); diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpResourceExtractorTest.java b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/extractor/OkHttpResourceExtractorTest.java similarity index 74% rename from sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpResourceExtractorTest.java rename to sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/extractor/OkHttpResourceExtractorTest.java index 28ea3c8248..a4dd2d9e53 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/cleaner/OkHttpResourceExtractorTest.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/extractor/OkHttpResourceExtractorTest.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.alibaba.csp.sentinel.adapter.okhttp.cleaner; +package com.alibaba.csp.sentinel.adapter.okhttp.extractor; import com.alibaba.csp.sentinel.adapter.okhttp.config.SentinelOkHttpConfig; import okhttp3.Connection; @@ -29,35 +29,33 @@ public class OkHttpResourceExtractorTest { @Test public void testDefaultOkHttpResourceExtractor() { - SentinelOkHttpConfig.setPrefix("okhttp:"); OkHttpResourceExtractor extractor = new DefaultOkHttpResourceExtractor(); String url = "http://localhost:8083/okhttp/back"; Request request = new Request.Builder() .url(url) .build(); - extractor.extract(request, null); - System.out.println(extractor.extract(request, null)); - assertEquals("okhttp:GET:" + url, extractor.extract(request, null)); + extractor.extract(url, request, null); + System.out.println(extractor.extract(url, request, null)); + assertEquals(url, extractor.extract(url, request, null)); } @Test public void testCustomizeOkHttpUrlCleaner() { OkHttpResourceExtractor extractor = new OkHttpResourceExtractor() { @Override - public String extract(Request request, Connection connection) { - String url = request.url().toString(); + public String extract(String url, Request request, Connection connection) { String regex = "/okhttp/back/"; if (url.contains(regex)) { url = url.substring(0, url.indexOf(regex) + regex.length()) + "{id}"; } - return url; + return SentinelOkHttpConfig.getPrefix() + url; } }; String url = "http://localhost:8083/okhttp/back/abc"; Request request = new Request.Builder() .url(url) .build(); - extractor.extract(request, null); - assertEquals("http://localhost:8083/okhttp/back/{id}", extractor.extract(request, null)); + extractor.extract(url, request, null); + assertEquals(SentinelOkHttpConfig.getPrefix() + "http://localhost:8083/okhttp/back/{id}", extractor.extract(url, request, null)); } } \ No newline at end of file diff --git a/sentinel-demo/sentinel-demo-okhttp/src/main/java/com/alibaba/csp/sentinel/demo/okhttp/OkHttpDemoApplication.java b/sentinel-demo/sentinel-demo-okhttp/src/main/java/com/alibaba/csp/sentinel/demo/okhttp/OkHttpDemoApplication.java index 096e5822a5..c101ac913f 100644 --- a/sentinel-demo/sentinel-demo-okhttp/src/main/java/com/alibaba/csp/sentinel/demo/okhttp/OkHttpDemoApplication.java +++ b/sentinel-demo/sentinel-demo-okhttp/src/main/java/com/alibaba/csp/sentinel/demo/okhttp/OkHttpDemoApplication.java @@ -15,8 +15,8 @@ */ package com.alibaba.csp.sentinel.demo.okhttp; -import com.alibaba.csp.sentinel.adapter.okhttp.cleaner.OkHttpResourceExtractor; import com.alibaba.csp.sentinel.adapter.okhttp.config.SentinelOkHttpConfig; +import com.alibaba.csp.sentinel.adapter.okhttp.extractor.OkHttpResourceExtractor; import okhttp3.Connection; import okhttp3.Request; import org.springframework.boot.CommandLineRunner; @@ -37,13 +37,12 @@ public static void main(String[] args) { public void run(String... args) { SentinelOkHttpConfig.setExtractor(new OkHttpResourceExtractor() { @Override - public String extract(Request request, Connection connection) { - String url = request.url().toString(); + public String extract(String url, Request request, Connection connection) { String regex = "/okhttp/back/"; if (url.contains(regex)) { url = url.substring(0, url.indexOf(regex) + regex.length()) + "{id}"; } - return url; + return SentinelOkHttpConfig.getPrefix() + url; } }); } From c144ac682df27727e14dfd42d00f65e234fe64e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E7=A6=B9=E5=85=89?= Date: Thu, 14 May 2020 16:29:48 +0800 Subject: [PATCH 17/17] fix --- .../sentinel/adapter/okhttp/SentinelOkHttpInterceptor.java | 7 +++++-- .../okhttp/extractor/DefaultOkHttpResourceExtractor.java | 2 +- .../adapter/okhttp/SentinelOkHttpInterceptorTest.java | 6 +++--- .../okhttp/extractor/OkHttpResourceExtractorTest.java | 6 +++--- .../csp/sentinel/demo/okhttp/OkHttpDemoApplication.java | 2 +- 5 files changed, 13 insertions(+), 10 deletions(-) diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptor.java b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptor.java index 1df143277b..0e8f54a3ad 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptor.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptor.java @@ -18,6 +18,7 @@ import com.alibaba.csp.sentinel.*; import com.alibaba.csp.sentinel.adapter.okhttp.config.SentinelOkHttpConfig; import com.alibaba.csp.sentinel.slots.block.BlockException; +import com.alibaba.csp.sentinel.util.StringUtil; import okhttp3.Interceptor; import okhttp3.Request; import okhttp3.Response; @@ -34,8 +35,10 @@ public Response intercept(Chain chain) throws IOException { Entry entry = null; try { Request request = chain.request(); - String url = request.method() + ":" + request.url().toString(); - String name = SentinelOkHttpConfig.getExtractor().extract(url, request, chain.connection()); + String name = SentinelOkHttpConfig.getExtractor().extract(request.url().toString(), request, chain.connection()); + if (!StringUtil.isEmpty(SentinelOkHttpConfig.getPrefix())) { + name = SentinelOkHttpConfig.getPrefix() + name; + } entry = SphU.entry(name, ResourceTypeConstants.COMMON_WEB, EntryType.OUT); return chain.proceed(request); } catch (BlockException e) { diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/extractor/DefaultOkHttpResourceExtractor.java b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/extractor/DefaultOkHttpResourceExtractor.java index dd00c26b36..1a7cc2bc96 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/extractor/DefaultOkHttpResourceExtractor.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/okhttp/extractor/DefaultOkHttpResourceExtractor.java @@ -25,6 +25,6 @@ public class DefaultOkHttpResourceExtractor implements OkHttpResourceExtractor { @Override public String extract(String url, Request request, Connection connection) { - return url; + return request.method() + ":" + request.url().toString(); } } diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java index a7b2a43a98..4f831b9b12 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/SentinelOkHttpInterceptorTest.java @@ -17,8 +17,8 @@ import com.alibaba.csp.sentinel.Constants; import com.alibaba.csp.sentinel.adapter.okhttp.app.TestApplication; -import com.alibaba.csp.sentinel.adapter.okhttp.extractor.OkHttpResourceExtractor; import com.alibaba.csp.sentinel.adapter.okhttp.config.SentinelOkHttpConfig; +import com.alibaba.csp.sentinel.adapter.okhttp.extractor.OkHttpResourceExtractor; import com.alibaba.csp.sentinel.node.ClusterNode; import com.alibaba.csp.sentinel.slots.clusterbuilder.ClusterBuilderSlot; import okhttp3.Connection; @@ -58,7 +58,7 @@ public void testSentinelOkHttpInterceptor0() throws Exception { .url(url0) .build(); System.out.println(client.newCall(request).execute().body().string()); - ClusterNode cn = ClusterBuilderSlot.getClusterNode("GET:" + url0); + ClusterNode cn = ClusterBuilderSlot.getClusterNode(SentinelOkHttpConfig.getPrefix() + "GET:" + url0); assertNotNull(cn); Constants.ROOT.removeChildList(); @@ -76,7 +76,7 @@ public String extract(String url, Request request, Connection connection) { if (url.contains(regex)) { url = url.substring(0, url.indexOf(regex) + regex.length()) + "{id}"; } - return SentinelOkHttpConfig.getPrefix() + url; + return request.method() + ":" + url; } }); OkHttpClient client = new OkHttpClient.Builder() diff --git a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/extractor/OkHttpResourceExtractorTest.java b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/extractor/OkHttpResourceExtractorTest.java index a4dd2d9e53..c414dad9ad 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/extractor/OkHttpResourceExtractorTest.java +++ b/sentinel-adapter/sentinel-okhttp-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/okhttp/extractor/OkHttpResourceExtractorTest.java @@ -36,7 +36,7 @@ public void testDefaultOkHttpResourceExtractor() { .build(); extractor.extract(url, request, null); System.out.println(extractor.extract(url, request, null)); - assertEquals(url, extractor.extract(url, request, null)); + assertEquals("GET:"+url, extractor.extract(url, request, null)); } @Test @@ -48,7 +48,7 @@ public String extract(String url, Request request, Connection connection) { if (url.contains(regex)) { url = url.substring(0, url.indexOf(regex) + regex.length()) + "{id}"; } - return SentinelOkHttpConfig.getPrefix() + url; + return request.method() + ":" + url; } }; String url = "http://localhost:8083/okhttp/back/abc"; @@ -56,6 +56,6 @@ public String extract(String url, Request request, Connection connection) { .url(url) .build(); extractor.extract(url, request, null); - assertEquals(SentinelOkHttpConfig.getPrefix() + "http://localhost:8083/okhttp/back/{id}", extractor.extract(url, request, null)); + assertEquals("GET:http://localhost:8083/okhttp/back/{id}", extractor.extract(url, request, null)); } } \ No newline at end of file diff --git a/sentinel-demo/sentinel-demo-okhttp/src/main/java/com/alibaba/csp/sentinel/demo/okhttp/OkHttpDemoApplication.java b/sentinel-demo/sentinel-demo-okhttp/src/main/java/com/alibaba/csp/sentinel/demo/okhttp/OkHttpDemoApplication.java index c101ac913f..182a62a8f8 100644 --- a/sentinel-demo/sentinel-demo-okhttp/src/main/java/com/alibaba/csp/sentinel/demo/okhttp/OkHttpDemoApplication.java +++ b/sentinel-demo/sentinel-demo-okhttp/src/main/java/com/alibaba/csp/sentinel/demo/okhttp/OkHttpDemoApplication.java @@ -42,7 +42,7 @@ public String extract(String url, Request request, Connection connection) { if (url.contains(regex)) { url = url.substring(0, url.indexOf(regex) + regex.length()) + "{id}"; } - return SentinelOkHttpConfig.getPrefix() + url; + return request.method() + ":" + url; } }); }