Basisprincipes van het retrypatroon
Leer de basis van het retrypatroon om mislukte bewerkingen automatisch opnieuw uit te voeren en de robuustheid van systemen te verbeteren.
Basisprincipes van het retrypatroon is een gratis Communicatiepatronen voor microservices (Saga, Circuit Breaker)-les op CoddyKit. Dit is les 2 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.
Last van tijdelijke storingen?
Stel u voor dat u een bericht probeert te versturen, maar uw internetverbinding hapert één seconde. Wat doet u?
U probeert het waarschijnlijk opnieuw! Dit eenvoudige menselijke gedrag vormt het kernidee achter het retrypatroon in software.
Wat is het retrypatroon?
Het retrypatroon is een fundamentele techniek voor veerkracht. Hierbij wordt een bewerking die is mislukt automatisch opnieuw geprobeerd.
U gebruikt dit wanneer u verwacht dat de fout tijdelijk is en waarschijnlijk snel vanzelf verdwijnt, bijvoorbeeld bij een korte netwerkstoring of een tijdelijke vergrendeling van een database.
Waarom retries gebruiken?
In gedistribueerde systemen zijn services vaak van elkaar afhankelijk. Fouten kunnen om verschillende redenen optreden:
- Netwerkproblemen: Een korte verbreking van de verbinding of hoge latentie.
- Concurrentie om resources: Een database of service is tijdelijk overbelast.
- Herstarts van services: Een afhankelijke service is tijdens een update kortstondig onbeschikbaar.
Retries helpen uw toepassing soepel van deze haperingen te herstellen zonder te crashen of handmatige interventie te vereisen.
De eenvoudige retrylus
In de eenvoudigste vorm werkt het retrypatroon als volgt:
- Probeer een bewerking uit te voeren.
- Controleer bij een fout of het om een fout gaat die opnieuw kan worden geprobeerd.
- Verhoog bij een retrybare fout een teller en probeer het opnieuw.
- Stop na een bepaald aantal pogingen of zodra de bewerking slaagt.
Bekijk een eenvoudig voorbeeld, voorlopig zonder wachttijden.
Code: eenvoudige retrylogica
Deze code simuleert een bewerking die twee keer mislukt voordat deze slaagt. Let op hoe de lus while het opnieuw blijft proberen totdat de bewerking lukt of het aantal pogingen op is.
public class Main {
public static void main(String[] args) {
boolean success = false;
int maxAttempts = 3;
int currentAttempt = 0;
while (!success && currentAttempt < maxAttempts) {
currentAttempt++;
System.out.println("Attempt " + currentAttempt + ": Trying to connect...");
// Simulate failure for first two attempts
if (currentAttempt < 3) {
System.out.println("Connection failed!");
} else {
System.out.println("Connection successful!");
success = true;
}
}
if (!success) {
System.out.println("Failed after " + maxAttempts + " attempts.");
}
}
}Een vertraging toevoegen: vaste retry
Onmiddellijk opnieuw proberen kan een service die het moeilijk heeft overbelasten of opnieuw mislukken als het probleem tijd nodig heeft om te verdwijnen. Daarom voegen we vertragingen toe.
Een retry met vaste vertraging wacht tussen elke mislukte poging even lang. Zo krijgt het systeem de kans om te herstellen.
Code: retry met vaste vertraging
Hier hebben we na elke mislukte poging een vertraging van één seconde (1000ms) toegevoegd met Thread.sleep(). Dit is een gebruikelijke manier om het systeem wat ademruimte te geven.
public class Main {
public static void main(String[] args) {
boolean success = false;
int maxAttempts = 3;
int currentAttempt = 0;
long delayMillis = 1000; // 1 second delay
while (!success && currentAttempt < maxAttempts) {
currentAttempt++;
System.out.println("Attempt " + currentAttempt + ": Trying to connect...");
// Simulate failure for first two attempts
if (currentAttempt < 3) {
System.out.println("Connection failed!");
try {
Thread.sleep(delayMillis); // Wait before retrying
System.out.println("Waiting " + delayMillis + "ms...");
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
} else {
System.out.println("Connection successful!");
success = true;
}
}
if (!success) {
System.out.println("Failed after " + maxAttempts + " attempts.");
}
}
}Slimmer wachten: exponentiële back-off
Hoewel vaste vertragingen werken, is het soms beter om de wachttijd bij elke volgende retry te verlengen. Dit heet exponentiële back-off.
U kunt bijvoorbeeld 1 seconde, daarna 2 seconden, vervolgens 4 seconden en daarna 8 seconden wachten. Dit vermindert de belasting van een service die het moeilijk heeft en geeft die meer tijd om te herstellen.
Wanneer gebruikt u het retrypatroon?
Opnieuw proberen is het meest effectief bij:
- Tijdelijke netwerkfouten: Korte verbrekingen en time-outs.
- Tijdelijk niet-beschikbare resources: Een databaseverbindingenpool is tijdelijk uitgeput.
- Optimistische concurrencyconflicten: Wanneer meerdere gebruikers tegelijkertijd hetzelfde record proberen bij te werken.
- Korte herstarts van services: Een microservice wordt opnieuw uitgerold.
Wanneer je opnieuw proberen NIET moet gebruiken
Opnieuw proberen is geen wondermiddel. Gebruik het niet bij:
- Niet-tijdelijke fouten: Fouten die worden veroorzaakt door ongeldige invoer, autorisatiefouten of ontbrekende resources en niet vanzelf verdwijnen.
- Niet-idempotente bewerkingen: Als het herhalen van een bewerking onbedoelde bijwerkingen heeft, zoals het twee keer in rekening brengen van een klant. Idempotentie betekent dat een bewerking meerdere keren kan worden uitgevoerd zonder het resultaat verder te veranderen dan bij de eerste uitvoering.
- Langdurige storingen: Als een service permanent offline is of een grote storing heeft.
Test je kennis!
Welk scenario is over het algemeen een goede kandidaat voor het toepassen van het Retry-patroon?
Samenvatting van het Retry-patroon
Je hebt de basisprincipes van het Retry-patroon geleerd!
- Het wordt gebruikt om mislukte bewerkingen automatisch opnieuw uit te voeren.
- Het is essentieel voor het afhandelen van tijdelijke storingen in gedistribueerde systemen.
- Een basisimplementatie bestaat uit een lus met een maximumaantal pogingen.
- Het toevoegen van vertragingen (een vaste of exponentiële back-off) is belangrijk om systemen tijd te geven om te herstellen.
- Weet wanneer je het moet gebruiken, bijvoorbeeld bij netwerkproblemen, en wanneer je het moet vermijden, bijvoorbeeld bij niet-tijdelijke fouten en niet-idempotente bewerkingen.
Hierna bekijken we andere veerkrachtpatronen, zoals terugvalopties en time-outs!
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 “Basisprincipes van het retrypatroon” gratis?
Ja — de volledige tekst van “Basisprincipes van het retrypatroon” 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 “Basisprincipes van het retrypatroon”?
Leer de basis van het retrypatroon om mislukte bewerkingen automatisch opnieuw uit te voeren en de robuustheid van systemen te verbeteren. 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 2 van 4.
Hoe lang duurt de les “Basisprincipes van het retrypatroon”?
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