diff --git a/demo-circuit-breaker/.gitignore b/demo-circuit-breaker/.gitignore new file mode 100644 index 000000000..5ff6309b7 --- /dev/null +++ b/demo-circuit-breaker/.gitignore @@ -0,0 +1,38 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/demo-circuit-breaker/pom.xml b/demo-circuit-breaker/pom.xml new file mode 100644 index 000000000..802cf4fdc --- /dev/null +++ b/demo-circuit-breaker/pom.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>com.xkcoding</groupId> + <artifactId>spring-boot-demo</artifactId> + <version>1.0.0-SNAPSHOT</version> + </parent> + + <artifactId>demo-circuit-breaker</artifactId> + + <properties> + <maven.compiler.source>17</maven.compiler.source> + <maven.compiler.target>17</maven.compiler.target> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + </properties> + <dependencies> + <dependency> + <groupId>io.github.resilience4j</groupId> + <artifactId>resilience4j-spring-boot2</artifactId> + <version>1.7.0</version> + </dependency> + </dependencies> + +</project> diff --git a/demo-circuit-breaker/src/main/java/PaymentCircuitBreaker.java b/demo-circuit-breaker/src/main/java/PaymentCircuitBreaker.java new file mode 100644 index 000000000..31146e488 --- /dev/null +++ b/demo-circuit-breaker/src/main/java/PaymentCircuitBreaker.java @@ -0,0 +1,31 @@ +import io.github.resilience4j.circuitbreaker.annotation.CircuitBreaker; + +import java.io.IOException; +import java.net.*; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; + +public class PaymentCircuitBreaker { + PaymentService service = new PaymentService(); + + @CircuitBreaker(name = "updateOrder", fallbackMethod = "paymentAuthorizedPendingIntegration") + public void paymentConfirm() throws IOException, InterruptedException { + + HttpClient client = HttpClient.newHttpClient(); + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create("http://example.com/payment-confirm")) + .build(); + + HttpResponse<String> response = client.send(request, + HttpResponse.BodyHandlers.ofString()); + + service.paymentConfirm(response); + + + } + + public void paymentAuthorizedPendingIntegration(Long id, Exception e) { + service.updateStatus(); + } +} diff --git a/demo-circuit-breaker/src/main/java/PaymentService.java b/demo-circuit-breaker/src/main/java/PaymentService.java new file mode 100644 index 000000000..14c64f354 --- /dev/null +++ b/demo-circuit-breaker/src/main/java/PaymentService.java @@ -0,0 +1,11 @@ +import java.net.http.HttpResponse; + +public class PaymentService { + public void paymentConfirm(HttpResponse<String> confirms) { + + } + + public void updateStatus() { + + } +}