Skip to content

Commit a1acf8f

Browse files
committed
fix restTemplate
1 parent c1c8378 commit a1acf8f

File tree

17 files changed

+110
-31
lines changed

17 files changed

+110
-31
lines changed

mse-simple-demo/A/build.sh

+5-2
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,8 @@ set -e
33

44
cd "$(dirname "$0")"
55

6-
mvn clean package
7-
docker build . -t spring-cloud-a:1.1.0
6+
docker build . -t ${REGISTRY}spring-cloud-a:1.1.0
7+
8+
if [ -n "${REGISTRY}" ]; then
9+
docker push ${REGISTRY}spring-cloud-a:1.1.0
10+
fi

mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/AApplication.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.apache.commons.lang3.StringUtils;
55
import org.springframework.boot.SpringApplication;
66
import org.springframework.boot.autoconfigure.SpringBootApplication;
7+
import org.springframework.boot.web.client.RestTemplateBuilder;
78
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
89
import org.springframework.context.annotation.Bean;
910
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
@@ -31,9 +32,11 @@ RestTemplate loadBalancedRestTemplate() {
3132
}
3233

3334
@Bean(name = "restTemplate")
34-
@LoadBalanced
3535
RestTemplate restTemplate() {
36-
return new RestTemplate();
36+
return new RestTemplateBuilder(rt -> rt.getInterceptors().add((request, body, execution) -> {
37+
request.getHeaders().add("Connection", "close");
38+
return execution.execute(request, body);
39+
})).build();
3740
}
3841

3942
@Bean(name = "serviceTag")

mse-simple-demo/A/src/main/java/com/alibabacloud/mse/demo/AController.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ public String a(HttpServletRequest request) throws ExecutionException, Interrupt
9898

9999
@GetMapping("/spring_boot")
100100
public String spring_boot(HttpServletRequest request) {
101-
String result = restTemplate.getForObject("http://sc-b/spring_boot", String.class);
101+
String result = restTemplate.getForObject("http://sc-b:20002/spring_boot", String.class);
102102

103103
return "A" + serviceTag + "[" + inetUtils.findFirstNonLoopbackAddress().getHostAddress() + "]" +
104104
" -> " + result;

mse-simple-demo/B/build.sh

+5-2
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,8 @@
22

33
cd "$(dirname "$0")"
44

5-
mvn clean package
6-
docker build . -t spring-cloud-b:1.1.0
5+
docker build . -t ${REGISTRY}spring-cloud-b:1.1.0
6+
7+
if [ -n "${REGISTRY}" ]; then
8+
docker push ${REGISTRY}spring-cloud-b:1.1.0
9+
fi

mse-simple-demo/B/src/main/java/com/alibabacloud/mse/demo/BApplication.java

+10-2
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,19 @@
44
import org.apache.commons.lang3.StringUtils;
55
import org.springframework.boot.SpringApplication;
66
import org.springframework.boot.autoconfigure.SpringBootApplication;
7+
import org.springframework.boot.web.client.RestTemplateBuilder;
78
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
89
import org.springframework.context.annotation.Bean;
10+
import org.springframework.http.HttpMethod;
11+
import org.springframework.http.client.ClientHttpRequest;
12+
import org.springframework.http.client.ClientHttpRequestFactory;
13+
import org.springframework.http.client.SimpleClientHttpRequestFactory;
914
import org.springframework.web.client.RestTemplate;
1015

1116
import java.io.File;
1217
import java.io.FileReader;
1318
import java.io.IOException;
19+
import java.net.URI;
1420
import java.util.Properties;
1521

1622
@SpringBootApplication
@@ -27,9 +33,11 @@ RestTemplate loadBalancedRestTemplate() {
2733
}
2834

2935
@Bean(name = "restTemplate")
30-
@LoadBalanced
3136
RestTemplate restTemplate() {
32-
return new RestTemplate();
37+
return new RestTemplateBuilder(rt -> rt.getInterceptors().add((request, body, execution) -> {
38+
request.getHeaders().add("Connection", "close");
39+
return execution.execute(request, body);
40+
})).build();
3341
}
3442

3543
@Bean(name = "serviceTag")

mse-simple-demo/B/src/main/java/com/alibabacloud/mse/demo/BController.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,9 @@ public String bZone(HttpServletRequest request) {
6565
loadBalancedRestTemplate.getForObject("http://sc-C/c-zone", String.class);
6666
}
6767

68-
@GetMapping("/spring-boot")
68+
@GetMapping("/spring_boot")
6969
public String spring_boot(HttpServletRequest request) {
7070
return "B" + serviceTag + "[" + inetUtils.findFirstNonLoopbackAddress().getHostAddress() + "]" + " -> " +
71-
restTemplate.getForObject("http://sc-c/spring-boot", String.class);
71+
restTemplate.getForObject("http://sc-c:20003/spring_boot", String.class);
7272
}
7373
}

