Sobes.tech
Junior — Middle

Czy masz doświadczenie w korzystaniu z wzorca Circuit Breaker w projektach?

sobes.tech AI

Odpowiedź od AI

Wzorzec Circuit Breaker jest używany do zwiększenia odporności systemu podczas interakcji z usługami lub komponentami zewnętrznymi, które mogą być niedostępne lub działać z błędami. W projektach w Go stosowałem ten wzorzec, aby zapobiec powtarzającym się nieudanym wywołaniom do zdalnych API, co pozwalało systemowi szybciej się odzyskać i nie obciążać nadmiernie serwisu.

Zasada działania: jeśli liczba błędów przekracza próg, Circuit Breaker się «zamyka» (otwiera), a kolejne wywołania od razu zwracają błąd bez próby kontaktu z serwisem. Po pewnym czasie następuje próba «zamknięcia» obwodu i sprawdzenia, czy serwis się odnowił.

Przykład użycia z biblioteką github.com/sony/gobreaker:

import (
    "fmt"
    "github.com/sony/gobreaker"
)

func main() {
    cb := gobreaker.NewCircuitBreaker(gobreaker.Settings{})

    result, err := cb.Execute(func() (interface{}, error) {
        // wywołanie zewnętrznego serwisu
        return "odpowiedź", nil
    })

    if err != nil {
        fmt.Println("Obwód przerwany lub błąd:", err)
    } else {
        fmt.Println("Sukces:", result)
    }
}