Foutafhandeling en fallbacks
Implementeer aangepaste foutafhandeling en definieer fallbackmechanismen voor gecontroleerde degradatie wanneer services niet beschikbaar zijn.
Foutafhandeling en fallbacks is een gratis API-gateway en reverse proxy (Nginx + Spring Cloud Gateway)-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject API-gateway en reverse proxy (Nginx + Spring Cloud Gateway). Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus API-gateway en reverse proxy (Nginx + Spring Cloud Gateway) bevat in totaal 4 lessen.
Introductie tot veerkrachtige foutafhandeling
In een microservicearchitectuur kunnen services uitvallen. Een API-gateway heeft robuuste foutafhandeling en terugvalmechanismen nodig om ervoor te zorgen dat het hele systeem stabiel en gebruiksvriendelijk blijft.
In deze les leer je hoe Spring Cloud Gateway je helpt om fouten netjes af te handelen en alternatieve antwoorden te bieden wanneer backendservices niet beschikbaar zijn.
Standaardfouten van de gateway
Standaard geeft Spring Cloud Gateway algemene foutantwoorden wanneer een gerouteerde service niet bereikbaar is of een fout retourneert. Deze bevatten vaak standaard-HTTP-statuscodes, zoals 500 Internal Server Error en 503 Service Unavailable, en eenvoudige JSON.
Hoewel deze berichten functioneel zijn, zijn ze meestal niet gebruiksvriendelijk en kunnen ze interne details blootleggen. Aanpassing is essentieel voor een goede gebruikerservaring.
Foutantwoorden aanpassen
Om de gebruikerservaring te verbeteren, kunnen we de foutantwoorden van de gateway aanpassen. Zo kunnen we:
- Duidelijke foutmeldingen in de huisstijl bieden.
- Gevoelige interne foutdetails verbergen.
- Consistente foutindelingen voor alle API's retourneren.
Spring Cloud Gateway is gebouwd op Spring WebFlux en stelt ons in staat aangepaste ErrorWebExceptionHandler-componenten te implementeren.
Voorbeeld van een aangepaste foutafhandelaar
Laten we een aangepaste foutafhandelaar maken die fouten onderschept en een vereenvoudigd JSON-antwoord retourneert. Deze afhandelaar vervangt de standaardfoutpagina.
Voer deze code uit en probeer /fail te openen. Je ziet dan ons aangepaste bericht.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.boot.web.reactive.error.ErrorWebExceptionHandler;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
import java.nio.charset.StandardCharsets;
@SpringBootApplication
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
@Bean
public RouteLocator routes(RouteLocatorBuilder builder) {
return builder.routes()
.route("nonexistent_service", r -> r.path("/fail/**")
.uri("http://localhost:9999")) // Route to a non-existent service
.build();
}
}
@Configuration
@Order(-1) // Ensure this handler runs before default ones
class CustomJsonErrorWebExceptionHandler implements ErrorWebExceptionHandler {
@Override
public Mono<Void> handle(ServerWebExchange exchange, Throwable ex) {
ServerHttpResponse response = exchange.getResponse();
response.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR);
response.getHeaders().setContentType(MediaType.APPLICATION_JSON);
String errorBody = "{\"status\":500, \"message\":\"Our service is temporarily unavailable. Please try again!\"}";
DataBuffer buffer = response.bufferFactory().wrap(errorBody.getBytes(StandardCharsets.UTF_8));
return response.writeWith(Mono.just(buffer));
}
}Terugvalmechanismen begrijpen
Een terugvalmechanisme biedt een alternatief pad of antwoord wanneer een primaire service uitvalt of niet beschikbaar wordt. In plaats van een onbewerkte fout weer te geven, kan de gateway gecontroleerd minder functionaliteit bieden door:
- Een standaardantwoord te retourneren.
- Door te verwijzen naar een statische foutpagina.
- Een speciale terugvalservice aan te roepen.
Terugvalmechanismen zijn essentieel voor veerkracht en het voorkomen van kettingreacties van fouten.
Terugvalstrategieën voor de gateway
Spring Cloud Gateway ondersteunt terugval voornamelijk via de integratie met circuitbreakers, zoals Resilience4j, die we in de vorige les hebben besproken. Wanneer een circuitbreaker wordt geactiveerd, kan deze in plaats van direct te falen een terugvalactie aanroepen.
Een gebruikelijke manier om deze terugval te definiëren is de methode setFallbackUri() binnen het circuitbreakerfilter te gebruiken, vaak met een forward:-URI als bestemming.
Een eenvoudige terugvalroute implementeren
De eenvoudigste terugval bestaat uit het doorsturen van de aanvraag naar een andere URI binnen de gateway zelf. Dit kan een statische HTML-pagina, een eenvoudige Spring-controller-methode of zelfs een andere interne route zijn.
Het voorvoegsel forward: in fallbackUri vertelt de gateway dat deze de aanvraag intern moet afhandelen, zonder nog een externe HTTP-aanroep te doen.
Een terugvalroute configureren
Zo configureer je een route met een terugval. Als de backendservice van de route /api/** uitvalt, bijvoorbeeld doordat een circuitbreaker opent, stuurt de gateway de aanvraag door naar ons lokale eindpunt /fallback.
Probeer /api/hello te openen wanneer localhost:9000 niet beschikbaar is.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController // For our simple fallback endpoint
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
@Bean
public RouteLocator routes(RouteLocatorBuilder builder) {
return builder.routes()
.route("backend_service", r -> r.path("/api/**")
.filters(f -> f.circuitBreaker(config -> config
.setName("myCircuitBreaker")
.setFallbackUri("forward:/fallback"))) // Fallback URI
.uri("http://localhost:9000")) // A service that might fail
.build();
}
// This method acts as the fallback service
@GetMapping("/fallback")
public String fallback() {
return "Service is currently unavailable. Please try again later!";
}
}Terugvallen op een speciale service
Voor complexere scenario's kun je fallbackUri configureren zodat deze naar een speciale microservice verwijst. Deze "terugvalservice" kan:
- Uitgebreide foutpagina's aanbieden.
- Gecachte of standaardgegevens leveren.
- Gedetailleerde foutinformatie vastleggen in logboeken.
Met deze aanpak centraliseer je de logica voor foutafhandeling en blijft je gatewayconfiguratie overzichtelijker.
Controleer je kennis
Welke van de volgende opties zijn voordelen van aangepaste foutafhandeling en terugvalmechanismen in een API-gateway?
Samenvatting van de les
In deze les hebben we het belang geleerd van robuuste foutafhandeling en terugvalmechanismen in Spring Cloud Gateway. We hebben onderzocht hoe je:
- Standaardfoutantwoorden aanpast met
ErrorWebExceptionHandler. - Eenvoudige terugvalacties implementeert met
setFallbackUri("forward:")en circuitbreakers. - De voordelen van speciale terugvalservices voor geavanceerde scenario's begrijpt.
Deze technieken zijn essentieel voor het bouwen van veerkrachtige en gebruiksvriendelijke microserviceapplicaties.
Leer API-gateway en reverse proxy (Nginx + Spring Cloud Gateway) met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 12
- Lessen
- 48
Veelgestelde vragen
Is de les “Foutafhandeling en fallbacks” gratis?
Ja — de volledige tekst van “Foutafhandeling en fallbacks” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus API-gateway en reverse proxy (Nginx + Spring Cloud Gateway) wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus API-gateway en reverse proxy (Nginx + Spring Cloud Gateway) bevat in totaal 4 lessen.
Wat leer ik in “Foutafhandeling en fallbacks”?
Implementeer aangepaste foutafhandeling en definieer fallbackmechanismen voor gecontroleerde degradatie wanneer services niet beschikbaar zijn. Je oefent met API-gateway en reverse proxy (Nginx + Spring Cloud Gateway) door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met API-gateway en reverse proxy (Nginx + Spring Cloud Gateway) te beginnen?
Ervaring vooraf is niet nodig. API-gateway en reverse proxy (Nginx + Spring Cloud Gateway) op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.
Hoe lang duurt de les “Foutafhandeling en fallbacks”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over API-gateway en reverse proxy (Nginx + Spring Cloud Gateway)?
Ja. Elke les over API-gateway en reverse proxy (Nginx + Spring Cloud Gateway) bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Circuit breakers met Resilience4j
- Retries en time-outs configureren
- Foutafhandeling en fallbacks
- Bulkheads en rate limiting voor veerkracht