Fallback-toimintojen ja aikakatkaisujen toteuttaminen
Määrittäkää hallitut fallback-toiminnot ja aikakatkaisut epäluotettavia palvelukutsuja varten.
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!
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
- Circuit breakerit Resilience4j:llä
- Fallback-toimintojen ja aikakatkaisujen toteuttaminen
- Hajautettu jäljitys Zipkinillä