Skip to content

Commit acbb2d6

Browse files
fredrikliufredrikliu
andauthored
feat:add circuitbreaker demo (#184)
* add circuitbreaker demo * add circuitbreaker demo --------- Co-authored-by: fredrikliu <[email protected]>
1 parent 06a4d59 commit acbb2d6

File tree

15 files changed

+425
-13
lines changed

15 files changed

+425
-13
lines changed

polaris-agent-examples/spring-cloud-plugins-examples/spring-cloud-hoxton-examples/quickstart-examples/consumer/pom.xml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,30 @@
6060
<groupId>org.springframework.boot</groupId>
6161
<artifactId>spring-boot-starter-actuator</artifactId>
6262
</dependency>
63+
<dependency>
64+
<groupId>org.springframework.boot</groupId>
65+
<artifactId>spring-boot-starter-web</artifactId>
66+
</dependency>
67+
68+
<dependency>
69+
<groupId>org.springframework.boot</groupId>
70+
<artifactId>spring-boot-starter-webflux</artifactId>
71+
</dependency>
72+
73+
<dependency>
74+
<groupId>org.springframework.cloud</groupId>
75+
<artifactId>spring-cloud-starter-openfeign</artifactId>
76+
</dependency>
77+
78+
<dependency>
79+
<groupId>org.springframework.boot</groupId>
80+
<artifactId>spring-boot-starter-actuator</artifactId>
81+
</dependency>
82+
83+
<dependency>
84+
<groupId>org.springframework.cloud</groupId>
85+
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
86+
</dependency>
6387
</dependencies>
6488

6589
<build>

polaris-agent-examples/spring-cloud-plugins-examples/spring-cloud-hoxton-examples/quickstart-examples/consumer/src/main/java/cn/polarismesh/agent/examples/alibaba/cloud/cloud/ConsumerApplication.java

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,22 @@
1717

1818
package cn.polarismesh.agent.examples.alibaba.cloud.cloud;
1919

20+
import org.springframework.beans.factory.annotation.Autowired;
21+
import org.springframework.beans.factory.annotation.Qualifier;
2022
import org.springframework.boot.SpringApplication;
2123
import org.springframework.boot.autoconfigure.SpringBootApplication;
24+
import org.springframework.cloud.client.circuitbreaker.CircuitBreakerFactory;
2225
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
26+
import org.springframework.cloud.openfeign.FeignClient;
2327
import org.springframework.context.annotation.Bean;
2428
import org.springframework.http.ResponseEntity;
29+
import org.springframework.stereotype.Component;
2530
import org.springframework.web.bind.annotation.GetMapping;
2631
import org.springframework.web.bind.annotation.PathVariable;
2732
import org.springframework.web.bind.annotation.RestController;
2833
import org.springframework.web.client.RestTemplate;
34+
import org.springframework.web.util.DefaultUriBuilderFactory;
35+
2936

3037
/**
3138
* @author <a href="mailto:[email protected]">liaochuntao</a>
@@ -52,14 +59,67 @@ public EchoController(RestTemplate restTemplate) {
5259
this.template = restTemplate;
5360
}
5461

62+
@Autowired
63+
@Qualifier("defaultRestTemplate")
64+
private RestTemplate defaultRestTemplate;
65+
66+
@Autowired
67+
private CircuitBreakerFactory circuitBreakerFactory;
68+
69+
@Bean
70+
@LoadBalanced
71+
public RestTemplate defaultRestTemplate() {
72+
DefaultUriBuilderFactory uriBuilderFactory = new DefaultUriBuilderFactory("http://service-provider-hoxton");
73+
RestTemplate restTemplate = new RestTemplate();
74+
restTemplate.setUriTemplateHandler(uriBuilderFactory);
75+
return restTemplate;
76+
}
77+
78+
@GetMapping("/rest")
79+
public String circuitBreakRestTemplate() {
80+
return circuitBreakerFactory
81+
.create("service-provider-hoxton#/circuitBreak")
82+
.run(() -> defaultRestTemplate.getForObject("/circuitBreak", String.class),
83+
throwable -> "trigger the refuse for service callee."
84+
);
85+
}
86+
5587
@GetMapping("/echo/{str}")
5688
public ResponseEntity<String> rest(@PathVariable String str) {
5789
ResponseEntity<String> response = template.getForEntity("http://service-provider-hoxton/echo/" + str,
5890
String.class);
5991
return response;
6092
}
93+
}
94+
@FeignClient(name = "service-provider-hoxton", contextId = "fallback-from-polaris")
95+
public interface CircuitBreakerQuickstartCalleeService {
6196

97+
/**
98+
* Check circuit break.
99+
*
100+
* @return circuit break info
101+
*/
102+
@GetMapping("/circuitBreak")
103+
String circuitBreak();
104+
}
105+
@Component
106+
public class CircuitBreakerQuickstartCalleeServiceFallback implements CircuitBreakerQuickstartCalleeServiceWithFallback {
62107

108+
@Override
109+
public String circuitBreak() {
110+
return "fallback: trigger the refuse for service callee.";
111+
}
63112
}
64113