mse-simple-demo/C/Dockerfile

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@
22

33
FROM maven:3-eclipse-temurin-8-alpine as build
44

5-
# copy arthas
6-
COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas
7-
85
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
96

107
COPY <<EOF /root/.m2/settings.xml
@@ -35,6 +32,9 @@ RUN --mount=type=cache,target=/root/.m2/repository/ \
3532

3633
FROM dragonwell-registry.cn-hangzhou.cr.aliyuncs.com/dragonwell/dragonwell:8-extended-ga-centos
3734

35+
# copy arthas
36+
COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas
37+
3838
COPY --from=build /app/target/C.jar /app/target/C.jar
3939

4040
EXPOSE 20003

mse-simple-demo/C/build.sh

+5-2
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,8 @@ set -e
33

44
cd "$(dirname "$0")"
55

6-
mvn clean package
7-
docker build . -t spring-cloud-c:1.1.0
6+
docker build . -t ${REGISTRY}spring-cloud-c:1.1.0
7+
8+
if [ -n "${REGISTRY}" ]; then
9+
docker push ${REGISTRY}spring-cloud-c:1.1.0
10+
fi

mse-simple-demo/C/src/main/java/com/alibabacloud/mse/demo/CApplication.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import org.apache.commons.lang3.StringUtils;
44
import org.springframework.boot.SpringApplication;
55
import org.springframework.boot.autoconfigure.SpringBootApplication;
6+
import org.springframework.boot.web.client.RestTemplateBuilder;
67
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
78
import org.springframework.context.annotation.Bean;
89
import org.springframework.web.client.RestTemplate;
@@ -26,9 +27,11 @@ RestTemplate loadBalancedRestTemplate() {
2627
}
2728

2829
@Bean(name = "restTemplate")
29-
@LoadBalanced
3030
RestTemplate restTemplate() {
31-
return new RestTemplate();
31+
return new RestTemplateBuilder(rt -> rt.getInterceptors().add((request, body, execution) -> {
32+
request.getHeaders().add("Connection", "close");
33+
return execution.execute(request, body);
34+
})).build();
3235
}
3336

3437
@Bean(name = "serviceTag")

mse-simple-demo/C/src/main/java/com/alibabacloud/mse/demo/CController.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public String cZone(HttpServletRequest request) {
6565
return "C" + serviceTag + "[" + currentZone + "]";
6666
}
6767

68-
@GetMapping("/spring-boot")
68+
@GetMapping("/spring_boot")
6969
public String spring_boot(HttpServletRequest request) {
7070
return "C" + serviceTag + "[" + inetUtils.findFirstNonLoopbackAddress().getHostAddress() + "]";
7171
}

mse-simple-demo/gateway/Dockerfile

+34-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,42 @@
1+
# syntax=docker/dockerfile:1.3-labs
2+
3+
FROM maven:3-eclipse-temurin-8-alpine as build
4+
5+
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
6+
7+
COPY <<EOF /root/.m2/settings.xml
8+
<?xml version=\"1.0\"?>
9+
<settings>
10+
<mirrors>
11+
<mirror>
12+
<id>alimaven</id>
13+
<name>aliyun maven</name>
14+
<url>https://maven.aliyun.com/nexus/content/groups/public/</url>
15+
<mirrorOf>central</mirrorOf>
16+
</mirror>
17+
<mirror>
18+
<id>maven-default-http-blocker</id>
19+
<mirrorOf>!*</mirrorOf>
20+
<url>http://0.0.0.0/</url>
21+
</mirror>
22+
</mirrors>
23+
</settings>
24+
EOF
25+
26+
WORKDIR /app
27+
28+
COPY ./ ./
29+
30+
RUN --mount=type=cache,target=/root/.m2/repository/ \
31+
mvn clean package --batch-mode
32+
133
FROM dragonwell-registry.cn-hangzhou.cr.aliyuncs.com/dragonwell/dragonwell:8-extended-ga-centos
234

335
# copy arthas
436
COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas
537

6-
WORKDIR /app
7-
COPY /target/gateway.jar /app
38+
COPY --from=build /app/target/gateway.jar /app/target/gateway.jar
839

940
EXPOSE 20000
1041
ENTRYPOINT ["sh", "-c"]
11-
CMD ["java -jar /app/gateway.jar"]
42+
CMD ["java -jar /app/target/gateway.jar"]

