Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät · Oppitunti

Fallback-toimintojen ja aikakatkaisujen toteuttaminen

Määrittäkää hallitut fallback-toiminnot ja aikakatkaisut epäluotettavia palvelukutsuja varten.

Oppitunti 2/310 vaihetta

Fallback-toimintojen ja aikakatkaisujen toteuttaminen on ilmainen Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-oppitunti CoddyKitissä. Tämä on oppitunti 2/3. 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 Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-kurssilla on yhteensä 3 oppituntia.

Vikasietoisten palveluiden rakentaminen

Mikropalveluissa palvelut ovat usein riippuvaisia toisistaan. Mitä tapahtuu, jos yksi palvelu hidastuu tai vikaantuu?

Tässä oppitunnissa käsitellään aikakatkaisuja ja fallback-ratkaisuja, jotka ovat keskeisiä malleja sovellusten vikasietoisuuden parantamisessa tällaisissa tilanteissa.

Epäluotettavien kutsujen käsittely

Kuvitellaan, että käyttäjäpalvelusi kutsuu tuote-palvelua. Jos tuote-palvelu jumittuu, käyttäjäpalvelusi saattaa jäädä odottamaan loputtomasti.

  • Resurssien kuluminen: Säikeet juuttuvat ja kuluttavat muistia sekä suorittimen aikaa.
  • Heikko käyttäjäkokemus: Käyttäjät joutuvat odottamaan pitkään tai sovellukset eivät vastaa.
  • Ketjuuntuvat virheet: Yksi hidas palvelu voi kaataa muita palveluita.

Kutsujen aikakatkaisujen ymmärtäminen

Aikakatkaisu on toiminnolle sallittu enimmäiskesto. Jos toiminto ei valmistu tässä ajassa, se keskeytetään.

  • Yhteyden aikakatkaisu: Kuinka kauan yhteyden muodostamista odotetaan.
  • Lukuajan aikakatkaisu: Kuinka kauan tietoja odotetaan yhteyden muodostamisen jälkeen.

Aikakatkaisut estävät sovellusta odottamasta ikuisesti vastaamatonta palvelua.

Aikakatkaisujen perusmääritykset

Voit määrittää aikakatkaisuja HTTP-asiakkaille, kuten Springin RestTemplate- tai WebClient-asiakkaalle. Tässä esimerkissä näytetään yksinkertainen RestTemplate-määritys.

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
import org.springframework.boot.web.client.RestTemplateBuilder;
import java.time.Duration;

@SpringBootApplication
public class TimeoutApp {

  public static void main(String[] args) {
    SpringApplication.run(TimeoutApp.class, args);
  }

  @Bean
  public RestTemplate restTemplate(RestTemplateBuilder builder) {
    return builder
        .setConnectTimeout(Duration.ofSeconds(1)) // 1 second to connect
        .setReadTimeout(Duration.ofSeconds(2))    // 2 seconds to read data
        .build();
  }
  
  // In a real app, you'd inject and use this RestTemplate
  // e.g., restTemplate.getForObject("http://localhost:8081/slow-service", String.class);
}

Hallittu toiminnan heikentäminen fallbackien avulla

Aikakatkaisuista huolimatta palvelukutsu saattaa edelleen epäonnistua esimerkiksi verkko-ongelmien tai palvelun saavuttamattomuuden vuoksi. Fallback tarjoaa vaihtoehtoisen toiminnon tai oletusarvon, kun ensisijainen toiminto epäonnistuu.

Näin sovellus voi vastata hallitusti edelleen, vaikka sen toiminnallisuus olisi rajoittunutta.

Yksinkertainen fallback-logiikka

Voit toteuttaa fallbackit manuaalisesti käyttämällä try-catch-lohkoja. Näin voit käsitellä poikkeuksia ja palauttaa oletusvastauksen.

Tarkastellaan yksinkertaista metodia, joka hakee käyttäjän tiedot:

public class UserService {

  public String getUserName(int userId) {
    try {
      // Simulate a network call that might fail
      if (userId == 101) {
        throw new RuntimeException("Service unavailable!");
      }
      return "User " + userId + " Details";
    } catch (Exception e) {
      // This is our fallback logic!
      System.out.println("Error fetching user " + userId + ". Returning default.");
      return "Guest User"; // Fallback value
    }
  }

