From efce014258823586655d0f8b2b597955d3017a85 Mon Sep 17 00:00:00 2001 From: sgibb Date: Fri, 1 Dec 2023 13:34:58 -0500 Subject: [PATCH] Adds CircuitBreakerFilterFunctions.CircuitBreakerConfig.setStatusCodes(String...) --- .../server/mvc/filter/CircuitBreakerFilterFunctions.java | 9 ++++++++- .../gateway/server/mvc/ServerMvcIntegrationTests.java | 3 +-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/filter/CircuitBreakerFilterFunctions.java b/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/filter/CircuitBreakerFilterFunctions.java index b111f30a..71db08e9 100644 --- a/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/filter/CircuitBreakerFilterFunctions.java +++ b/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/filter/CircuitBreakerFilterFunctions.java @@ -22,6 +22,7 @@ import java.net.URI; import java.util.Arrays; import java.util.Collection; import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.Set; import java.util.concurrent.TimeoutException; import java.util.function.Consumer; @@ -149,9 +150,11 @@ public abstract class CircuitBreakerFilterFunctions { setFallbackUri(URI.create(fallbackUri)); return this; } + public CircuitBreakerConfig setFallbackUri(URI fallbackUri) { if (fallbackUri != null) { - Assert.isTrue(fallbackUri.getScheme().equalsIgnoreCase("forward"), () -> "Scheme must be forward, but is " + fallbackUri.getScheme()); + Assert.isTrue(fallbackUri.getScheme().equalsIgnoreCase("forward"), + () -> "Scheme must be forward, but is " + fallbackUri.getScheme()); fallbackPath = fallbackUri.getPath(); } else { @@ -169,6 +172,10 @@ public abstract class CircuitBreakerFilterFunctions { return statusCodes; } + public CircuitBreakerConfig setStatusCodes(String... statusCodes) { + return setStatusCodes(new LinkedHashSet<>(Arrays.asList(statusCodes))); + } + public CircuitBreakerConfig setStatusCodes(Set statusCodes) { this.statusCodes = statusCodes; return this; diff --git a/spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/ServerMvcIntegrationTests.java b/spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/ServerMvcIntegrationTests.java index 64eb4cae..14c491ad 100644 --- a/spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/ServerMvcIntegrationTests.java +++ b/spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/ServerMvcIntegrationTests.java @@ -279,8 +279,6 @@ public class ServerMvcIntegrationTests { // @formatter:on } - - @Test public void retryWorks() { restClient.get().uri("/retry?key=get").exchange().expectStatus().isOk().expectBody(String.class).isEqualTo("3"); @@ -776,6 +774,7 @@ public class ServerMvcIntegrationTests { return route(path("/anything/circuitbreakernofallback"), http()) .filter(new HttpbinUriResolver()) .filter(circuitBreaker("mycb3")) + //.filter(circuitBreaker(config -> config.setId("myCircuitBreaker").setFallbackUri("forward:/inCaseOfFailureUseThis").setStatusCodes("500", "NOT_FOUND"))) .filter(setPath("/delay/5")) .withAttribute(MvcUtils.GATEWAY_ROUTE_ID_ATTR, "testcircuitbreakernofallback"); // @formatter:on