Fallbacks en time-outs implementeren
Ontdek hoe u fallbackmechanismen en time-outs implementeert om onbeschikbare services of trage reacties netjes af te handelen.
Fallbacks en time-outs implementeren is een gratis Communicatiepatronen voor microservices (Saga, Circuit Breaker)-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 Communicatiepatronen voor microservices (Saga, Circuit Breaker). Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Communicatiepatronen voor microservices (Saga, Circuit Breaker) bevat in totaal 4 lessen.
Welkom bij veerkrachtpatronen
In deze les duiken we in twee belangrijke patronen voor het bouwen van veerkrachtige microservices: terugvalopties en time-outs.
Deze patronen helpen je applicaties om storingen en trage reacties van andere services op een gecontroleerde manier af te handelen, waardoor je systeem robuuster en betrouwbaarder wordt.
Wat is een terugvaloptie?
Een terugvalmechanisme biedt een alternatieve aanpak wanneer een primaire bewerking mislukt of een fout tegenkomt.
- Het zorgt ervoor dat je applicatie nog steeds kan reageren, zelfs als dat gedeeltelijk is, in plaats van volledig te falen.
- Je kunt het zien als een plan B voor je serviceaanroepen.
- Dit leidt tot gecontroleerde degradatie, waarbij het systeem beperkte functionaliteit biedt in plaats van volledig uit te vallen.
Terugvaloptie in actie: standaardgegevens
Stel je een e-commercesite voor. Als de service die gepersonaliseerde productaanbevelingen levert uitvalt, wil je niet dat de hele pagina niet meer werkt.
Een terugvaloptie kan het volgende tonen:
- Populaire items (standaardlijst)
- Gecachte aanbevelingen
- Een eenvoudig bericht zoals 'Aanbevelingen zijn momenteel niet beschikbaar'
De gebruikerservaring blijft intact, zelfs bij een klein probleem.
Een eenvoudige terugvaloptie coderen
Bekijk een eenvoudig Java-voorbeeld. Als onze 'externe service' een fout genereert, vangen we die op en retourneren we een standaardwaarde in plaats van de applicatie te laten vastlopen.
public class FallbackExample {
public String getProductRecommendation() {
try {
// Simulate calling an external service that might fail
if (Math.random() < 0.5) {
throw new RuntimeException("Service unavailable!");
}
return "Personalized Recommendation A";
} catch (Exception e) {
// Fallback: return a default recommendation
System.out.println("Fallback activated: " + e.getMessage());
return "Default Popular Product";
}
}
public static void main(String[] args) {
FallbackExample app = new FallbackExample();
System.out.println("Recommendation: " + app.getProductRecommendation());
System.out.println("Recommendation: " + app.getProductRecommendation());
}
}Waarom hebben we time-outs nodig?
Terugvalopties handelen storingen af, terwijl time-outs trage reacties aanpakken. Een service valt misschien niet volledig uit, maar kan er wel te lang over doen om te reageren.
- Uitputting van resources: Oneindig wachten houdt resources (threads, verbindingen) bezet.
- Doorzettende storingen: Een trage service kan andere afhankelijke services vertragen, waardoor het hele systeem trager wordt.
Time-outs stellen een maximale duur voor een bewerking in.
Soorten time-outs
Bij het uitvoeren van netwerkaanroepen krijg je vaak te maken met verschillende soorten time-outs:
- Verbindingstime-out: De maximale tijd die is toegestaan om een verbinding met de externe service tot stand te brengen. Als er binnen deze tijd geen verbinding wordt gemaakt, mislukt de bewerking.
- Lees-time-out: De maximale tijd die is toegestaan om gegevens te ontvangen nadat de verbinding tot stand is gebracht. Als de service stopt met het verzenden van gegevens, wordt deze time-out geactiveerd.
- Aanvraag-time-out: Een algemene time-out voor de volledige bewerking, van begin tot eind. Deze omvat vaak zowel de verbindingstime-out als de lees-time-out.
Een aanvraag-time-out instellen
In Java hangt het instellen van time-outs af van de clientbibliotheek die je gebruikt, bijvoorbeeld OkHttp of HttpClient. Conceptueel ziet het er zo uit:
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(5))
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("http://slowservice.com/data"))
.timeout(Duration.ofSeconds(10)) // Request timeout
.GET()
.build();Zo blijft je aanvraag niet eindeloos hangen.
Time-out en terugvaloptie combineren
Time-outs en terugvalopties zijn samen krachtig. Een time-out veroorzaakt een fout, die vervolgens door een terugvaloptie kan worden afgehandeld.
We breiden ons vorige voorbeeld uit. We simuleren een trage serviceaanroep. Als die te lang duurt, treedt er een time-out op en levert onze terugvaloptie een standaardantwoord.
import java.util.concurrent.*;
public class TimeoutFallbackExample {
public String getProductRecommendationWithTimeout() {
ExecutorService executor = Executors.newSingleThreadExecutor();
try {
Future<String> future = executor.submit(() -> {
// Simulate a slow external service
long delay = (long) (Math.random() * 3000) + 1000; // 1-4 seconds
Thread.sleep(delay);
return "Personalized Recommendation B";
});
// Wait for the result, but only for 2 seconds
return future.get(2, TimeUnit.SECONDS);
} catch (TimeoutException e) {
System.out.println("Timeout occurred: " + e.getMessage());
return "Fallback: Timed out default product";
} catch (Exception e) {
System.out.println("Other error: " + e.getMessage());
return "Fallback: Error default product";
} finally {
executor.shutdown();
}
}
public static void main(String[] args) {
TimeoutFallbackExample app = new TimeoutFallbackExample();
System.out.println("Recommendation: " + app.getProductRecommendationWithTimeout());
System.out.println("Recommendation: " + app.getProductRecommendationWithTimeout());
}
}Voordelen van beide gebruiken
Door time-outs en terugvalopties te combineren, bereik je een hoger niveau van veerkracht:
- Betere gebruikerservaring: Gebruikers hoeven niet eindeloos te wachten tot een pagina is geladen of een bewerking is voltooid.
- Bescherming van resources: Je services putten hun resources niet uit terwijl ze wachten op niet-reagerende afhankelijkheden.
- Systeemstabiliteit: Dit voorkomt doorzettende storingen, waarbij één trage service veel andere services laat uitvallen.
- Voorspelbaar gedrag: Je systeem gedraagt zich voorspelbaar, zelfs onder zware belasting.
Snelle controle: veerkracht
Je ontwerpt een microservice die een externe betalingsgateway aanroept. Als de gateway traag of niet beschikbaar is, wil je het volgende:
- Voorkomen dat je service voor onbepaalde tijd blijft hangen.
- De gebruiker een bericht 'Betaling momenteel niet beschikbaar' tonen in plaats van een foutpagina.
Welke veerkrachtpatronen moet je in dit scenario prioriteit geven?
Samenvatting: terugvalopties en time-outs
Goed gedaan! Je hebt twee essentiële veerkrachtpatronen geleerd:
- Terugvalopties: Bieden alternatieve antwoorden om storingen gecontroleerd af te handelen, wat zorgt voor een betere gebruikerservaring.
- Time-outs: Stellen grenzen aan hoe lang een bewerking mag duren en voorkomen uitputting van resources en doorzettende storingen door trage services.
Door deze patronen samen te gebruiken, maak je je microservices robuuster en betrouwbaarder.
Leer Communicatiepatronen voor microservices (Saga, Circuit Breaker) 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 “Fallbacks en time-outs implementeren” gratis?
Ja — de volledige tekst van “Fallbacks en time-outs implementeren” 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 Communicatiepatronen voor microservices (Saga, Circuit Breaker) wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Communicatiepatronen voor microservices (Saga, Circuit Breaker) bevat in totaal 4 lessen.
Wat leer ik in “Fallbacks en time-outs implementeren”?
Ontdek hoe u fallbackmechanismen en time-outs implementeert om onbeschikbare services of trage reacties netjes af te handelen. Je oefent met Communicatiepatronen voor microservices (Saga, Circuit Breaker) 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 Communicatiepatronen voor microservices (Saga, Circuit Breaker) te beginnen?
Ervaring vooraf is niet nodig. Communicatiepatronen voor microservices (Saga, Circuit Breaker) 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 “Fallbacks en time-outs implementeren”?
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 Communicatiepatronen voor microservices (Saga, Circuit Breaker)?
Ja. Elke les over Communicatiepatronen voor microservices (Saga, Circuit Breaker) 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
- Waarom veerkracht belangrijk is
- Basisprincipes van het retrypatroon
- Fallbacks en time-outs implementeren
- Het bulkhead-patroon