From 151d8aa8842d33b5cb1ea80ff5ade6c3a82651ac Mon Sep 17 00:00:00 2001 From: liweijian Date: Tue, 25 Apr 2023 10:17:23 +0800 Subject: [PATCH 1/5] =?UTF-8?q?feature:=E5=8A=A0=E5=85=A5=E5=90=84?= =?UTF-8?q?=E7=A7=8D=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mse-go-demo/a-server/go.mod | 2 +- mse-go-demo/b-server/go.mod | 2 +- mse-go-demo/c-server/go.mod | 2 +- .../alibabacloud/mse/demo/a/AController.java | 4 +++- .../demo/a/service/FeignClientFallback.java | 2 ++ .../mse/demo/a/service/FeignClientTest.java | 1 + .../src/main/resources/application.properties | 19 ++++++++++++++++++- 7 files changed, 27 insertions(+), 5 deletions(-) diff --git a/mse-go-demo/a-server/go.mod b/mse-go-demo/a-server/go.mod index 1070ac89..c1945077 100644 --- a/mse-go-demo/a-server/go.mod +++ b/mse-go-demo/a-server/go.mod @@ -4,6 +4,7 @@ go 1.19 require ( google.golang.org/grpc v1.40.0 + google.golang.org/protobuf v1.27.1 ) require ( @@ -12,5 +13,4 @@ require ( golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd // indirect golang.org/x/text v0.3.0 // indirect google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 // indirect - google.golang.org/protobuf v1.27.1 // indirect ) diff --git a/mse-go-demo/b-server/go.mod b/mse-go-demo/b-server/go.mod index 871928bf..ae4b3902 100644 --- a/mse-go-demo/b-server/go.mod +++ b/mse-go-demo/b-server/go.mod @@ -4,6 +4,7 @@ go 1.19 require ( google.golang.org/grpc v1.40.0 + google.golang.org/protobuf v1.27.1 ) require ( @@ -12,5 +13,4 @@ require ( golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd // indirect golang.org/x/text v0.3.0 // indirect google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 // indirect - google.golang.org/protobuf v1.27.1 // indirect ) diff --git a/mse-go-demo/c-server/go.mod b/mse-go-demo/c-server/go.mod index e9b3df80..1c1d1cdd 100644 --- a/mse-go-demo/c-server/go.mod +++ b/mse-go-demo/c-server/go.mod @@ -4,6 +4,7 @@ go 1.19 require ( google.golang.org/grpc v1.40.0 + google.golang.org/protobuf v1.27.1 ) require ( @@ -12,5 +13,4 @@ require ( golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd // indirect golang.org/x/text v0.3.0 // indirect google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 // indirect - google.golang.org/protobuf v1.27.1 // indirect ) diff --git a/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/a/AController.java b/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/a/AController.java index c897e48d..cd39eeef 100644 --- a/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/a/AController.java +++ b/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/a/AController.java @@ -68,6 +68,7 @@ private void init() { .setConnectTimeout(1000) .setSocketTimeout(1000) .build(); + //在阿里云中判断在哪个地区的内网服务地址,如杭州会输出cn-hangzhou-g HttpGet req = new HttpGet("http://100.100.100.200/latest/meta-data/zone-id"); req.setConfig(requestConfig); HttpResponse response = client.execute(req); @@ -81,6 +82,7 @@ private void init() { @GetMapping("/a") public String a(HttpServletRequest request) throws ExecutionException, InterruptedException { StringBuilder headerSb = new StringBuilder(); + //枚举创建完后无法更改 Enumeration enumeration = request.getHeaderNames(); while (enumeration.hasMoreElements()) { String headerName = enumeration.nextElement(); @@ -90,7 +92,7 @@ public String a(HttpServletRequest request) throws ExecutionException, Interrupt headerSb.append(headerName + ":" + headerVal + ","); } } - + //这是rpc调用的方式 String result = loadBalancedRestTemplate.getForObject("http://sc-B/b", String.class); return "A" + serviceTag + "[" + inetUtils.findFirstNonLoopbackAddress().getHostAddress() + "]" + diff --git a/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/a/service/FeignClientFallback.java b/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/a/service/FeignClientFallback.java index 515e46ac..7208c77a 100644 --- a/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/a/service/FeignClientFallback.java +++ b/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/a/service/FeignClientFallback.java @@ -6,6 +6,7 @@ @Component public class FeignClientFallback implements FallbackFactory { + static class FeignClientTestFallback implements FeignClientTest { private final String finalMsg; @@ -30,6 +31,7 @@ public String circuit_breaker_exception_b() { } } + // @Override public FeignClientTest create(Throwable throwable) { if (throwable == null) { diff --git a/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/a/service/FeignClientTest.java b/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/a/service/FeignClientTest.java index 0432bae4..31813fdd 100644 --- a/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/a/service/FeignClientTest.java +++ b/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/a/service/FeignClientTest.java @@ -9,6 +9,7 @@ * @author yushan * @date 2023年02月21日 */ +//这是springcloud RPCFeignClient的调用方式 @Component @FeignClient(name = "sc-B", fallbackFactory = FeignClientFallback.class) public interface FeignClientTest { diff --git a/mse-simple-demo/A/src/main/resources/application.properties b/mse-simple-demo/A/src/main/resources/application.properties index 90e96bb0..a30825fc 100644 --- a/mse-simple-demo/A/src/main/resources/application.properties +++ b/mse-simple-demo/A/src/main/resources/application.properties @@ -1,25 +1,42 @@ +#???nocas???host nacos.host=nacos-server nacos.namespace=public - +#springcloud???????? spring.application.name=sc-A server.port=20001 +#springcloud??????? spring.cloud.nacos.discovery.server-addr=${nacos.host}:8848 +#springcloud????????? spring.cloud.nacos.discovery.namespace=${nacos.namespace} +#dubbo????application Id dubbo.application.id=dubbo-provider-A +#dubbo????application ?? dubbo.application.name=dubbo-provider-A +#dubbo ??? dubbo.protocol.id=dubbo +#dubbo ????id dubbo.registry.id=nacos +#dubbo ?????? dubbo.registry.address=nacos://${nacos.host}:8848 +#dubbo ????????? dubbo.registry.parameters.namespace=${nacos.namespace} +#???????????????????????????????true??Dubbo????????????????????????????????false??Dubbo?????????????????? dubbo.consumer.check=false +#dubbo???????? dubbo.scan.base-packages=com.alibabacloud.mse.demo +#dubbo????? dubbo.protocol.port=38080 +#??????????????????????true??Dubbo???????????????????????????Dubbo???????????????????false??Dubbo????????????? dubbo.registry.check=false +#???topic rocketmq.consumer.topic=TEST_MQ +#?????id rocketmq.consumer.group=test-a +#mq??? middleware.mq.address=mqnamesrv:9876 +#???????value custom.config.value=base \ No newline at end of file From 09adac909e8c49b76ef5d9d45328eff46049da21 Mon Sep 17 00:00:00 2001 From: lwj Date: Sat, 6 May 2023 14:49:37 +0800 Subject: [PATCH 2/5] =?UTF-8?q?feature:=E5=8A=A0=E5=85=A5SpringCloudGatewy?= =?UTF-8?q?=E3=80=81B=E6=9C=8D=E5=8A=A1=E5=92=8CC=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=A2=9E=E5=8A=A02=E4=B8=AAdubbo=E6=B3=A8=E5=86=8C=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E3=80=81=E5=8D=87=E7=BA=A7=E7=89=88=E6=9C=AC=E4=B8=BA?= =?UTF-8?q?3.0.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mse-simple-demo/A/Dockerfile | 1 + mse-simple-demo/A/build.sh | 12 +- mse-simple-demo/A/pom.xml | 2 +- .../alibabacloud/mse/demo/a/AController.java | 22 + .../mse/demo/b/service/HelloServiceBTwo.java | 7 + .../src/main/resources/application.properties | 19 +- mse-simple-demo/B/Dockerfile | 1 + mse-simple-demo/B/build.sh | 11 +- mse-simple-demo/B/pom.xml | 2 +- .../mse/demo/b/service/HelloServiceBTwo.java | 7 + .../demo/b/service/HelloServiceBTwoImpl.java | 62 +++ .../mse/demo/c/service/HelloServiceCTwo.java | 6 + mse-simple-demo/C/Dockerfile | 1 + mse-simple-demo/C/build.sh | 10 +- mse-simple-demo/C/pom.xml | 2 +- .../mse/demo/c/service/HelloServiceCTwo.java | 6 + .../demo/c/service/HelloServiceCTwoImpl.java | 66 +++ mse-simple-demo/SpringCloudGateway/Dockerfile | 43 ++ mse-simple-demo/SpringCloudGateway/build.sh | 15 + mse-simple-demo/SpringCloudGateway/pom.xml | 67 ++++ .../alibabcloud/mse/demo/DemoController.java | 378 ++++++++++++++++++ .../demo/ModifyPathGatewayFilterFactory.java | 53 +++ .../demo/SpringCloudGatewayApplication.java | 38 ++ .../src/main/resources/application.properties | 35 ++ .../src/main/resources/templates/index.html | 0 .../{gateway => ZuulGateway}/Dockerfile | 5 +- mse-simple-demo/ZuulGateway/build.sh | 16 + .../{gateway => ZuulGateway}/pom.xml | 4 +- .../alibabacloud/mse/demo/DemoController.java | 48 ++- .../mse/demo/ZuulApplication.java | 0 .../src/main/resources/application.properties | 2 +- .../src/main/resources/templates/index.html | 76 ++++ mse-simple-demo/build.sh | 6 +- mse-simple-demo/gateway/build.sh | 10 - .../helm/mse-simple-demo/README.md | 4 +- .../spring-cloud-gateway-deployment.yaml | 63 +++ .../spring-cloud-gateway-service.yaml | 18 + ...ment.yaml => zuul-gateway-deployment.yaml} | 2 + ...service.yaml => zuul-gateway-service.yaml} | 2 + .../helm/mse-simple-demo/values.yaml | 9 +- mse-simple-demo/mysql/build.sh | 9 +- mse-simple-demo/pom.xml | 11 +- 42 files changed, 1099 insertions(+), 52 deletions(-) create mode 100644 mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/b/service/HelloServiceBTwo.java create mode 100644 mse-simple-demo/B/src/main/java/com/alibabacloud/mse/demo/b/service/HelloServiceBTwo.java create mode 100644 mse-simple-demo/B/src/main/java/com/alibabacloud/mse/demo/b/service/HelloServiceBTwoImpl.java create mode 100644 mse-simple-demo/B/src/main/java/com/alibabacloud/mse/demo/c/service/HelloServiceCTwo.java create mode 100644 mse-simple-demo/C/src/main/java/com/alibabacloud/mse/demo/c/service/HelloServiceCTwo.java create mode 100644 mse-simple-demo/C/src/main/java/com/alibabacloud/mse/demo/c/service/HelloServiceCTwoImpl.java create mode 100644 mse-simple-demo/SpringCloudGateway/Dockerfile create mode 100755 mse-simple-demo/SpringCloudGateway/build.sh create mode 100644 mse-simple-demo/SpringCloudGateway/pom.xml create mode 100644 mse-simple-demo/SpringCloudGateway/src/main/java/com/alibabcloud/mse/demo/DemoController.java create mode 100644 mse-simple-demo/SpringCloudGateway/src/main/java/com/alibabcloud/mse/demo/ModifyPathGatewayFilterFactory.java create mode 100644 mse-simple-demo/SpringCloudGateway/src/main/java/com/alibabcloud/mse/demo/SpringCloudGatewayApplication.java create mode 100644 mse-simple-demo/SpringCloudGateway/src/main/resources/application.properties rename mse-simple-demo/{gateway => SpringCloudGateway}/src/main/resources/templates/index.html (100%) rename mse-simple-demo/{gateway => ZuulGateway}/Dockerfile (82%) create mode 100755 mse-simple-demo/ZuulGateway/build.sh rename mse-simple-demo/{gateway => ZuulGateway}/pom.xml (96%) rename mse-simple-demo/{gateway => ZuulGateway}/src/main/java/com/alibabacloud/mse/demo/DemoController.java (88%) rename mse-simple-demo/{gateway => ZuulGateway}/src/main/java/com/alibabacloud/mse/demo/ZuulApplication.java (100%) rename mse-simple-demo/{gateway => ZuulGateway}/src/main/resources/application.properties (92%) create mode 100644 mse-simple-demo/ZuulGateway/src/main/resources/templates/index.html delete mode 100755 mse-simple-demo/gateway/build.sh create mode 100644 mse-simple-demo/helm/mse-simple-demo/templates/spring-cloud-gateway-deployment.yaml create mode 100644 mse-simple-demo/helm/mse-simple-demo/templates/spring-cloud-gateway-service.yaml rename mse-simple-demo/helm/mse-simple-demo/templates/{gateway-deployment.yaml => zuul-gateway-deployment.yaml} (98%) rename mse-simple-demo/helm/mse-simple-demo/templates/{gateway-service.yaml => zuul-gateway-service.yaml} (89%) diff --git a/mse-simple-demo/A/Dockerfile b/mse-simple-demo/A/Dockerfile index 63470447..5edc19fa 100644 --- a/mse-simple-demo/A/Dockerfile +++ b/mse-simple-demo/A/Dockerfile @@ -36,6 +36,7 @@ FROM dragonwell-registry.cn-hangzhou.cr.aliyuncs.com/dragonwell/dragonwell:8-ext COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas COPY --from=build /app/target/A.jar /app/target/A.jar +#COPY ./target/A.jar /app/target/A.jar EXPOSE 20001 ENTRYPOINT ["sh", "-c"] diff --git a/mse-simple-demo/A/build.sh b/mse-simple-demo/A/build.sh index a9ff0a80..11b8362c 100755 --- a/mse-simple-demo/A/build.sh +++ b/mse-simple-demo/A/build.sh @@ -1,10 +1,16 @@ #!/bin/sh + +export REGISTRY=${REGISTRY} + +export appName=spring-cloud-a +export version=3.0.1 + set -e cd "$(dirname "$0")" -docker build --platform linux/amd64 . -t ${REGISTRY}spring-cloud-a:2.0.2 +docker build --platform linux/amd64 . -t ${REGISTRY}${appName}:${version} if [ -n "${REGISTRY}" ]; then - docker push ${REGISTRY}spring-cloud-a:2.0.2 -fi + docker push ${REGISTRY}${appName}:${version} +fi \ No newline at end of file diff --git a/mse-simple-demo/A/pom.xml b/mse-simple-demo/A/pom.xml index 02532692..f1bf4ea9 100644 --- a/mse-simple-demo/A/pom.xml +++ b/mse-simple-demo/A/pom.xml @@ -5,7 +5,7 @@ com.alibabacloud.mse.demo A - 2.0.2 + ${all.project.version} jar A diff --git a/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/a/AController.java b/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/a/AController.java index cd39eeef..d8ff0bb8 100644 --- a/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/a/AController.java +++ b/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/a/AController.java @@ -3,6 +3,7 @@ import com.alibabacloud.mse.demo.a.service.FeignClientTest; import com.alibabacloud.mse.demo.b.service.HelloServiceB; import com.alibaba.fastjson.JSON; +import com.alibabacloud.mse.demo.b.service.HelloServiceBTwo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; @@ -51,6 +52,9 @@ class AController { @Reference(application = "${dubbo.application.id}", version = "1.2.0") private HelloServiceB helloServiceB; + @Reference(application = "${dubbo.application.id}", version = "1.2.0") + private HelloServiceBTwo helloServiceBTwo; + @Autowired String serviceTag; @@ -230,6 +234,24 @@ public String dubbo(HttpServletRequest request) { helloServiceB.hello(JSON.toJSONString(request.getParameterMap())); } + + @ApiOperation(value = "Dubbo 全链路灰度入口", tags = {"入口应用"}) + @GetMapping("/dubbo2") + public String dubbo2(HttpServletRequest request) { + StringBuilder headerSb = new StringBuilder(); + Enumeration enumeration = request.getHeaderNames(); + while (enumeration.hasMoreElements()) { + String headerName = enumeration.nextElement(); + Enumeration val = request.getHeaders(headerName); + while (val.hasMoreElements()) { + String headerVal = val.nextElement(); + headerSb.append(headerName + ":" + headerVal + ","); + } + } + return "A" + serviceTag + "[" + inetUtils.findFirstNonLoopbackAddress().getHostAddress() + "]" + " -> " + + helloServiceBTwo.hello(JSON.toJSONString(request.getParameterMap())); + } + @ApiOperation(value = "Dubbo 限流测试", tags = {"入口应用"}) @GetMapping("/dubbo-flow") public String dubbo_flow(HttpServletRequest request) { diff --git a/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/b/service/HelloServiceBTwo.java b/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/b/service/HelloServiceBTwo.java new file mode 100644 index 00000000..594c00e1 --- /dev/null +++ b/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/b/service/HelloServiceBTwo.java @@ -0,0 +1,7 @@ +package com.alibabacloud.mse.demo.b.service; + +public interface HelloServiceBTwo { + String hello(String name); + String slow(); + String exception(); +} diff --git a/mse-simple-demo/A/src/main/resources/application.properties b/mse-simple-demo/A/src/main/resources/application.properties index a30825fc..90e96bb0 100644 --- a/mse-simple-demo/A/src/main/resources/application.properties +++ b/mse-simple-demo/A/src/main/resources/application.properties @@ -1,42 +1,25 @@ -#???nocas???host nacos.host=nacos-server nacos.namespace=public -#springcloud???????? + spring.application.name=sc-A server.port=20001 -#springcloud??????? spring.cloud.nacos.discovery.server-addr=${nacos.host}:8848 -#springcloud????????? spring.cloud.nacos.discovery.namespace=${nacos.namespace} -#dubbo????application Id dubbo.application.id=dubbo-provider-A -#dubbo????application ?? dubbo.application.name=dubbo-provider-A -#dubbo ??? dubbo.protocol.id=dubbo -#dubbo ????id dubbo.registry.id=nacos -#dubbo ?????? dubbo.registry.address=nacos://${nacos.host}:8848 -#dubbo ????????? dubbo.registry.parameters.namespace=${nacos.namespace} -#???????????????????????????????true??Dubbo????????????????????????????????false??Dubbo?????????????????? dubbo.consumer.check=false -#dubbo???????? dubbo.scan.base-packages=com.alibabacloud.mse.demo -#dubbo????? dubbo.protocol.port=38080 -#??????????????????????true??Dubbo???????????????????????????Dubbo???????????????????false??Dubbo????????????? dubbo.registry.check=false -#???topic rocketmq.consumer.topic=TEST_MQ -#?????id rocketmq.consumer.group=test-a -#mq??? middleware.mq.address=mqnamesrv:9876 -#???????value custom.config.value=base \ No newline at end of file diff --git a/mse-simple-demo/B/Dockerfile b/mse-simple-demo/B/Dockerfile index 21f72653..14d4be72 100644 --- a/mse-simple-demo/B/Dockerfile +++ b/mse-simple-demo/B/Dockerfile @@ -32,6 +32,7 @@ FROM dragonwell-registry.cn-hangzhou.cr.aliyuncs.com/dragonwell/dragonwell:8-ext COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas COPY --from=build /app/target/B.jar /app/target/B.jar +#COPY ./target/B.jar /app/target/B.jar EXPOSE 20002 ENTRYPOINT ["sh", "-c"] diff --git a/mse-simple-demo/B/build.sh b/mse-simple-demo/B/build.sh index cc7c9bbc..50b5068f 100755 --- a/mse-simple-demo/B/build.sh +++ b/mse-simple-demo/B/build.sh @@ -1,9 +1,16 @@ #!/bin/sh +export REGISTRY=${REGISTRY} + +export appName=spring-cloud-b +export version=3.0.1 + +set -e + cd "$(dirname "$0")" -docker build --platform linux/amd64 . -t ${REGISTRY}spring-cloud-b:2.0.2 +docker build --platform linux/amd64 . -t ${REGISTRY}${appName}:${version} if [ -n "${REGISTRY}" ]; then - docker push ${REGISTRY}spring-cloud-b:2.0.2 + docker push ${REGISTRY}${appName}:${version} fi diff --git a/mse-simple-demo/B/pom.xml b/mse-simple-demo/B/pom.xml index ea5337af..db35e1a6 100644 --- a/mse-simple-demo/B/pom.xml +++ b/mse-simple-demo/B/pom.xml @@ -5,7 +5,7 @@ com.alibabacloud.mse.demo B - 2.0.2 + ${all.project.version} jar B diff --git a/mse-simple-demo/B/src/main/java/com/alibabacloud/mse/demo/b/service/HelloServiceBTwo.java b/mse-simple-demo/B/src/main/java/com/alibabacloud/mse/demo/b/service/HelloServiceBTwo.java new file mode 100644 index 00000000..594c00e1 --- /dev/null +++ b/mse-simple-demo/B/src/main/java/com/alibabacloud/mse/demo/b/service/HelloServiceBTwo.java @@ -0,0 +1,7 @@ +package com.alibabacloud.mse.demo.b.service; + +public interface HelloServiceBTwo { + String hello(String name); + String slow(); + String exception(); +} diff --git a/mse-simple-demo/B/src/main/java/com/alibabacloud/mse/demo/b/service/HelloServiceBTwoImpl.java b/mse-simple-demo/B/src/main/java/com/alibabacloud/mse/demo/b/service/HelloServiceBTwoImpl.java new file mode 100644 index 00000000..cf2decfd --- /dev/null +++ b/mse-simple-demo/B/src/main/java/com/alibabacloud/mse/demo/b/service/HelloServiceBTwoImpl.java @@ -0,0 +1,62 @@ +package com.alibabacloud.mse.demo.b.service; + +import com.alibabacloud.mse.demo.c.service.HelloServiceC; +import com.alibabacloud.mse.demo.c.service.HelloServiceCTwo; +import com.alibabacloud.mse.demo.common.TrafficAttribute; +import org.apache.dubbo.config.annotation.Reference; +import org.apache.dubbo.config.annotation.Service; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.commons.util.InetUtils; + +import java.util.Random; +import java.util.concurrent.TimeUnit; + +@Service(version = "1.2.0") +public class HelloServiceBTwoImpl implements HelloServiceBTwo { + + @Autowired + InetUtils inetUtils; + + @Autowired + String serviceTag; + + @Reference(application = "${dubbo.application.id}", version = "1.2.0") + private HelloServiceCTwo helloServiceCTwo; + + private static final Random RANDOM = new Random(); + + @Override + public String hello(String name) { + return "B" + serviceTag + "[" + inetUtils.findFirstNonLoopbackAddress().getHostAddress() + "]" + " params:" + name + " -> " + + helloServiceCTwo.hello(name); + } + + @Override + public String slow() { + Integer rt = TrafficAttribute.getInstance().getRt(); + Integer ration = TrafficAttribute.getInstance().getSlowRation(); + boolean isSlowRequest = RANDOM.nextInt(100) < ration ? true : false; + if (isSlowRequest) { + silentSleep(rt); + } + String slowMessage = isSlowRequest ? " slowRt:" + rt : ""; + return "B" + serviceTag + "[" + inetUtils.findFirstNonLoopbackAddress().getHostAddress() + "]" + slowMessage; + } + + @Override + public String exception() { + Integer ration = TrafficAttribute.getInstance().getExceptionRation(); + boolean isExceptionRequest = RANDOM.nextInt(100) < ration ? true : false; + if (isExceptionRequest) { + throw new RuntimeException("TestCircuitBreakerException"); + } + return "B" + serviceTag + "[" + inetUtils.findFirstNonLoopbackAddress().getHostAddress() + "]" + " exceptionRation:" + ration; + } + + private void silentSleep(long ms) { + try { + TimeUnit.MILLISECONDS.sleep(ms); + } catch (InterruptedException ignored) { + } + } +} diff --git a/mse-simple-demo/B/src/main/java/com/alibabacloud/mse/demo/c/service/HelloServiceCTwo.java b/mse-simple-demo/B/src/main/java/com/alibabacloud/mse/demo/c/service/HelloServiceCTwo.java new file mode 100644 index 00000000..06da6f7c --- /dev/null +++ b/mse-simple-demo/B/src/main/java/com/alibabacloud/mse/demo/c/service/HelloServiceCTwo.java @@ -0,0 +1,6 @@ +package com.alibabacloud.mse.demo.c.service; + +public interface HelloServiceCTwo { + String hello(String name); + String world(String name); +} diff --git a/mse-simple-demo/C/Dockerfile b/mse-simple-demo/C/Dockerfile index 00d9baa8..02f1b41b 100644 --- a/mse-simple-demo/C/Dockerfile +++ b/mse-simple-demo/C/Dockerfile @@ -31,6 +31,7 @@ FROM dragonwell-registry.cn-hangzhou.cr.aliyuncs.com/dragonwell/dragonwell:8-ext COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas COPY --from=build /app/target/C.jar /app/target/C.jar +#COPY ./target/C.jar /app/target/C.jar EXPOSE 20003 ENTRYPOINT ["sh", "-c"] diff --git a/mse-simple-demo/C/build.sh b/mse-simple-demo/C/build.sh index c4ae237f..e8b78439 100755 --- a/mse-simple-demo/C/build.sh +++ b/mse-simple-demo/C/build.sh @@ -1,10 +1,16 @@ #!/bin/sh + +export REGISTRY=${REGISTRY} + +export appName=spring-cloud-c +export version=3.0.1 + set -e cd "$(dirname "$0")" -docker build --platform linux/amd64 . -t ${REGISTRY}spring-cloud-c:2.0.2 +docker build --platform linux/amd64 . -t ${REGISTRY}${appName}:${version} if [ -n "${REGISTRY}" ]; then - docker push ${REGISTRY}spring-cloud-c:2.0.2 + docker push ${REGISTRY}${appName}:${version} fi diff --git a/mse-simple-demo/C/pom.xml b/mse-simple-demo/C/pom.xml index 7fcfcaac..5aa6b12b 100644 --- a/mse-simple-demo/C/pom.xml +++ b/mse-simple-demo/C/pom.xml @@ -5,7 +5,7 @@ com.alibabacloud.mse.demo C - 2.0.2 + ${all.project.version} jar C diff --git a/mse-simple-demo/C/src/main/java/com/alibabacloud/mse/demo/c/service/HelloServiceCTwo.java b/mse-simple-demo/C/src/main/java/com/alibabacloud/mse/demo/c/service/HelloServiceCTwo.java new file mode 100644 index 00000000..06da6f7c --- /dev/null +++ b/mse-simple-demo/C/src/main/java/com/alibabacloud/mse/demo/c/service/HelloServiceCTwo.java @@ -0,0 +1,6 @@ +package com.alibabacloud.mse.demo.c.service; + +public interface HelloServiceCTwo { + String hello(String name); + String world(String name); +} diff --git a/mse-simple-demo/C/src/main/java/com/alibabacloud/mse/demo/c/service/HelloServiceCTwoImpl.java b/mse-simple-demo/C/src/main/java/com/alibabacloud/mse/demo/c/service/HelloServiceCTwoImpl.java new file mode 100644 index 00000000..3bc00977 --- /dev/null +++ b/mse-simple-demo/C/src/main/java/com/alibabacloud/mse/demo/c/service/HelloServiceCTwoImpl.java @@ -0,0 +1,66 @@ +package com.alibabacloud.mse.demo.c.service; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.apache.dubbo.config.annotation.DubboService; +import org.apache.dubbo.rpc.RpcContext; +import org.apache.rocketmq.client.producer.DefaultMQProducer; +import org.apache.rocketmq.common.message.Message; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.cloud.commons.util.InetUtils; + +import java.nio.charset.StandardCharsets; + +@Slf4j +@DubboService(version = "1.2.0") +@RequiredArgsConstructor +public class HelloServiceCTwoImpl implements HelloServiceCTwo { + + private final DefaultMQProducer producer; + + @Autowired + InetUtils inetUtils; + + @Value("${rocketmq.consumer.topic}") + private String topic; + + @Autowired + String serviceTag; + + @Value("${throwException:false}") + boolean throwException; + + @Override + public String hello(String name) { + + if (throwException) { + throw new RuntimeException(); + } + + String value = "C" + serviceTag + "[" + inetUtils.findFirstNonLoopbackAddress().getHostAddress() + "]" + " params:" + name; + String invokerTag=""; + String userData = RpcContext.getContext().getAttachment("__microservice_tag__"); + if (!StringUtils.isEmpty(userData)) { + invokerTag = StringUtils.substringBefore(userData,",").split("\"")[3]; + } + + try { + Message msg = new Message(); + msg.setTopic(topic); + msg.setBody(value.getBytes(StandardCharsets.UTF_8)); + producer.send(msg); + log.info("topic:{},messageString:{},__microservice_tag__:{}", topic, value, StringUtils.trimToNull(invokerTag)); + } catch (Exception ignore) { + } + + return value; + } + + @Override + public String world(String name) { + return "C" + serviceTag + "[" + inetUtils.findFirstNonLoopbackAddress().getHostAddress() + "] -> " + name; + } + +} diff --git a/mse-simple-demo/SpringCloudGateway/Dockerfile b/mse-simple-demo/SpringCloudGateway/Dockerfile new file mode 100644 index 00000000..011d0c8b --- /dev/null +++ b/mse-simple-demo/SpringCloudGateway/Dockerfile @@ -0,0 +1,43 @@ +# syntax=docker/dockerfile:1.4 +FROM maven:3-eclipse-temurin-8-alpine as build + +# copy arthas +COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas + +RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories +RUN apk add wget unzip tcpdump ngrep iproute2-ss bind-tools + +COPY < + + + + alimaven + aliyun maven + https://maven.aliyun.com/nexus/content/groups/public/ + central + + + +EOF + +WORKDIR /app + +COPY ./ ./ + +RUN --mount=type=cache,target=/root/.m2/repository/ \ + mvn clean package --batch-mode + + +FROM dragonwell-registry.cn-hangzhou.cr.aliyuncs.com/dragonwell/dragonwell:8-extended-ga-centos + + +# copy arthas +COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas + +COPY --from=build /target/SpringCloudGateway.jar /app/target/SpringCloudGateway.jar +#COPY ./target/SpringCloudGateway.jar /app/target/SpringCloudGateway.jar + +EXPOSE 20000 +ENTRYPOINT ["sh", "-c"] +CMD ["java -jar /app/target/SpringCloudGateway.jar"] diff --git a/mse-simple-demo/SpringCloudGateway/build.sh b/mse-simple-demo/SpringCloudGateway/build.sh new file mode 100755 index 00000000..39fc36ec --- /dev/null +++ b/mse-simple-demo/SpringCloudGateway/build.sh @@ -0,0 +1,15 @@ +#!/bin/sh +export REGISTRY=${REGISTRY} + +export appName=spring-cloud-gateway +export version=3.0.1 + +set -e + +cd "$(dirname "$0")" + +docker build --platform linux/amd64 . -t ${REGISTRY}${appName}:${version} + +if [ -n "${REGISTRY}" ]; then + docker push ${REGISTRY}${appName}:${version} +fi diff --git a/mse-simple-demo/SpringCloudGateway/pom.xml b/mse-simple-demo/SpringCloudGateway/pom.xml new file mode 100644 index 00000000..0fcb7f0c --- /dev/null +++ b/mse-simple-demo/SpringCloudGateway/pom.xml @@ -0,0 +1,67 @@ + + 4.0.0 + + com.alibabacloud.mse.demo + SpringCloudGateway + ${all.project.version} + jar + + + org.springframework.boot + spring-boot-starter-parent + 2.1.0.RELEASE + + + + + UTF-8 + UTF-8 + 1.8 + Greenwich.SR3 + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + 2.1.1.RELEASE + + + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + org.springframework.cloud + spring-cloud-starter-gateway + + + org.apache.httpcomponents + httpclient + + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + ${project.artifactId} + + diff --git a/mse-simple-demo/SpringCloudGateway/src/main/java/com/alibabcloud/mse/demo/DemoController.java b/mse-simple-demo/SpringCloudGateway/src/main/java/com/alibabcloud/mse/demo/DemoController.java new file mode 100644 index 00000000..d47fe669 --- /dev/null +++ b/mse-simple-demo/SpringCloudGateway/src/main/java/com/alibabcloud/mse/demo/DemoController.java @@ -0,0 +1,378 @@ +package com.alibabcloud.mse.demo; + + +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.client.RestTemplate; + +import javax.annotation.PostConstruct; +import java.util.Random; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.TimeUnit; + +@Controller +public class DemoController { + + @Autowired + @Qualifier("restTemplate") + private RestTemplate restTemplate; + + @Value("${demo.qps:20}") + private int qps; + + @Value("${enable.rpc.invoke:true}") + private boolean enableRpcInvoke; + + @Value("${background.color:white}") + private String backgroundColor; + + @Value("${enable.sql:false}") + private boolean enableSql; + + @Value("${enable.auto:true}") + private boolean enableAuto; + + @Value("${enable.sentinel.demo.flow:true}") + private boolean enableSentinelFlow; + + @Value("${enable.gray:false}") + private boolean enableGray; + + private static Random random = new Random(); + + private static final ScheduledExecutorService FLOW_EXECUTOR = Executors.newScheduledThreadPool(16, + new ThreadFactory() { + @Override + public Thread newThread(Runnable r) { + Thread thread = new Thread(r); + thread.setDaemon(true); + thread.setName("dubbo.outlier.refresh-" + thread.getId()); + return thread; + } + }); + + @GetMapping("/") + public String index(Model model) { + model.addAttribute("backgroundColor", backgroundColor); + return "index"; + } + + @PostConstruct + private void flow() { + if (qps > 0 && enableAuto) { + FLOW_EXECUTOR.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + + try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + HttpGet httpGet = new HttpGet("http://localhost:20000/A/a"); + httpClient.execute(httpGet); + + } catch (Exception ignore) { + } + } + }, 100, 1000000 / qps, TimeUnit.MICROSECONDS); + + FLOW_EXECUTOR.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + + try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + HttpGet httpGet = new HttpGet("http://localhost:20000/B/b"); + httpClient.execute(httpGet); + + } catch (Exception ignore) { + } + } + }, 100, 1000000 / qps, TimeUnit.MICROSECONDS); + + + FLOW_EXECUTOR.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + + try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + HttpGet httpGet = new HttpGet("http://localhost:20000/A/aByFeign"); + httpClient.execute(httpGet); + + } catch (Exception ignore) { + } + } + }, 100, 10 * 1000000 / qps, TimeUnit.MICROSECONDS); + + FLOW_EXECUTOR.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + + try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + HttpGet httpGet = new HttpGet("http://localhost:20000/A/a2bc"); + httpClient.execute(httpGet); + + } catch (Exception ignore) { + } + } + }, 100, 10 * 1000000 / qps, TimeUnit.MICROSECONDS); + + + FLOW_EXECUTOR.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + + try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + HttpGet httpGet = new HttpGet("http://localhost:20000/A/a?name=xiaoming"); + httpClient.execute(httpGet); + + } catch (Exception ignore) { + } + } + }, 100, 10 * 1000000 / qps, TimeUnit.MICROSECONDS); + + + FLOW_EXECUTOR.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + + try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + HttpGet httpGet = new HttpGet("http://localhost:20000/A/a"); + if (enableGray) { + httpGet.addHeader("x-mse-tag", "gray"); + } + httpClient.execute(httpGet); + + } catch (Exception ignore) { + } + } + }, 100, 10 * 1000000 / qps, TimeUnit.MICROSECONDS); + + // 限流降级的流量发起 + if (enableSentinelFlow) { + FLOW_EXECUTOR.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + HttpGet httpGet = new HttpGet("http://localhost:20000/A/flow"); + httpClient.execute(httpGet); + + } catch (Exception ignore) { + } + + try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + HttpGet httpGet = new HttpGet("http://localhost:20000/A/flow"); + if (enableGray) { + httpGet.addHeader("x-mse-tag", "gray"); + } + httpClient.execute(httpGet); + + } catch (Exception ignore) { + } + + try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + HttpGet httpGet = new HttpGet("http://localhost:20000/A/dubbo-flow"); + httpClient.execute(httpGet); + + } catch (Exception ignore) { + } + try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + HttpGet httpGet = new HttpGet("http://localhost:20000/A/dubbo-flow"); + if (enableGray) { + httpGet.addHeader("x-mse-tag", "gray"); + } + httpClient.execute(httpGet); + + } catch (Exception ignore) { + } + + try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + HttpGet httpGet = new HttpGet("http://localhost:20000/A/dubbo-isolate"); + httpClient.execute(httpGet); + + } catch (Exception ignore) { + } + try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + HttpGet httpGet = new HttpGet("http://localhost:20000/A/dubbo-isolate"); + if (enableGray) { + httpGet.addHeader("x-mse-tag", "gray"); + } + httpClient.execute(httpGet); + + } catch (Exception ignore) { + } + } + }, 100, 1000000 / qps, TimeUnit.MICROSECONDS); + + // region 热点限流 + FLOW_EXECUTOR.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + HttpGet httpGet = new HttpGet("http://localhost:20000/A/dubbo-params/hot"); + httpClient.execute(httpGet); + } catch (Exception ignore) { + } + try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + HttpGet httpGet = new HttpGet("http://localhost:20000/A/params/hot"); + httpClient.execute(httpGet); + + } catch (Exception ignore) { + } + } + }, 100, 1000000 / qps, TimeUnit.MICROSECONDS); + // endregion 热点限流 + + // region 熔断规则 + FLOW_EXECUTOR.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + HttpGet httpGet = new HttpGet("http://localhost:20000/A/circuit-breaker-rt"); + httpClient.execute(httpGet); + } catch (Exception ignore) { + } + try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + HttpGet httpGet = new HttpGet("http://localhost:20000/A/circuit-breaker-exception"); + httpClient.execute(httpGet); + } catch (Exception ignore) { + } + try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + HttpGet httpGet = new HttpGet("http://localhost:20000/A/dubbo-circuit-breaker-rt"); + httpClient.execute(httpGet); + } catch (Exception ignore) { + } + try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + HttpGet httpGet = new HttpGet("http://localhost:20000/A/dubbo-circuit-breaker-exception"); + httpClient.execute(httpGet); + } catch (Exception ignore) { + } + } + }, 100, 1000000 / qps, TimeUnit.MICROSECONDS); + // endregion 热点限流 + } + + if (enableSql) { + FLOW_EXECUTOR.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + + try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + int id = random.nextInt(5) + 1; + HttpGet httpGet = new HttpGet("http://localhost:20000/A/sql?command=query&id=" + id); + httpClient.execute(httpGet); + } catch (Exception ignore) { + } + } + }, 5000000, 10 * 1000000 / qps, TimeUnit.MICROSECONDS); + + FLOW_EXECUTOR.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + + try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + HttpGet httpGetUpdate = new HttpGet("http://localhost:20000/A/sql?command=update&name=name1Update&email=emailUpdate@demo.com&age=1&id=1"); + httpClient.execute(httpGetUpdate); + TimeUnit.MILLISECONDS.sleep(500); + HttpGet httpGetUpdate2 = new HttpGet("http://localhost:20000/A/sql?command=update&name=name1&email=email@demo.com&age=1&id=1"); + httpClient.execute(httpGetUpdate2); + } catch (Exception ignore) { + } + } + }, 5000000, 50 * 1000000 / qps, TimeUnit.MICROSECONDS); + } + + if (enableRpcInvoke) { + FLOW_EXECUTOR.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + + try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + HttpGet httpGet = new HttpGet("http://localhost:20000/A/dubbo"); + httpClient.execute(httpGet); + + } catch (Exception ignore) { + } + } + }, 100, 1000000 / qps, TimeUnit.MICROSECONDS); + + + FLOW_EXECUTOR.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + + try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + HttpGet httpGet = new HttpGet("http://localhost:20000/A/dubbo?name=xiaoming"); + httpClient.execute(httpGet); + } catch (Exception ignore) { + } + } + }, 100, 10 * 1000000 / qps, TimeUnit.MICROSECONDS); + + FLOW_EXECUTOR.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + + try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + HttpGet httpGet = new HttpGet("http://localhost:20000/A/dubbo"); + if (enableGray) { + httpGet.addHeader("x-mse-tag", "gray"); + } + httpClient.execute(httpGet); + + } catch (Exception ignore) { + } + } + }, 100, 10 * 1000000 / qps, TimeUnit.MICROSECONDS); + + FLOW_EXECUTOR.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + + try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + HttpGet httpGet = new HttpGet("http://localhost:20000/A/dubbo2"); + httpClient.execute(httpGet); + + } catch (Exception ignore) { + } + } + }, 100, 1000000 / qps, TimeUnit.MICROSECONDS); + + + FLOW_EXECUTOR.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + + try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + HttpGet httpGet = new HttpGet("http://localhost:20000/A/dubbo2?name=xiaoming"); + httpClient.execute(httpGet); + } catch (Exception ignore) { + } + } + }, 100, 10 * 1000000 / qps, TimeUnit.MICROSECONDS); + + FLOW_EXECUTOR.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + + try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + HttpGet httpGet = new HttpGet("http://localhost:20000/A/dubbo2"); + if (enableGray) { + httpGet.addHeader("x-mse-tag", "gray"); + } + httpClient.execute(httpGet); + + } catch (Exception ignore) { + } + } + }, 100, 10 * 1000000 / qps, TimeUnit.MICROSECONDS); + + } + } + } +} diff --git a/mse-simple-demo/SpringCloudGateway/src/main/java/com/alibabcloud/mse/demo/ModifyPathGatewayFilterFactory.java b/mse-simple-demo/SpringCloudGateway/src/main/java/com/alibabcloud/mse/demo/ModifyPathGatewayFilterFactory.java new file mode 100644 index 00000000..68a45ae6 --- /dev/null +++ b/mse-simple-demo/SpringCloudGateway/src/main/java/com/alibabcloud/mse/demo/ModifyPathGatewayFilterFactory.java @@ -0,0 +1,53 @@ +package com.alibabcloud.mse.demo; + +import org.springframework.cloud.gateway.filter.GatewayFilter; +import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.stereotype.Component; + +@Component +public class ModifyPathGatewayFilterFactory extends AbstractGatewayFilterFactory { + + public ModifyPathGatewayFilterFactory() { + super(Config.class); + } + + @Override + public GatewayFilter apply(Config config) { + return ((exchange, chain) -> { + ServerHttpRequest request = exchange.getRequest(); + String path = request.getURI().getRawPath(); + if (path.startsWith(config.prefix)) { + String newPath = config.newPrefix == null || config.newPrefix.isEmpty() + ? path.substring(config.prefix.length()) + : config.newPrefix + path.substring(config.prefix.length()); + ServerHttpRequest newRequest = request.mutate().path(newPath).build(); + return chain.filter(exchange.mutate().request(newRequest).build()); + } + return chain.filter(exchange); + }); + } + + public static class Config { + + private String prefix; + + private String newPrefix; + + public String getPrefix() { + return prefix; + } + + public void setPrefix(String prefix) { + this.prefix = prefix; + } + + public String getNewPrefix() { + return newPrefix; + } + + public void setNewPrefix(String newPrefix) { + this.newPrefix = newPrefix; + } + } +} diff --git a/mse-simple-demo/SpringCloudGateway/src/main/java/com/alibabcloud/mse/demo/SpringCloudGatewayApplication.java b/mse-simple-demo/SpringCloudGateway/src/main/java/com/alibabcloud/mse/demo/SpringCloudGatewayApplication.java new file mode 100644 index 00000000..71470387 --- /dev/null +++ b/mse-simple-demo/SpringCloudGateway/src/main/java/com/alibabcloud/mse/demo/SpringCloudGatewayApplication.java @@ -0,0 +1,38 @@ +package com.alibabcloud.mse.demo; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.cloud.gateway.route.RouteLocator; +import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.core.convert.ConversionService; +import org.springframework.core.convert.support.DefaultConversionService; +import org.springframework.web.client.RestTemplate; + +@SpringBootApplication +@EnableDiscoveryClient +public class SpringCloudGatewayApplication { + public static void main(String[] args) { + SpringApplication.run(SpringCloudGatewayApplication.class, args); + } + + @Bean(name = "restTemplate") + RestTemplate restTemplate() { + return new RestTemplateBuilder(rt -> rt.getInterceptors().add((request, body, execution) -> { + request.getHeaders().add("Connection", "close"); + return execution.execute(request, body); + })).build(); + } + + @Bean + public RouteLocator customRouteLocator(RouteLocatorBuilder builder) { + return builder.routes() + .build(); + } + @Bean + public ConversionService conversionService() { + return new DefaultConversionService(); + } +} diff --git a/mse-simple-demo/SpringCloudGateway/src/main/resources/application.properties b/mse-simple-demo/SpringCloudGateway/src/main/resources/application.properties new file mode 100644 index 00000000..1e8d94cf --- /dev/null +++ b/mse-simple-demo/SpringCloudGateway/src/main/resources/application.properties @@ -0,0 +1,35 @@ +nacos.host=nacos-server +nacos.namespace=public + + +spring.application.name=sc-SpringCloudGateway +server.port=20000 +spring.cloud.nacos.discovery.server-addr=${nacos.host}:8848 +spring.cloud.nacos.discovery.namespace=${nacos.namespace} + + +spring.cloud.gateway.routes[0].id=sc-A +spring.cloud.gateway.routes[0].uri=lb://sc-A:20001 +spring.cloud.gateway.routes[0].predicates[0]=Path=/A/** +spring.cloud.gateway.routes[0].filters[0]=RewritePath=/A, / + + +spring.cloud.gateway.routes[1].id=sc-B +spring.cloud.gateway.routes[1].uri=lb://sc-B:20002 +spring.cloud.gateway.routes[1].predicates[0]=Path=/B/** +spring.cloud.gateway.routes[1].filters[0]=RewritePath=/B, / + + + +spring.cloud.gateway.routes[2].id=sc-C +spring.cloud.gateway.routes[2].uri=lb://sc-C:20003 +spring.cloud.gateway.routes[2].predicates[0]=Path=/C/** +spring.cloud.gateway.routes[2].filters[0]=RewritePath=/C, / + + + +spring.thymeleaf.mode = LEGACYHTML5 +spring.thymeleaf.encoding=UTF-8 +spring.thymeleaf.servlet.content-type=text/html +spring.thymeleaf.suffix=.html +spring.thymeleaf.cache=false \ No newline at end of file diff --git a/mse-simple-demo/gateway/src/main/resources/templates/index.html b/mse-simple-demo/SpringCloudGateway/src/main/resources/templates/index.html similarity index 100% rename from mse-simple-demo/gateway/src/main/resources/templates/index.html rename to mse-simple-demo/SpringCloudGateway/src/main/resources/templates/index.html diff --git a/mse-simple-demo/gateway/Dockerfile b/mse-simple-demo/ZuulGateway/Dockerfile similarity index 82% rename from mse-simple-demo/gateway/Dockerfile rename to mse-simple-demo/ZuulGateway/Dockerfile index 4722d5db..a4a37a19 100644 --- a/mse-simple-demo/gateway/Dockerfile +++ b/mse-simple-demo/ZuulGateway/Dockerfile @@ -30,8 +30,9 @@ FROM dragonwell-registry.cn-hangzhou.cr.aliyuncs.com/dragonwell/dragonwell:8-ext # copy arthas COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas -COPY --from=build /app/target/gateway.jar /app/target/gateway.jar +COPY --from=build /app/target/ZuulGateway.jar /app/target/ZuulGateway.jar +#COPY ./target/ZuulGateway.jar /app/target/ZuulGateway.jar EXPOSE 20000 ENTRYPOINT ["sh", "-c"] -CMD ["java -jar /app/target/gateway.jar"] \ No newline at end of file +CMD ["java -jar /app/target/ZuulGateway.jar"] \ No newline at end of file diff --git a/mse-simple-demo/ZuulGateway/build.sh b/mse-simple-demo/ZuulGateway/build.sh new file mode 100755 index 00000000..3f7e3db7 --- /dev/null +++ b/mse-simple-demo/ZuulGateway/build.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +export REGISTRY=${REGISTRY} + +export appName=spring-cloud-zuul +export version=3.0.1 + +set -e + +cd "$(dirname "$0")" + +docker build --platform linux/amd64 . -t ${REGISTRY}${appName}:${version} + +if [ -n "${REGISTRY}" ]; then + docker push ${REGISTRY}${appName}:${version} +fi diff --git a/mse-simple-demo/gateway/pom.xml b/mse-simple-demo/ZuulGateway/pom.xml similarity index 96% rename from mse-simple-demo/gateway/pom.xml rename to mse-simple-demo/ZuulGateway/pom.xml index 5189438e..413ec241 100644 --- a/mse-simple-demo/gateway/pom.xml +++ b/mse-simple-demo/ZuulGateway/pom.xml @@ -4,8 +4,8 @@ 4.0.0 com.alibabacloud.mse.demo - gateway - 2.0.2 + ZuulGateway + ${all.project.version} jar diff --git a/mse-simple-demo/gateway/src/main/java/com/alibabacloud/mse/demo/DemoController.java b/mse-simple-demo/ZuulGateway/src/main/java/com/alibabacloud/mse/demo/DemoController.java similarity index 88% rename from mse-simple-demo/gateway/src/main/java/com/alibabacloud/mse/demo/DemoController.java rename to mse-simple-demo/ZuulGateway/src/main/java/com/alibabacloud/mse/demo/DemoController.java index 07940192..6626c1b9 100644 --- a/mse-simple-demo/gateway/src/main/java/com/alibabacloud/mse/demo/DemoController.java +++ b/mse-simple-demo/ZuulGateway/src/main/java/com/alibabacloud/mse/demo/DemoController.java @@ -28,7 +28,7 @@ public class DemoController { @Qualifier("restTemplate") private RestTemplate restTemplate; - @Value("${demo.qps:100}") + @Value("${demo.qps:20}") private int qps; @Value("${enable.rpc.invoke:true}") @@ -324,6 +324,52 @@ public void run() { } } }, 100, 10 * 1000000 / qps, TimeUnit.MICROSECONDS); + + + FLOW_EXECUTOR.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + + try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + HttpGet httpGet = new HttpGet("http://localhost:20000/A/dubbo2"); + httpClient.execute(httpGet); + + } catch (Exception ignore) { + } + } + }, 100, 1000000 / qps, TimeUnit.MICROSECONDS); + + + FLOW_EXECUTOR.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + + try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + HttpGet httpGet = new HttpGet("http://localhost:20000/A/dubbo2?name=xiaoming"); + httpClient.execute(httpGet); + } catch (Exception ignore) { + } + } + }, 100, 10 * 1000000 / qps, TimeUnit.MICROSECONDS); + + FLOW_EXECUTOR.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + + try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + HttpGet httpGet = new HttpGet("http://localhost:20000/A/dubbo2"); + if (enableGray) { + httpGet.addHeader("x-mse-tag", "gray"); + } + httpClient.execute(httpGet); + + } catch (Exception ignore) { + } + } + }, 100, 10 * 1000000 / qps, TimeUnit.MICROSECONDS); + + + } } } diff --git a/mse-simple-demo/gateway/src/main/java/com/alibabacloud/mse/demo/ZuulApplication.java b/mse-simple-demo/ZuulGateway/src/main/java/com/alibabacloud/mse/demo/ZuulApplication.java similarity index 100% rename from mse-simple-demo/gateway/src/main/java/com/alibabacloud/mse/demo/ZuulApplication.java rename to mse-simple-demo/ZuulGateway/src/main/java/com/alibabacloud/mse/demo/ZuulApplication.java diff --git a/mse-simple-demo/gateway/src/main/resources/application.properties b/mse-simple-demo/ZuulGateway/src/main/resources/application.properties similarity index 92% rename from mse-simple-demo/gateway/src/main/resources/application.properties rename to mse-simple-demo/ZuulGateway/src/main/resources/application.properties index c9d54aa7..54b60cf9 100644 --- a/mse-simple-demo/gateway/src/main/resources/application.properties +++ b/mse-simple-demo/ZuulGateway/src/main/resources/application.properties @@ -2,7 +2,7 @@ nacos.host=nacos-server nacos.namespace=public -spring.application.name=sc-zuul +spring.application.name=sc-ZuulGateway server.port=20000 spring.cloud.nacos.discovery.server-addr=${nacos.host}:8848 spring.cloud.nacos.discovery.namespace=${nacos.namespace} diff --git a/mse-simple-demo/ZuulGateway/src/main/resources/templates/index.html b/mse-simple-demo/ZuulGateway/src/main/resources/templates/index.html new file mode 100644 index 00000000..92b95eda --- /dev/null +++ b/mse-simple-demo/ZuulGateway/src/main/resources/templates/index.html @@ -0,0 +1,76 @@ + + + + + + + + +
+
+ + + +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/mse-simple-demo/build.sh b/mse-simple-demo/build.sh index 3f34c67d..42b9a080 100755 --- a/mse-simple-demo/build.sh +++ b/mse-simple-demo/build.sh @@ -1,4 +1,7 @@ #!/bin/sh +# Select the correct warehouse prefix +export REGISTRY=${REGISTRY} + set -e cd "$(dirname "$0")" @@ -6,5 +9,6 @@ cd "$(dirname "$0")" ./A/build.sh ./B/build.sh ./C/build.sh -./gateway/build.sh +./ZuulGateway/build.sh +./SpringCloudway/build.sh ./mysql/build.sh diff --git a/mse-simple-demo/gateway/build.sh b/mse-simple-demo/gateway/build.sh deleted file mode 100755 index 80e2ce9e..00000000 --- a/mse-simple-demo/gateway/build.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -set -e - -cd "$(dirname "$0")" - -docker build --platform linux/amd64 . -t ${REGISTRY}spring-cloud-zuul:2.0.2 - -if [ -n "${REGISTRY}" ]; then - docker push ${REGISTRY}spring-cloud-zuul:2.0.2 -fi diff --git a/mse-simple-demo/helm/mse-simple-demo/README.md b/mse-simple-demo/helm/mse-simple-demo/README.md index 74d2c373..0462531c 100644 --- a/mse-simple-demo/helm/mse-simple-demo/README.md +++ b/mse-simple-demo/helm/mse-simple-demo/README.md @@ -1,7 +1,7 @@ ## build export REGISTRY=registry.cn-hangzhou.aliyuncs.com/mse-demo-hz/ #对应的registry前缀 -At directory `A`/`B`/`C`/`gateway`/`mysql`: +At directory `A`/`B`/`C`/`ZuulGateway`/`SpringCloudGateway`/`mysql`: * execute `./build.sh` to build and push image @@ -21,3 +21,5 @@ helm upgrade mse-simple-demo helm/mse-simple-demo \ - `mse.namespace`: 接入MSE微服务治理的微服务命名空间,可以用来区分环境(默认值为mse-demo) - `autoscaling`:是否开启自动伸缩(默认值为false) - `resources.enableRequests`:是否设置resources的requests配置(默认值为true) +- `gateway.zuul`:是否开启zuul网关 +- `gateway.springcloud`:是否开启springcloud网关 \ No newline at end of file diff --git a/mse-simple-demo/helm/mse-simple-demo/templates/spring-cloud-gateway-deployment.yaml b/mse-simple-demo/helm/mse-simple-demo/templates/spring-cloud-gateway-deployment.yaml new file mode 100644 index 00000000..3a5353d4 --- /dev/null +++ b/mse-simple-demo/helm/mse-simple-demo/templates/spring-cloud-gateway-deployment.yaml @@ -0,0 +1,63 @@ +{{ if .Values.gateway.springcloud }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: spring-cloud-gateway + namespace: {{ .Release.Namespace }} +spec: + replicas: 1 + selector: + matchLabels: + app: spring-cloud-gateway + template: + metadata: + labels: + msePilotAutoEnable: "on" + msePilotCreateAppName: "spring-cloud-gateway" + mseNamespace: "{{ .Values.mse.namespace }}" + app: spring-cloud-gateway + spec: + containers: + - image: "{{ .Values.registry }}spring-cloud-gateway:{{ .Values.images.version }}" + imagePullPolicy: Always + env: + - name: nacos.host + value: "{{ .Values.nacos.host }}" + - name: nacos.namespace + value: "{{ .Values.nacos.namespace }}" + - name: enable.auto + value: "true" + - name: enable.rpc.invoke + value: "true" + - name: enable.sql + value: "false" + - name: enable.sentinel.demo.flow + value: "true" + {{ if .Values.MSE_DEBUG_HOST }} + - name: MSE_DEBUG_HOST + value: {{ .Values.MSE_DEBUG_HOST }} + {{ end }} + name: "spring-cloud-gateway" + resources: + {{ if .Values.resources.enable }} + requests: + cpu: {{ .Values.resources.request.cpu }} + memory: {{ .Values.resources.request.memory }} + limits: + cpu: {{ .Values.resources.limit.cpu }} + memory: {{ .Values.resources.limit.memory }} + {{ end }} + ports: + - containerPort: 20000 + hostAliases: + {{ toYaml .Values.hostAliases | nindent 8 }} + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - podAffinityTerm: + topologyKey: failure-domain.beta.kubernetes.io/zone + weight: 50 + - podAffinityTerm: + topologyKey: kubernetes.io/hostname + weight: 100 +{{ end }} \ No newline at end of file diff --git a/mse-simple-demo/helm/mse-simple-demo/templates/spring-cloud-gateway-service.yaml b/mse-simple-demo/helm/mse-simple-demo/templates/spring-cloud-gateway-service.yaml new file mode 100644 index 00000000..d2edc0ff --- /dev/null +++ b/mse-simple-demo/helm/mse-simple-demo/templates/spring-cloud-gateway-service.yaml @@ -0,0 +1,18 @@ +{{ if .Values.gateway.springcloud }} +apiVersion: v1 +kind: Service +metadata: + annotations: + service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: slb.s1.small + service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet + name: spring-cloud-gateway-slb +spec: + ports: + - port: 80 + protocol: TCP + targetPort: 20000 + selector: + app: spring-cloud-gateway + type: LoadBalancer + +{{ end }} diff --git a/mse-simple-demo/helm/mse-simple-demo/templates/gateway-deployment.yaml b/mse-simple-demo/helm/mse-simple-demo/templates/zuul-gateway-deployment.yaml similarity index 98% rename from mse-simple-demo/helm/mse-simple-demo/templates/gateway-deployment.yaml rename to mse-simple-demo/helm/mse-simple-demo/templates/zuul-gateway-deployment.yaml index b5a82815..c194ebb1 100644 --- a/mse-simple-demo/helm/mse-simple-demo/templates/gateway-deployment.yaml +++ b/mse-simple-demo/helm/mse-simple-demo/templates/zuul-gateway-deployment.yaml @@ -1,3 +1,4 @@ +{{ if .Values.gateway.zuul }} apiVersion: apps/v1 kind: Deployment metadata: @@ -59,3 +60,4 @@ spec: - podAffinityTerm: topologyKey: kubernetes.io/hostname weight: 100 +{{ end }} diff --git a/mse-simple-demo/helm/mse-simple-demo/templates/gateway-service.yaml b/mse-simple-demo/helm/mse-simple-demo/templates/zuul-gateway-service.yaml similarity index 89% rename from mse-simple-demo/helm/mse-simple-demo/templates/gateway-service.yaml rename to mse-simple-demo/helm/mse-simple-demo/templates/zuul-gateway-service.yaml index 1056d32d..54c7c20e 100644 --- a/mse-simple-demo/helm/mse-simple-demo/templates/gateway-service.yaml +++ b/mse-simple-demo/helm/mse-simple-demo/templates/zuul-gateway-service.yaml @@ -1,3 +1,4 @@ +{{ if .Values.gateway.zuul }} apiVersion: v1 kind: Service metadata: @@ -13,3 +14,4 @@ spec: selector: app: spring-cloud-zuul type: LoadBalancer +{{ end }} diff --git a/mse-simple-demo/helm/mse-simple-demo/values.yaml b/mse-simple-demo/helm/mse-simple-demo/values.yaml index 0123f825..9f1bef09 100644 --- a/mse-simple-demo/helm/mse-simple-demo/values.yaml +++ b/mse-simple-demo/helm/mse-simple-demo/values.yaml @@ -2,11 +2,18 @@ registry: registry.cn-hangzhou.aliyuncs.com/mse-demo-hz/ images: - version: 2.0.2 + version: 3.0.1 mse: namespace: mse-demo + +# 是否启动zuul、springcloud网关 +gateway: + zuul: true + springcloud: true + + nacos: # Nacos地址 host: nacos-server diff --git a/mse-simple-demo/mysql/build.sh b/mse-simple-demo/mysql/build.sh index c494b029..d31f947a 100755 --- a/mse-simple-demo/mysql/build.sh +++ b/mse-simple-demo/mysql/build.sh @@ -1,10 +1,15 @@ #!/bin/sh +export REGISTRY=${REGISTRY} + +export appName=demo-mysql +export version=3.0.1 + set -e cd "$(dirname "$0")" -docker build --platform linux/amd64 . -t ${REGISTRY}demo-mysql:2.0.2 +docker build --platform linux/amd64 . -t ${REGISTRY}${appName}:${version} if [ -n "${REGISTRY}" ]; then - docker push ${REGISTRY}demo-mysql:2.0.2 + docker push ${REGISTRY}${appName}:${version} fi \ No newline at end of file diff --git a/mse-simple-demo/pom.xml b/mse-simple-demo/pom.xml index f357e958..5076c898 100644 --- a/mse-simple-demo/pom.xml +++ b/mse-simple-demo/pom.xml @@ -4,15 +4,20 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 + + 3.0.1 + + + com.alibabacloud.mse.demo mse-simple-demo - 1.2.0 + ${all.project.version} A B C - gateway - + ZuulGateway + SpringCloudGateway pom From e00086e873abbd090d1f710766f7e7cd06726888 Mon Sep 17 00:00:00 2001 From: lwj Date: Sat, 6 May 2023 15:33:17 +0800 Subject: [PATCH 3/5] =?UTF-8?q?feature:=E4=BF=AE=E6=94=B9helm=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mse-simple-demo/helm/mse-simple-demo/Chart.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mse-simple-demo/helm/mse-simple-demo/Chart.yaml b/mse-simple-demo/helm/mse-simple-demo/Chart.yaml index 386cbba4..5ae14f7a 100644 --- a/mse-simple-demo/helm/mse-simple-demo/Chart.yaml +++ b/mse-simple-demo/helm/mse-simple-demo/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v2 name: mse-simple-demo -version: "2.0.2" -appVersion: "2.0.2" +version: "3.0.1" +appVersion: "3.0.1" home: https://mse.console.aliyun.com/ keywords: - mse From c54ffc9235c5bda6eb3dc31e0abc5e3b8224aee5 Mon Sep 17 00:00:00 2001 From: lwj Date: Sat, 6 May 2023 16:13:31 +0800 Subject: [PATCH 4/5] =?UTF-8?q?feature:=E5=B0=86B=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=92=8CC=E6=9C=8D=E5=8A=A1=E4=B8=AD=E7=9A=84dubbo=E4=B8=8D?= =?UTF-8?q?=E5=90=8C=E6=8E=A5=E5=8F=A3=E7=9A=84=E6=96=B9=E6=B3=95=E5=90=8D?= =?UTF-8?q?=E6=94=B9=E6=88=90=E4=B8=8D=E5=90=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/alibabacloud/mse/demo/a/AController.java | 2 +- .../com/alibabacloud/mse/demo/b/service/HelloServiceBTwo.java | 2 +- .../com/alibabacloud/mse/demo/b/service/HelloServiceBTwo.java | 2 +- .../alibabacloud/mse/demo/b/service/HelloServiceBTwoImpl.java | 4 ++-- .../com/alibabacloud/mse/demo/c/service/HelloServiceCTwo.java | 4 ++-- .../com/alibabacloud/mse/demo/c/service/HelloServiceCTwo.java | 4 ++-- .../alibabacloud/mse/demo/c/service/HelloServiceCTwoImpl.java | 4 ++-- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/a/AController.java b/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/a/AController.java index d8ff0bb8..61b8f320 100644 --- a/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/a/AController.java +++ b/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/a/AController.java @@ -249,7 +249,7 @@ public String dubbo2(HttpServletRequest request) { } } return "A" + serviceTag + "[" + inetUtils.findFirstNonLoopbackAddress().getHostAddress() + "]" + " -> " + - helloServiceBTwo.hello(JSON.toJSONString(request.getParameterMap())); + helloServiceBTwo.hello2(JSON.toJSONString(request.getParameterMap())); } @ApiOperation(value = "Dubbo 限流测试", tags = {"入口应用"}) diff --git a/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/b/service/HelloServiceBTwo.java b/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/b/service/HelloServiceBTwo.java index 594c00e1..098012e1 100644 --- a/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/b/service/HelloServiceBTwo.java +++ b/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/b/service/HelloServiceBTwo.java @@ -1,7 +1,7 @@ package com.alibabacloud.mse.demo.b.service; public interface HelloServiceBTwo { - String hello(String name); + String hello2(String name); String slow(); String exception(); } diff --git a/mse-simple-demo/B/src/main/java/com/alibabacloud/mse/demo/b/service/HelloServiceBTwo.java b/mse-simple-demo/B/src/main/java/com/alibabacloud/mse/demo/b/service/HelloServiceBTwo.java index 594c00e1..098012e1 100644 --- a/mse-simple-demo/B/src/main/java/com/alibabacloud/mse/demo/b/service/HelloServiceBTwo.java +++ b/mse-simple-demo/B/src/main/java/com/alibabacloud/mse/demo/b/service/HelloServiceBTwo.java @@ -1,7 +1,7 @@ package com.alibabacloud.mse.demo.b.service; public interface HelloServiceBTwo { - String hello(String name); + String hello2(String name); String slow(); String exception(); } diff --git a/mse-simple-demo/B/src/main/java/com/alibabacloud/mse/demo/b/service/HelloServiceBTwoImpl.java b/mse-simple-demo/B/src/main/java/com/alibabacloud/mse/demo/b/service/HelloServiceBTwoImpl.java index cf2decfd..e430f428 100644 --- a/mse-simple-demo/B/src/main/java/com/alibabacloud/mse/demo/b/service/HelloServiceBTwoImpl.java +++ b/mse-simple-demo/B/src/main/java/com/alibabacloud/mse/demo/b/service/HelloServiceBTwoImpl.java @@ -26,9 +26,9 @@ public class HelloServiceBTwoImpl implements HelloServiceBTwo { private static final Random RANDOM = new Random(); @Override - public String hello(String name) { + public String hello2(String name) { return "B" + serviceTag + "[" + inetUtils.findFirstNonLoopbackAddress().getHostAddress() + "]" + " params:" + name + " -> " + - helloServiceCTwo.hello(name); + helloServiceCTwo.hello2(name); } @Override diff --git a/mse-simple-demo/B/src/main/java/com/alibabacloud/mse/demo/c/service/HelloServiceCTwo.java b/mse-simple-demo/B/src/main/java/com/alibabacloud/mse/demo/c/service/HelloServiceCTwo.java index 06da6f7c..94425ec7 100644 --- a/mse-simple-demo/B/src/main/java/com/alibabacloud/mse/demo/c/service/HelloServiceCTwo.java +++ b/mse-simple-demo/B/src/main/java/com/alibabacloud/mse/demo/c/service/HelloServiceCTwo.java @@ -1,6 +1,6 @@ package com.alibabacloud.mse.demo.c.service; public interface HelloServiceCTwo { - String hello(String name); - String world(String name); + String hello2(String name); + String world2(String name); } diff --git a/mse-simple-demo/C/src/main/java/com/alibabacloud/mse/demo/c/service/HelloServiceCTwo.java b/mse-simple-demo/C/src/main/java/com/alibabacloud/mse/demo/c/service/HelloServiceCTwo.java index 06da6f7c..94425ec7 100644 --- a/mse-simple-demo/C/src/main/java/com/alibabacloud/mse/demo/c/service/HelloServiceCTwo.java +++ b/mse-simple-demo/C/src/main/java/com/alibabacloud/mse/demo/c/service/HelloServiceCTwo.java @@ -1,6 +1,6 @@ package com.alibabacloud.mse.demo.c.service; public interface HelloServiceCTwo { - String hello(String name); - String world(String name); + String hello2(String name); + String world2(String name); } diff --git a/mse-simple-demo/C/src/main/java/com/alibabacloud/mse/demo/c/service/HelloServiceCTwoImpl.java b/mse-simple-demo/C/src/main/java/com/alibabacloud/mse/demo/c/service/HelloServiceCTwoImpl.java index 3bc00977..4ad46b26 100644 --- a/mse-simple-demo/C/src/main/java/com/alibabacloud/mse/demo/c/service/HelloServiceCTwoImpl.java +++ b/mse-simple-demo/C/src/main/java/com/alibabacloud/mse/demo/c/service/HelloServiceCTwoImpl.java @@ -33,7 +33,7 @@ public class HelloServiceCTwoImpl implements HelloServiceCTwo { boolean throwException; @Override - public String hello(String name) { + public String hello2(String name) { if (throwException) { throw new RuntimeException(); @@ -59,7 +59,7 @@ public String hello(String name) { } @Override - public String world(String name) { + public String world2(String name) { return "C" + serviceTag + "[" + inetUtils.findFirstNonLoopbackAddress().getHostAddress() + "] -> " + name; } From b4b4d48deefa23016954418f0106c2880029a968 Mon Sep 17 00:00:00 2001 From: lwj Date: Sat, 6 May 2023 16:21:46 +0800 Subject: [PATCH 5/5] =?UTF-8?q?feature:=E5=B0=86B=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=92=8CC=E6=9C=8D=E5=8A=A1=E4=B8=AD=E7=9A=84dubbo=E4=B8=8D?= =?UTF-8?q?=E5=90=8C=E6=8E=A5=E5=8F=A3=E7=9A=84=E6=96=B9=E6=B3=95=E5=90=8D?= =?UTF-8?q?=E6=94=B9=E6=88=90=E4=B8=8D=E5=90=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/alibabacloud/mse/demo/a/AController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/a/AController.java b/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/a/AController.java index d8ff0bb8..61b8f320 100644 --- a/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/a/AController.java +++ b/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/a/AController.java @@ -249,7 +249,7 @@ public String dubbo2(HttpServletRequest request) { } } return "A" + serviceTag + "[" + inetUtils.findFirstNonLoopbackAddress().getHostAddress() + "]" + " -> " + - helloServiceBTwo.hello(JSON.toJSONString(request.getParameterMap())); + helloServiceBTwo.hello2(JSON.toJSONString(request.getParameterMap())); } @ApiOperation(value = "Dubbo 限流测试", tags = {"入口应用"})