Virheenkäsittely ja varatoiminnot
Toteuttakaa mukautettu virheenkäsittely ja määrittäkää varamekanismit hallittua toimintojen heikentämistä varten palveluiden ollessa poissa käytöstä.
Virheenkäsittely ja varatoiminnot on ilmainen API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-kurssilla on yhteensä 4 oppituntia.
Resilientin virheenkäsittelyn johdanto
Mikropalveluarkkitehtuurissa palvelut voivat epäonnistua. API-yhdyskäytävä tarvitsee vankan virheenkäsittelyn ja fallback-mekanismeja, jotta koko järjestelmä pysyy vakaana ja helppokäyttöisenä.
Tässä oppitunnissa tarkastellaan, kuinka Spring Cloud Gateway auttaa käsittelemään virheitä hallitusti ja tarjoamaan vaihtoehtoisia vastauksia, kun taustapalvelut eivät ole käytettävissä.
Yhdyskäytävän oletusvirheet
Oletusarvoisesti Spring Cloud Gateway palauttaa yleisluontoisia virhevastauksia, kun reititetty palvelu ei ole tavoitettavissa tai palauttaa virheen. Vastaukset sisältävät usein vakiomuotoisia HTTP-tilakoodeja, kuten 500 Internal Server Error ja 503 Service Unavailable, sekä perustason JSON-dataa.
Vaikka nämä oletusvastaukset toimivat teknisesti, ne eivät yleensä ole käyttäjäystävällisiä ja saattavat paljastaa sisäisiä tietoja. Hyvä käyttökokemus edellyttää niiden mukauttamista.
Virhevastausten mukauttaminen
Käyttökokemuksen parantamiseksi voimme mukauttaa yhdyskäytävän virhevastauksia. Näin voimme:
- Tarjota selkeitä ja brändin mukaisia virheilmoituksia.
- Piilottaa arkaluonteiset sisäiset virhetiedot.
- Palauttaa yhdenmukaisessa muodossa olevat virheet kaikista rajapinnoista.
Spring Cloud Gateway perustuu Spring WebFluxiin, joten siinä voidaan toteuttaa mukautettuja ErrorWebExceptionHandler-komponentteja.
Mukautetun virheenkäsittelijän esimerkki
Luodaan mukautettu virheenkäsittelijä, joka sieppaa virheet ja palauttaa yksinkertaistetun JSON-vastauksen. Tämä käsittelijä korvaa oletusvirhesivun.
Suorittakaa tämä koodi ja yrittäkää käyttää osoitetta /fail. Näette mukautetun ilmoituksemme!
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));
}
}Fallback-mekanismien ymmärtäminen
Fallback-mekanismi tarjoaa vaihtoehtoisen polun tai vastauksen, kun ensisijainen palvelu epäonnistuu tai ei ole käytettävissä. Raakavirheen näyttämisen sijaan yhdyskäytävä voi palautua hallitusti esimerkiksi:
- Palauttamalla oletusvastauksen.
- Ohjaamalla pyynnön staattiselle virhesivulle.
- Kutsumalla erillistä fallback-palvelua.
Fallback-mekanismit ovat olennaisia resilienssin kannalta ja auttavat estämään ketjureaktiomaisia virheitä.
Yhdyskäytävän fallback-strategiat
Spring Cloud Gateway tukee fallback-mekanismeja ensisijaisesti integraationsa kautta circuit breakereihin, kuten Resilience4j:hin, jota käsittelimme edellisellä oppitunnilla. Kun circuit breaker laukeaa, se voi kutsua fallback-toimintoa sen sijaan, että pyyntö epäonnistuisi suoraan.
Fallback määritetään usein käyttämällä setFallbackUri()-metodia circuit breaker -suodattimessa ja osoittamalla se yleensä forward:-URIin.
Yksinkertaisen fallback-reitin toteuttaminen
Yksinkertaisin fallback-toteutus on välittää pyyntö toiseen URIin yhdyskäytävän sisällä. Se voi olla staattinen HTML-sivu, yksinkertainen Spring-ohjaimen metodi tai jopa toinen sisäinen reitti.
fallbackUri-asetuksen forward:-etuliite kertoo yhdyskäytävälle, että pyyntö käsitellään sisäisesti ilman uutta ulkoista HTTP-kutsua.
Fallback-reitin määrittäminen
Näin määrität reitin fallback-toiminnolla. Jos reitin /api/** taustapalvelu epäonnistuu, esimerkiksi circuit breakerin avautumisen vuoksi, yhdyskäytävä välittää pyynnön paikalliseen /fallback-päätepisteeseemme.
Yrittäkää käyttää osoitetta /api/hello, kun localhost:9000 ei ole käytettävissä.
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!";
}
}Fallback erilliseen palveluun
Monimutkaisemmissa tilanteissa fallbackUri voidaan määrittää osoittamaan erilliseen mikropalveluun. Tämä fallback-palvelu voi:
- Tarjota monipuolisia virhesivuja.
- Palauttaa välimuistissa olevia tai oletusarvoisia tietoja.
- Kirjata yksityiskohtaiset virhetiedot.
Tämä lähestymistapa keskittää virheenkäsittelyn logiikan ja pitää yhdyskäytävän määritykset selkeämpinä.
Testaa tietosi
Mitä hyötyjä mukautetun virheenkäsittelyn ja fallback-mekanismien toteuttamisesta API-yhdyskäytävässä on?
Oppitunnin yhteenveto
Tässä oppitunnissa opimme vankan virheenkäsittelyn ja fallback-mekanismien merkityksen Spring Cloud Gatewayssä. Tarkastelimme, kuinka:
- Oletusvirhevastauksia mukautetaan käyttämällä
ErrorWebExceptionHandler-komponenttia. - Yksinkertaisia fallback-toimintoja toteutetaan käyttämällä
setFallbackUri("forward:")-metodia circuit breakereiden kanssa. - Erilliset fallback-palvelut voivat olla hyödyllisiä edistyneemmissä tilanteissa.
Nämä tekniikat ovat olennaisia resilienttien ja käyttäjäystävällisten mikropalvelusovellusten rakentamisessa.
Opi API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway) tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 12
- Oppitunnit
- 48
Usein kysytyt kysymykset
Onko oppitunti ”Virheenkäsittely ja varatoiminnot” ilmainen?
Kyllä – oppitunnin ”Virheenkäsittely ja varatoiminnot” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-kurssin, päivitä CoddyKit PROhon. API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Virheenkäsittely ja varatoiminnot”?
Toteuttakaa mukautettu virheenkäsittely ja määrittäkää varamekanismit hallittua toimintojen heikentämistä varten palveluiden ollessa poissa käytöstä. Harjoittelet API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”Virheenkäsittely ja varatoiminnot”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-oppitunnilla?
Kyllä. Jokainen API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Circuit Breaker -malli Resilience4j:llä
- Uudelleenyritysten ja aikakatkaisujen määritys
- Virheenkäsittely ja varatoiminnot
- Bulkhead-eristys ja nopeusrajoitus vikasietoisuutta varten