mse-simple-demo/gateway/build.sh

+5-2
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,8 @@ set -e
33

44
cd "$(dirname "$0")"
55

6-
mvn clean package
7-
docker build . -t spring-cloud-zuul:1.1.0
6+
docker build . -t ${REGISTRY}spring-cloud-zuul:1.1.0
7+
8+
if [ -n "${REGISTRY}" ]; then
9+
docker push ${REGISTRY}spring-cloud-zuul:1.1.0
10+
fi

mse-simple-demo/gateway/src/main/java/com/alibabacloud/mse/demo/DemoController.java

+15-1
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,17 @@
44
import org.apache.http.client.methods.HttpGet;
55
import org.apache.http.impl.client.CloseableHttpClient;
66
import org.apache.http.impl.client.HttpClientBuilder;
7+
import org.springframework.beans.factory.annotation.Autowired;
8+
import org.springframework.beans.factory.annotation.Qualifier;
79
import org.springframework.beans.factory.annotation.Value;
810
import org.springframework.stereotype.Controller;
911
import org.springframework.ui.Model;
1012
import org.springframework.web.bind.annotation.GetMapping;
13+
import org.springframework.web.bind.annotation.ResponseBody;
14+
import org.springframework.web.client.RestTemplate;
1115

1216
import javax.annotation.PostConstruct;
17+
import javax.servlet.http.HttpServletRequest;
1318
import java.util.concurrent.Executors;
1419
import java.util.concurrent.ScheduledExecutorService;
1520
import java.util.concurrent.ThreadFactory;
@@ -18,14 +23,16 @@
1823
@Controller
1924
public class DemoController {
2025

26+
@Autowired
27+
@Qualifier("restTemplate")
28+
private RestTemplate restTemplate;
2129

2230
@Value("${demo.qps:100}")
2331
private int qps;
2432

2533
@Value("${enable.mq.invoke:false}")
2634
private boolean enableMqInvoke;
2735

28-
2936
@Value("${background.color:white}")
3037
private String backgroundColor;
3138

@@ -47,6 +54,13 @@ public String index(Model model) {
4754
return "index";
4855
}
4956

57+
@GetMapping("/spring_boot")
58+
@ResponseBody
59+
public String spring_boot(HttpServletRequest request) {
60+
String result = restTemplate.getForObject("http://sc-a:20001/spring_boot", String.class);
61+
return result;
62+
}
63+
5064
@PostConstruct
5165
private void flow() {
5266
if (qps > 0) {

mse-simple-demo/gateway/src/main/java/com/alibabacloud/mse/demo/ZuulApplication.java

+11
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,11 @@
1818

1919
import org.springframework.boot.SpringApplication;
2020
import org.springframework.boot.autoconfigure.SpringBootApplication;
21+
import org.springframework.boot.web.client.RestTemplateBuilder;
22+
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
2123
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
24+
import org.springframework.context.annotation.Bean;
25+
import org.springframework.web.client.RestTemplate;
2226

2327
@SpringBootApplication
2428
@EnableZuulProxy
@@ -28,4 +32,11 @@ public static void main(String[] args) {
2832
SpringApplication.run(ZuulApplication.class, args);
2933
}
3034

35+
@Bean(name = "restTemplate")
36+
RestTemplate restTemplate() {
37+
return new RestTemplateBuilder(rt -> rt.getInterceptors().add((request, body, execution) -> {
38+
request.getHeaders().add("Connection", "close");
39+
return execution.execute(request, body);
40+
})).build();
41+
}
3142
}

mse-simple-demo/helm/mse-simple-demo/templates/sc-a-svc.yaml

+1-2
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ metadata:
55
namespace: {{ .Release.Namespace }}
66
spec:
77
ports:
8-
- name: port-1
9-
port: 20001
8+
- port: 20001
109
protocol: TCP
1110
targetPort: 20001
1211
selector:

mse-simple-demo/helm/mse-simple-demo/templates/sc-b-svc.yaml

+1-2
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ metadata:
55
namespace: {{ .Release.Namespace }}
66
spec:
77
ports:
8-
- name: port-1
9-
port: 20002
8+
- port: 20002
109
protocol: TCP
1110
targetPort: 20002
1211
selector:

mse-simple-demo/helm/mse-simple-demo/templates/sc-c-svc.yaml

+1-2
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ metadata:
55
namespace: {{ .Release.Namespace }}
66
spec:
77
ports:
8-
- name: port-1
9-
port: 20003
8+
- port: 20003
109
protocol: TCP
1110
targetPort: 20003
1211
selector:

0 commit comments

Comments
 (0)