Odporność (Resiliency) w Javie

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.

Scroll to Top