Odporność w kontekście programowania Java odnosi się do zdolności aplikacji do radzenia sobie z awariami oraz do szybkiego powrotu do normalnego stanu działania po wystąpieniu błędów. Jest to kluczowy aspekt projektowania i implementacji systemów, które są niezawodne, trwałe i zdolne do obsługi różnych scenariuszy awaryjnych bez utraty danych lub funkcjonalności. W tej lekcji omówimy, jak zaimplementować prosty system odporności w aplikacji Java, używając wzorca projektowego Circuit Breaker.
Implementacja wzorca Circuit Breaker w Javie
Wzorzec Circuit Breaker ma na celu zapobieganie ciągłemu wykonywaniu operacji, które mogą zakończyć się niepowodzeniem, co z kolei może spowodować awarię całego systemu. Poniżej przedstawiamy przykład implementacji tego wzorca.
Klasa CircuitBreaker
public class CircuitBreaker {
private boolean open = false;
private long lastOpened = 0;
// Próg czasowy dla ponownych prób
private final long timeout = 30000; // 30 sekund
public CircuitBreaker() {
}
// Sprawdza, czy przerwa jest otwarta
public boolean isOpen() {
if (open) {
// Automatyczne zamknięcie po upływie timeout
if (System.currentTimeMillis() - lastOpened > timeout) {
open = false;
return false; // Zamyka obwód
}
return true; // Pozostawia obwód otwarty
}
return false;
}
// Otwiera obwód
public void open() {
open = true;
lastOpened = System.currentTimeMillis();
}
// Zamyka obwód
public void close() {
open = false;
}
}
Wykorzystanie CircuitBreaker
Załóżmy, że mamy prosty serwis, który wykonuje zapytania do zewnętrznego API. Możemy użyć CircuitBreaker
, aby uniknąć przeciążenia serwisu zewnętrznego w przypadku jego awarii.
public class ExternalService {
private CircuitBreaker circuitBreaker = new CircuitBreaker();
// Symulacja zapytania do zewnętrznego API
public void queryAPI() {
if (circuitBreaker.isOpen()) {
System.out.println("Operacja przerwana:"
+ " Circuit Breaker aktywny.");
return;
}
try {
// Tutaj wykonujemy zapytanie do zewnętrznego API
// Na potrzeby przykładu zakładamy,
// że zapytanie się powiodło
System.out.println("Zapytanie do API wykonane pomyślnie.");
circuitBreaker.close(); // Zamyka obwód po sukcesie
} catch (Exception e) {
System.out.println("Błąd podczas zapytania do API.");
circuitBreaker.open(); // Otwiera obwód po wykryciu błędu
}
}
}
Podsumowanie
Odporność aplikacji Java jest kluczowym elementem zapewniającym ciągłość działania systemów w obliczu awarii. Wzorzec Circuit Breaker jest jednym z wielu wzorców projektowych, które można zastosować, aby zwiększyć odporność aplikacji. Dzięki jego implementacji możemy zapobiegać długotrwałym awariom i zapewnić, że nasza aplikacja pozostanie funkcjonalna nawet w trudnych warunkach. Odporność nie ogranicza się jednak tylko do obsługi błędów, ale także dotyczy planowania, projektowania i testowania aplikacji w sposób, który minimalizuje potencjalne skutki awarii.
Jeżeli chcesz przyśpieszyć swoją naukę tworzenia stron chciałbym polecić mój kurs video Java w którym nauczysz się tego języka od podstaw do zaawansowanych jego aspektów.