114+
@FeignClient(name = "service-provider-hoxton", contextId = "fallback-from-code", fallback = CircuitBreakerQuickstartCalleeServiceFallback.class)
115+
public interface CircuitBreakerQuickstartCalleeServiceWithFallback {
116+
117+
/**
118+
* Check circuit break.
119+
*
120+
* @return circuit break info
121+
*/
122+
@GetMapping("/circuitBreak")
123+
String circuitBreak();
124+
}
65125
}

polaris-agent-examples/spring-cloud-plugins-examples/spring-cloud-hoxton-examples/quickstart-examples/pom.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
<artifactId>hoxton-quickstart-examples</artifactId>
1414
<packaging>pom</packaging>
1515
<modules>
16-
<module>provider</module>
16+
<module>provider-b</module>
17+
<module>provider-a</module>
1718
<module>consumer</module>
1819
<module>scg</module>
1920
</modules>
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,26 @@ apiVersion: apps/v1
33
kind: Deployment
44
metadata:
55
labels:
6-
app: service-provider-hoxton
7-
name: service-provider-hoxton
6+
app: service-provider-hoxton-a
7+
name: service-provider-hoxton-a
88
namespace: default
99
spec:
1010
replicas: 1
1111
selector:
1212
matchLabels:
13-
app: service-provider-hoxton
13+
app: service-provider-hoxton-a
1414
template:
1515
metadata:
1616
labels:
17-
app: service-provider-hoxton
17+
app: service-provider-hoxton-a
1818
annotations:
1919
polarismesh.cn/javaagent: "true"
2020
polarismesh.cn/javaagentVersion: "1.7.0-RC2"
2121
polarismesh.cn/javaagentFrameworkName: "spring-cloud"
2222
polarismesh.cn/javaagentFrameworkVersion: "hoxton"
2323
spec:
2424
containers:
25-
- image: polarismesh/polaris-javaagent-demo-sc-quickstart-hoxton-provider:1.7.0-java8
25+
- image: polarismesh/polaris-javaagent-demo-sc-quickstart-hoxton-provider-a:1.7.0-java8
2626
imagePullPolicy: Always
2727
name: provider
2828
resources:
@@ -34,7 +34,7 @@ spec:
3434
command:
3535
- /bin/bash
3636
- -c
37-
- cd /app && java -Dserver.port=65101 -jar main.jar
37+
- cd /app && java -Dserver.port=65001 -jar main.jar
3838
lifecycle:
3939
preStop:
4040
exec:
Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@
1111
<modelVersion>4.0.0</modelVersion>
1212

1313
<groupId>com.tencent.polaris</groupId>
14-
<artifactId>polaris-javaagent-demo-sc-quickstart-hoxton-provider</artifactId>
14+
<artifactId>polaris-javaagent-demo-sc-quickstart-hoxton-provider-a</artifactId>
1515
<packaging>jar</packaging>
1616
<version>1.7.0</version>
1717

18-
<name>hoxton-provider</name>
18+
<name>hoxton-provider-a</name>
1919
<description>Demo Provider Project For Spring Cloud Alibaba</description>
2020