  public static void main(String[] args) {
    UserService service = new UserService();
    System.out.println(service.getUserName(100)); // Works
    System.out.println(service.getUserName(101)); // Fails, returns fallback
  }
}

Resilience4j fallbackeille

Fallbackien hallinta manuaalisesti voi muuttua monimutkaiseksi. Resilience4j:n kaltaiset kirjastot tarjoavat deklaratiivisia tapoja resilienssimallien, kuten fallbackien, toteuttamiseen.

Resilience4j integroituu hyvin Spring Bootiin ja mahdollistaa fallbackMethod-metodin määrittämisen. Sitä kutsutaan, kun ensisijainen metodi epäonnistuu.

Deklaratiiviset fallbackit Resilience4j:llä

Resilience4j:n @CircuitBreaker-annotaation avulla voit määrittää fallbackMethod-metodin. Tätä metodia kutsutaan, jos päämetodi epäonnistuu tai circuit breaker on avoinna.

Ensin tarvitset Resilience4j-riippuvuuden. Sen jälkeen voit ottaa sen käyttöön:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.stereotype.Service;
import org.springframework.beans.factory.annotation.Autowired;
import io.github.resilience4j.circuitbreaker.annotation.CircuitBreaker;

@SpringBootApplication
@RestController
public class ResilienceApp {

  @Autowired
  private ProductService productService;

  public static void main(String[] args) {
    SpringApplication.run(ResilienceApp.class, args);
  }

  @GetMapping("/product-info")
  public String getProductDetails() {
    return productService.getProduct();
  }
}

@Service
class ProductService {
  private int callCount = 0;

  @CircuitBreaker(name = "productService", fallbackMethod = "fallbackGetProduct")
  public String getProduct() {
    callCount++;
    if (callCount % 3 != 0) { // Simulate failure 2 out of 3 times
      throw new RuntimeException("Product service is down!");
    }
    return "Product A Details";
  }

  // This is the fallback method
  public String fallbackGetProduct(Throwable t) {
    System.out.println("Fallback activated: " + t.getMessage());
    return "Default Product (Fallback)";
  }
}

Sovella oppimaasi

Sinulla on mikropalvelu, joka kutsuu ulkoista maksupalvelua. Tämä palvelu on toisinaan hidas tai epäonnistuu.

Millä resilienssimallien yhdistelmällä varmistaisit parhaiten, että palvelusi pysyy vastaavana ja tarjoaa käyttäjäystävällisen kokemuksen, vaikka maksupalvelu olisi epäluotettava?

Oppitunnin yhteenveto

Opimme, miten aikakatkaisut ja fallbackit ovat olennaisia vakaiden mikropalveluiden rakentamisessa:

  • Aikakatkaisut estävät palvelukutsuja jäämästä odottamaan loputtomasti ja säästävät resursseja.
  • Fallbackit tarjoavat vaihtoehtoisia vastauksia, kun ensisijaiset toiminnot epäonnistuvat, ja mahdollistavat hallitun toiminnan heikentämisen.

Nämä mallit parantavat käyttäjäkokemusta ja estävät ketjuuntuvia virheitä hajautetuissa järjestelmissä. Jatka harjoittelua, jotta voit rakentaa entistä vikasietoisempia sovelluksia!

Aloita maksutta

Opi Java 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
24
Oppitunnit
93

Usein kysytyt kysymykset

Onko oppitunti ”Fallback-toimintojen ja aikakatkaisujen toteuttaminen” ilmainen?

Kyllä – oppitunnin ”Fallback-toimintojen ja aikakatkaisujen toteuttaminen” 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 Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-kurssin, päivitä CoddyKit PROhon. Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-kurssilla on yhteensä 3 oppituntia.

Mitä opin oppitunnilla ”Fallback-toimintojen ja aikakatkaisujen toteuttaminen”?

Määrittäkää hallitut fallback-toiminnot ja aikakatkaisut epäluotettavia palvelukutsuja varten. Harjoittelet Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/3.

Kuinka kauan ”Fallback-toimintojen ja aikakatkaisujen toteuttaminen”-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ä Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-oppitunnilla?

Kyllä. Jokainen Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-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

  1. Circuit breakerit Resilience4j:llä
  2. Fallback-toimintojen ja aikakatkaisujen toteuttaminen
  3. Hajautettu jäljitys Zipkinillä
← Takaisin: Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät