diff --git a/mse-simple-demo/A/Dockerfile b/mse-simple-demo/A/Dockerfile
index f91baacd..f589a1aa 100644
--- a/mse-simple-demo/A/Dockerfile
+++ b/mse-simple-demo/A/Dockerfile
@@ -1,5 +1,8 @@
FROM eclipse-temurin:8-jdk-alpine
+# 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
diff --git a/mse-simple-demo/A/pom.xml b/mse-simple-demo/A/pom.xml
index 95820ca1..2dd897e8 100644
--- a/mse-simple-demo/A/pom.xml
+++ b/mse-simple-demo/A/pom.xml
@@ -59,13 +59,13 @@
org.apache.dubbo
dubbo-spring-boot-starter
- 2.7.7
+ 2.7.15
org.apache.dubbo
dubbo-registry-nacos
- 2.7.7
+ 2.7.15
diff --git a/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/AApplication.java b/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/AApplication.java
index da30a082..8b700eb7 100644
--- a/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/AApplication.java
+++ b/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/AApplication.java
@@ -1,37 +1,19 @@
package com.alibabacloud.mse.demo;
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.Properties;
-
-import javax.annotation.PostConstruct;
-import javax.servlet.http.HttpServletRequest;
-
-import com.alibabacloud.mse.demo.service.HelloServiceB;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import org.apache.dubbo.config.annotation.Reference;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.config.RequestConfig;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.impl.client.HttpClientBuilder;
-import org.apache.http.util.EntityUtils;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
-import org.springframework.cloud.commons.util.InetUtils;
import org.springframework.context.annotation.Bean;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.web.client.RestTemplate;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.Properties;
+
/**
* @author Jim
*/
@@ -48,106 +30,20 @@ RestTemplate restTemplate() {
return new RestTemplate();
}
- @Reference(application = "${dubbo.application.id}", version = "1.0.0")
- private HelloServiceB helloServiceB;
-
- @Api(value = "/", tags = {"入口应用"})
- @RestController
- class AController {
-
- @Autowired
- RestTemplate restTemplate;
-
- @Autowired
- InetUtils inetUtils;
-
- private String currentZone;
-
- @PostConstruct
- private void init() {
- try {
- HttpClient client = HttpClientBuilder.create().build();
- RequestConfig requestConfig = RequestConfig.custom()
- .setConnectionRequestTimeout(1000)
- .setConnectTimeout(1000)
- .setSocketTimeout(1000)
- .build();
- HttpGet req = new HttpGet("http://100.100.100.200/latest/meta-data/zone-id");
- req.setConfig(requestConfig);
- HttpResponse response = client.execute(req);
- currentZone = EntityUtils.toString(response.getEntity());
- } catch (Exception e) {
- currentZone = e.getMessage();
- }
- }
-
- @ApiOperation(value = "HTTP 全链路灰度入口", tags = {"入口应用"})
- @GetMapping("/a")
- public String a(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"+SERVICE_TAG+"[" + inetUtils.findFirstNonLoopbackAddress().getHostAddress() + "]" + " -> " +
- restTemplate.getForObject("http://sc-B/b", String.class);
- }
-
- @ApiOperation(value = "HTTP 全链路灰度入口", tags = {"入口应用"})
- @GetMapping("/a-zone")
- public String aZone(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"+SERVICE_TAG+"[" + currentZone + "]" + " -> " +
- restTemplate.getForObject("http://sc-B/b-zone", String.class);
- }
-
- @ApiOperation(value = "Dubbo 全链路灰度入口", tags = {"入口应用"})
- @GetMapping("/dubbo")
- public String dubbo(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"+SERVICE_TAG+"[" + inetUtils.findFirstNonLoopbackAddress().getHostAddress() + "]" + " -> " +
- helloServiceB.hello("A");
- }
-
- @GetMapping("swagger-demo")
- @ApiOperation(value = "这是一个演示swagger的接口 ", tags = {"首页操作页面"})
- public String swagger(@ApiParam(name = "name", value = "我是姓名", required = true) String name,
- @ApiParam(name = "age", value = "我是年龄", required = true)int age,
- @ApiParam(name = "aliware-products", value = "我是购买阿里云原生产品列表", required = true) List aliwareProducts) {
- return "hello swagger";
+ @Bean(name = "serviceTag")
+ String serviceTag() {
+ String tag = parseServiceTag("/etc/podinfo/labels");
+ if (StringUtils.isNotEmpty(tag)) {
+ return tag;
}
+ return parseServiceTag("/etc/podinfo/annotations");
}
- public static String SERVICE_TAG="";
- static {
-
+ private String parseServiceTag(String path) {
+ String tag = null;
try {
- File file = new File("/etc/podinfo/annotations");
+ File file = new File(path);
if (file.exists()) {
-
Properties properties = new Properties();
FileReader fr = null;
try {
@@ -158,19 +54,32 @@ public String swagger(@ApiParam(name = "name", value = "我是姓名", required
if (fr != null) {
try {
fr.close();
- } catch (Throwable ignore) {}
+ } catch (Throwable ignore) {
+ }
}
}
- SERVICE_TAG = properties.getProperty("alicloud.service.tag").replace("\"","");
+ tag = properties.getProperty("alicloud.service.tag").replace("\"", "");
} else {
- SERVICE_TAG = System.getProperty("alicloud.service.tag");
+ tag = System.getProperty("alicloud.service.tag");
}
- } catch (Throwable ignore) {}
+ } catch (Throwable ignore) {
+ }
- if ("null".equalsIgnoreCase(SERVICE_TAG) || null == SERVICE_TAG) {
- SERVICE_TAG = "";
+ if ("null".equalsIgnoreCase(tag) || null == tag) {
+ tag = "";
}
+ return tag;
+ }
+ @Bean(name = "taskExecutor")
+ ThreadPoolTaskExecutor taskExecutor() {
+ ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+ executor.setThreadNamePrefix("taskExecutor-default-");
+ executor.setCorePoolSize(5);
+ executor.setKeepAliveSeconds(30000);
+ executor.setMaxPoolSize(10);
+ executor.setQueueCapacity(10);
+ return executor;
}
}
diff --git a/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/AController.java b/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/AController.java
new file mode 100644
index 00000000..b40cfcac
--- /dev/null
+++ b/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/AController.java
@@ -0,0 +1,130 @@
+package com.alibabacloud.mse.demo;
+
+import com.alibabacloud.mse.demo.service.HelloServiceB;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.apache.dubbo.config.annotation.Reference;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.util.EntityUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cloud.commons.util.InetUtils;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.client.RestTemplate;
+
+import javax.annotation.PostConstruct;
+import javax.servlet.http.HttpServletRequest;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.concurrent.ExecutionException;
+
+@Api(value = "/", tags = {"入口应用"})
+@RestController
+class AController {
+
+ @Autowired
+ RestTemplate restTemplate;
+
+ @Autowired
+ InetUtils inetUtils;
+
+ @Reference(application = "${dubbo.application.id}", version = "1.0.0")
+ private HelloServiceB helloServiceB;
+
+ @Autowired
+ String servcieTag;
+
+ @Autowired
+ ThreadPoolTaskExecutor taskExecutor;
+
+ private String currentZone;
+
+ @PostConstruct
+ private void init() {
+ try {
+ HttpClient client = HttpClientBuilder.create().build();
+ RequestConfig requestConfig = RequestConfig.custom()
+ .setConnectionRequestTimeout(1000)
+ .setConnectTimeout(1000)
+ .setSocketTimeout(1000)
+ .build();
+ HttpGet req = new HttpGet("http://100.100.100.200/latest/meta-data/zone-id");
+ req.setConfig(requestConfig);
+ HttpResponse response = client.execute(req);
+ currentZone = EntityUtils.toString(response.getEntity());
+ } catch (Exception e) {
+ currentZone = e.getMessage();
+ }
+ }
+
+ @ApiOperation(value = "HTTP 全链路灰度入口", tags = {"入口应用"})
+ @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();
+ Enumeration val = request.getHeaders(headerName);
+ while (val.hasMoreElements()) {
+ String headerVal = val.nextElement();
+ headerSb.append(headerName + ":" + headerVal + ",");
+ }
+ }
+
+ String result=restTemplate.getForObject("http://sc-B/b", String.class);
+// String result = taskExecutor.submit(() ->
+// restTemplate.getForObject("http://sc-B/b", String.class)
+// ).get();
+
+ return "A" + servcieTag + "[" + inetUtils.findFirstNonLoopbackAddress().getHostAddress() + "]" + " -> " +
+ result;
+ }
+
+ @ApiOperation(value = "HTTP 全链路灰度入口", tags = {"入口应用"})
+ @GetMapping("/a-zone")
+ public String aZone(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" + servcieTag + "[" + currentZone + "]" + " -> " +
+ restTemplate.getForObject("http://sc-B/b-zone", String.class);
+ }
+
+ @ApiOperation(value = "Dubbo 全链路灰度入口", tags = {"入口应用"})
+ @GetMapping("/dubbo")
+ public String dubbo(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" + servcieTag + "[" + inetUtils.findFirstNonLoopbackAddress().getHostAddress() + "]" + " -> " +
+ helloServiceB.hello("A");
+ }
+
+ @GetMapping("swagger-demo")
+ @ApiOperation(value = "这是一个演示swagger的接口 ", tags = {"首页操作页面"})
+ public String swagger(@ApiParam(name = "name", value = "我是姓名", required = true) String name,
+ @ApiParam(name = "age", value = "我是年龄", required = true) int age,
+ @ApiParam(name = "aliware-products", value = "我是购买阿里云原生产品列表", required = true) List aliwareProducts) {
+ return "hello swagger";
+ }
+}
diff --git a/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/service/HelloServiceAImpl.java b/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/service/HelloServiceAImpl.java
index b1821e83..91e32da0 100644
--- a/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/service/HelloServiceAImpl.java
+++ b/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/service/HelloServiceAImpl.java
@@ -6,10 +6,8 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.commons.util.InetUtils;
-import static com.alibabacloud.mse.demo.AApplication.SERVICE_TAG;
-
@Service(version = "1.0.0")
-public class HelloServiceAImpl implements HelloServiceA{
+public class HelloServiceAImpl implements HelloServiceA {
@Autowired
InetUtils inetUtils;
@@ -17,9 +15,12 @@ public class HelloServiceAImpl implements HelloServiceA{
@Reference(application = "${dubbo.application.id}", version = "1.0.0")
private HelloServiceB helloServiceB;
+ @Autowired
+ String servcieTag;
+
@Override
public String hello(String name) {
- return "A"+SERVICE_TAG+"[" + inetUtils.findFirstNonLoopbackAddress().getHostAddress() + "]" + " -> " +
+ return "A" + servcieTag + "[" + inetUtils.findFirstNonLoopbackAddress().getHostAddress() + "]" + " -> " +
helloServiceB.hello(name);
}
}
diff --git a/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/service/MqConsumer.java b/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/service/MqConsumer.java
index ad28bfc5..aaf0aa43 100644
--- a/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/service/MqConsumer.java
+++ b/mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/service/MqConsumer.java
@@ -25,6 +25,9 @@ public class MqConsumer implements MessageListenerConcurrently {
@Autowired
InetUtils inetUtils;
+ @Autowired
+ String servcieTag;
+
@SneakyThrows
@Override
public ConsumeConcurrentlyStatus consumeMessage(List list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {
@@ -32,7 +35,7 @@ public ConsumeConcurrentlyStatus consumeMessage(List list, ConsumeCo
MessageExt messageExt = list.get(0);
String topic = messageExt.getTopic();
String messageString = new String(messageExt.getBody(), StandardCharsets.UTF_8);
- String result = "A"+ AApplication.SERVICE_TAG+"[" + inetUtils.findFirstNonLoopbackAddress().getHostAddress() + "]" + " -> " +
+ String result = "A"+ servcieTag+"[" + inetUtils.findFirstNonLoopbackAddress().getHostAddress() + "]" + " -> " +
restTemplate.getForObject("http://sc-B/b", String.class);
log.info("topic:{},producer:{},invoke result:{}", topic, messageString, result);
diff --git a/mse-simple-demo/B/Dockerfile b/mse-simple-demo/B/Dockerfile
index 615b6ec8..2c4c049a 100644
--- a/mse-simple-demo/B/Dockerfile
+++ b/mse-simple-demo/B/Dockerfile
@@ -1,5 +1,8 @@
FROM eclipse-temurin:8-jdk-alpine
+# 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
diff --git a/mse-simple-demo/B/pom.xml b/mse-simple-demo/B/pom.xml
index 2bc253b6..e143158f 100644
--- a/mse-simple-demo/B/pom.xml
+++ b/mse-simple-demo/B/pom.xml
@@ -46,13 +46,13 @@
org.apache.dubbo
dubbo-spring-boot-starter
- 2.7.7
+ 2.7.15
org.apache.dubbo
dubbo-registry-nacos
- 2.7.7
+ 2.7.15
diff --git a/mse-simple-demo/C/C-gray-deployment.yaml b/mse-simple-demo/C/C-gray-deployment.yaml
deleted file mode 100644
index 03df3986..00000000
--- a/mse-simple-demo/C/C-gray-deployment.yaml
+++ /dev/null
@@ -1,25 +0,0 @@
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: spring-cloud-c-gray
-spec:
- selector:
- matchLabels:
- app: spring-cloud-c-gray
- template:
- metadata:
- annotations:
- alicloud.service.tag: gray
- msePilotCreateAppName: spring-cloud-c
- labels:
- app: spring-cloud-c-gray
- spec:
- containers:
- - env:
- - name: JAVA_HOME
- value: /usr/lib/jvm/java-1.8-openjdk/jre
- image: registry.cn-shanghai.aliyuncs.com/yizhan/spring-cloud-c:1.0.0
- imagePullPolicy: Always
- name: spring-cloud-c-gray
- ports:
- - containerPort: 20003
diff --git a/mse-simple-demo/C/Dockerfile b/mse-simple-demo/C/Dockerfile
index 54df0012..84121cd4 100644
--- a/mse-simple-demo/C/Dockerfile
+++ b/mse-simple-demo/C/Dockerfile
@@ -1,5 +1,8 @@
FROM eclipse-temurin:8-jdk-alpine
+# 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
diff --git a/mse-simple-demo/C/pom.xml b/mse-simple-demo/C/pom.xml
index 64c988b6..204da641 100644
--- a/mse-simple-demo/C/pom.xml
+++ b/mse-simple-demo/C/pom.xml
@@ -61,13 +61,13 @@
org.apache.dubbo
dubbo-spring-boot-starter
- 2.7.7
+ 2.7.15
org.apache.dubbo
dubbo-registry-nacos
- 2.7.7
+ 2.7.15
diff --git a/mse-simple-demo/C/src/main/java/com/alibabacloud/mse/demo/CApplication.java b/mse-simple-demo/C/src/main/java/com/alibabacloud/mse/demo/CApplication.java
index 06956a34..72fedb70 100644
--- a/mse-simple-demo/C/src/main/java/com/alibabacloud/mse/demo/CApplication.java
+++ b/mse-simple-demo/C/src/main/java/com/alibabacloud/mse/demo/CApplication.java
@@ -1,25 +1,12 @@
-
package com.alibabacloud.mse.demo;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.config.RequestConfig;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.impl.client.HttpClientBuilder;
-import org.apache.http.util.EntityUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
-import org.springframework.cloud.commons.util.InetUtils;
import org.springframework.context.annotation.Bean;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
-import javax.annotation.PostConstruct;
-import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
@@ -38,63 +25,21 @@ RestTemplate restTemplate() {
return new RestTemplate();
}
- @RestController
- class AController {
-
- @Autowired
- RestTemplate restTemplate;
-
- @Autowired
- InetUtils inetUtils;
-
- @Value("${throwException:false}")
- boolean throwException;
-
- private String currentZone;
-
- @PostConstruct
- private void init() {
- try {
- HttpClient client = HttpClientBuilder.create().build();
- RequestConfig requestConfig = RequestConfig.custom()
- .setConnectionRequestTimeout(1000)
- .setConnectTimeout(1000)
- .setSocketTimeout(1000)
- .build();
- HttpGet req = new HttpGet("http://100.100.100.200/latest/meta-data/zone-id");
- req.setConfig(requestConfig);
- HttpResponse response = client.execute(req);
- currentZone = EntityUtils.toString(response.getEntity());
- } catch (Exception e) {
- currentZone = e.getMessage();
- }
- }
-
- @GetMapping("/c")
- public String c(HttpServletRequest request) {
- if (throwException) {
- throw new RuntimeException();
- }
- return "C" + SERVICE_TAG + "[" + inetUtils.findFirstNonLoopbackAddress().getHostAddress() + "]";
- }
- @GetMapping("/c-zone")
- public String cZone(HttpServletRequest request) {
- if (throwException) {
- throw new RuntimeException();
- }
- return "C" + SERVICE_TAG + "[" + currentZone + "]";
+ @Bean(name = "serviceTag")
+ String serviceTag() {
+ String tag = parseServiceTag("/etc/podinfo/labels");
+ if (StringUtils.isNotEmpty(tag)) {
+ return tag;
}
+ return parseServiceTag("/etc/podinfo/annotations");
}
- public static String SERVICE_TAG = "";
-
- static {
-
+ private String parseServiceTag(String path) {
+ String tag = null;
try {
- File file = new File("/etc/podinfo/annotations");
+ File file = new File(path);
if (file.exists()) {
-
Properties properties = new Properties();
FileReader fr = null;
try {
@@ -109,14 +54,16 @@ public String cZone(HttpServletRequest request) {
}
}
}
- SERVICE_TAG = properties.getProperty("alicloud.service.tag").replace("\"", "");
+ tag = properties.getProperty("alicloud.service.tag").replace("\"", "");
} else {
- SERVICE_TAG = System.getProperty("alicloud.service.tag");;
+ tag = System.getProperty("alicloud.service.tag");
}
} catch (Throwable ignore) {
}
- if ("null".equalsIgnoreCase(SERVICE_TAG) || null == SERVICE_TAG) {
- SERVICE_TAG = "";
+
+ if ("null".equalsIgnoreCase(tag) || null == tag) {
+ tag = "";
}
+ return tag;
}
}
diff --git a/mse-simple-demo/C/src/main/java/com/alibabacloud/mse/demo/CController.java b/mse-simple-demo/C/src/main/java/com/alibabacloud/mse/demo/CController.java
new file mode 100644
index 00000000..d0eec48b
--- /dev/null
+++ b/mse-simple-demo/C/src/main/java/com/alibabacloud/mse/demo/CController.java
@@ -0,0 +1,69 @@
+package com.alibabacloud.mse.demo;
+
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.util.EntityUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.cloud.commons.util.InetUtils;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.client.RestTemplate;
+
+import javax.annotation.PostConstruct;
+import javax.servlet.http.HttpServletRequest;
+
+@RestController
+class CController {
+
+ @Autowired
+ RestTemplate restTemplate;
+
+ @Autowired
+ InetUtils inetUtils;
+
+ @Autowired
+ String servcieTag;
+
+ @Value("${throwException:false}")
+ boolean throwException;
+
+ private String currentZone;
+
+ @PostConstruct
+ private void init() {
+ try {
+ HttpClient client = HttpClientBuilder.create().build();
+ RequestConfig requestConfig = RequestConfig.custom()
+ .setConnectionRequestTimeout(1000)
+ .setConnectTimeout(1000)
+ .setSocketTimeout(1000)
+ .build();
+ HttpGet req = new HttpGet("http://100.100.100.200/latest/meta-data/zone-id");
+ req.setConfig(requestConfig);
+ HttpResponse response = client.execute(req);
+ currentZone = EntityUtils.toString(response.getEntity());
+ } catch (Exception e) {
+ currentZone = e.getMessage();
+ }
+ }
+
+ @GetMapping("/c")
+ public String c(HttpServletRequest request) {
+ if (throwException) {
+ throw new RuntimeException();
+ }
+ return "C" + servcieTag+ "[" + inetUtils.findFirstNonLoopbackAddress().getHostAddress() + "]";
+ }
+
+ @GetMapping("/c-zone")
+ public String cZone(HttpServletRequest request) {
+ if (throwException) {
+ throw new RuntimeException();
+ }
+ return "C" + servcieTag + "[" + currentZone + "]";
+ }
+}
diff --git a/mse-simple-demo/C/src/main/java/com/alibabacloud/mse/demo/service/HelloServiceCImpl.java b/mse-simple-demo/C/src/main/java/com/alibabacloud/mse/demo/service/HelloServiceCImpl.java
index 425c12dc..0c8d42a3 100644
--- a/mse-simple-demo/C/src/main/java/com/alibabacloud/mse/demo/service/HelloServiceCImpl.java
+++ b/mse-simple-demo/C/src/main/java/com/alibabacloud/mse/demo/service/HelloServiceCImpl.java
@@ -13,8 +13,6 @@
import java.nio.charset.StandardCharsets;
-import static com.alibabacloud.mse.demo.CApplication.SERVICE_TAG;
-
@Slf4j
@DubboService(version = "1.0.0")
@RequiredArgsConstructor
@@ -28,6 +26,8 @@ public class HelloServiceCImpl implements HelloServiceC {
@Value("${rocketmq.consumer.topic}")
private String topic;
+ @Autowired
+ String servcieTag;
@Value("${throwException:false}")
boolean throwException;
@@ -39,7 +39,7 @@ public String hello(String name) {
throw new RuntimeException();
}
- String value = "C" + SERVICE_TAG + "[" + inetUtils.findFirstNonLoopbackAddress().getHostAddress() + "]";
+ String value = "C" + servcieTag + "[" + inetUtils.findFirstNonLoopbackAddress().getHostAddress() + "]";
String invokerTag="";
String userData = RpcContext.getContext().getAttachment("__microservice_tag__");
if (!StringUtils.isEmpty(userData)) {
diff --git a/mse-simple-demo/gateway/Dockerfile b/mse-simple-demo/gateway/Dockerfile
index 634f56a0..852ad3ba 100644
--- a/mse-simple-demo/gateway/Dockerfile
+++ b/mse-simple-demo/gateway/Dockerfile
@@ -1,5 +1,8 @@
FROM eclipse-temurin:8-jdk-alpine
+# 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
diff --git a/mse-simple-demo/gateway/src/main/java/com/alibabacloud/mse/demo/DemoController.java b/mse-simple-demo/gateway/src/main/java/com/alibabacloud/mse/demo/DemoController.java
index f15614e6..f059ec17 100644
--- a/mse-simple-demo/gateway/src/main/java/com/alibabacloud/mse/demo/DemoController.java
+++ b/mse-simple-demo/gateway/src/main/java/com/alibabacloud/mse/demo/DemoController.java
@@ -49,48 +49,49 @@ public String index(Model model) {
@PostConstruct
private void flow() {
+ if (qps > 0) {
+ FLOW_EXECUTOR.scheduleAtFixedRate(new Runnable() {
+ @Override
+ public void run() {
- 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);
+ try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
+ HttpGet httpGet = new HttpGet("http://localhost:20000/A/a");
+ httpClient.execute(httpGet);
- } catch (Exception ignore) {
+ } catch (Exception ignore) {
+ }
}
- }
- }, 100, 1000000 / qps, TimeUnit.MICROSECONDS);
+ }, 100, 1000000 / qps, TimeUnit.MICROSECONDS);
- FLOW_EXECUTOR.scheduleAtFixedRate(new Runnable() {
- @Override
- public void run() {
+ 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);
+ try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
+ HttpGet httpGet = new HttpGet("http://localhost:20000/A/a?name=xiaoming");
+ httpClient.execute(httpGet);
- } catch (Exception ignore) {
+ } catch (Exception ignore) {
+ }
}
- }
- }, 100, 10 * 1000000 / qps, TimeUnit.MICROSECONDS);
+ }, 100, 10 * 1000000 / qps, TimeUnit.MICROSECONDS);
- FLOW_EXECUTOR.scheduleAtFixedRate(new Runnable() {
- @Override
- public void run() {
+ FLOW_EXECUTOR.scheduleAtFixedRate(new Runnable() {
+ @Override
+ public void run() {
- try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
- HttpGet httpGet = new HttpGet("http://localhost:20000/A/a");
- httpGet.addHeader("x-mse-tag", "gray");
- httpClient.execute(httpGet);
+ try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
+ HttpGet httpGet = new HttpGet("http://localhost:20000/A/a");
+ httpGet.addHeader("x-mse-tag", "gray");
+ httpClient.execute(httpGet);
- } catch (Exception ignore) {
+ } catch (Exception ignore) {
+ }
}
- }
- }, 100, 10 * 1000000 / qps, TimeUnit.MICROSECONDS);
+ }, 100, 10 * 1000000 / qps, TimeUnit.MICROSECONDS);
+ }
if (enableMqInvoke) {
diff --git a/mse-simple-demo/helm/mse-simple-demo/README.md b/mse-simple-demo/helm/mse-simple-demo/README.md
index 02d7ae9a..83731a31 100644
--- a/mse-simple-demo/helm/mse-simple-demo/README.md
+++ b/mse-simple-demo/helm/mse-simple-demo/README.md
@@ -9,8 +9,8 @@ At directory `A`/`B`/`C`/`gateway`:
## install
```shell
-helm3 upgrade helm/mse-simple-demo \
+helm3 upgrade mse-simple-demo1 helm/mse-simple-demo \
--namespace default --create-namespace \
- --install mse-simple-demo1 \
+ --install \
--values helm/mse-simple-demo/values.example.yaml
```
diff --git a/mse-simple-demo/helm/mse-simple-demo/templates/spring-cloud-b-gray-deployment.yaml b/mse-simple-demo/helm/mse-simple-demo/templates/spring-cloud-c-gray-deployment.yaml
similarity index 79%
rename from mse-simple-demo/helm/mse-simple-demo/templates/spring-cloud-b-gray-deployment.yaml
rename to mse-simple-demo/helm/mse-simple-demo/templates/spring-cloud-c-gray-deployment.yaml
index c17cdc9b..4d1246eb 100644
--- a/mse-simple-demo/helm/mse-simple-demo/templates/spring-cloud-b-gray-deployment.yaml
+++ b/mse-simple-demo/helm/mse-simple-demo/templates/spring-cloud-c-gray-deployment.yaml
@@ -1,25 +1,24 @@
apiVersion: apps/v1
kind: Deployment
metadata:
- name: spring-cloud-b-gray
+ name: spring-cloud-c-gray
namespace: {{ .Release.Namespace }}
spec:
replicas: 1
selector:
matchLabels:
- app: spring-cloud-b-gray
+ app: spring-cloud-c-gray
template:
metadata:
- annotations:
- alicloud.service.tag: gray
labels:
+ alicloud.service.tag: gray
msePilotAutoEnable: "on"
- appName: "{{ .Release.Namespace }}-spring-cloud-b"
- app: "spring-cloud-b-gray"
+ appName: "{{ .Release.Namespace }}-spring-cloud-c"
+ app: "spring-cloud-c-gray"
spec:
containers:
- - name: spring-cloud-b
- image: "{{ .Values.registry }}spring-cloud-b:1.0.0"
+ - name: spring-cloud-c
+ image: "{{ .Values.registry }}spring-cloud-c:1.0.0"
imagePullPolicy: Always
env:
- name: nacos.host