2121
<dependencyManagement>
@@ -56,6 +56,36 @@
5656
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
5757
</dependency>
5858

59+
<dependency>
60+
<groupId>org.springframework.boot</groupId>
61+
<artifactId>spring-boot-starter-web</artifactId>
62+
</dependency>
63+
64+
<dependency>
65+
<groupId>org.springframework.boot</groupId>
66+
<artifactId>spring-boot-starter-web</artifactId>
67+
</dependency>
68+
69+
<dependency>
70+
<groupId>org.springframework.boot</groupId>
71+
<artifactId>spring-boot-starter-webflux</artifactId>
72+
</dependency>
73+
74+
<dependency>
75+
<groupId>org.springframework.cloud</groupId>
76+
<artifactId>spring-cloud-starter-openfeign</artifactId>
77+
</dependency>
78+
79+
<dependency>
80+
<groupId>org.springframework.boot</groupId>
81+
<artifactId>spring-boot-starter-actuator</artifactId>
82+
</dependency>
83+
84+
<dependency>
85+
<groupId>org.springframework.cloud</groupId>
86+
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
87+
</dependency>
88+
5989
<dependency>
6090
<groupId>org.springframework.boot</groupId>
6191
<artifactId>spring-boot-starter-actuator</artifactId>
Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
package cn.polarismesh.agent.examples.alibaba.cloud.cloud;
1919

2020

21+
import org.slf4j.Logger;
22+
import org.slf4j.LoggerFactory;
2123
import org.springframework.beans.factory.annotation.Value;
2224
import org.springframework.boot.SpringApplication;
2325
import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -43,13 +45,23 @@ public static void main(String[] args) {
4345
@RestController
4446
public static class EchoController {
4547

48+
private static final Logger LOG = LoggerFactory.getLogger(ProviderApplication.class);
49+
4650
@Value("${name:}")
4751
private String name;
4852

49-
5053
@Value("${server.port}")
5154
private String port;
5255

56+
@Value("${spring.cloud.client.ip-address:127.0.0.1}")
57+
private String ip;
58+
59+
@GetMapping("/circuitBreak")
60+
public String circuitBreak() {
61+
LOG.info("Quickstart Callee Service [{}:{}] is called right.", ip, port);
62+
return String.format("Quickstart Callee Service [%s:%s] is called right.", ip, port);
63+
}
64+
5365
@GetMapping("/echo/{string}")
5466
public String echo(@PathVariable String string) {
5567
return "Hello, I'm provider, receive msg : "
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
2-
spring.cloud.nacos.discovery.enabled=true
2+
spring.cloud.nacos.discovery.enabled=false
33

44
management.endpoints.web.exposure.include=*
55
management.endpoint.health.show-details=always
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
server.port=65001
22
spring.application.name=service-provider-hoxton
33
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
4-
spring.cloud.nacos.config.enabled=true
4+
spring.cloud.nacos.config.enabled=false
5+
spring.cloud.nacos.discovery.enabled=false
56
spring.cloud.nacos.username=nacos
6-
spring.cloud.nacos.password=nacos
7+
spring.cloud.nacos.password=nacos
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
FROM alpine:3.19.1
2+
3+
ARG file_name
4+
ARG java_version
5+
6+
COPY ./target/${file_name} /app/main.jar
7+
8+
WORKDIR /app
9+
10+
RUN sed -i 's!http://dl-cdn.alpinelinux.org/!https://mirrors.tencent.com/!g' /etc/apk/repositories
11+
12+
RUN set -eux && \
13+
apk add openjdk${java_version} && \
14+
apk add bind-tools && \
15+
apk add busybox-extras && \
16+
apk add findutils && \
17+
apk add tcpdump && \
18+
apk add tzdata && \
19+
apk add curl && \
20+
apk add bash && \
21+
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
22+
echo "Asia/Shanghai" > /etc/timezone && \
23+
date
24+
25+
RUN chmod 777 /app/
26+
27+
RUN ls -la /app/
28+
29+
ENTRYPOINT ["java", "-jar", "/app/main.jar"]

0 commit comments

Comments
 (0)