import "github.com/eapache/go-resiliency/breaker"
Package breaker implements the circuit-breaker resiliency pattern for Go.
ErrBreakerOpen is the error returned from Run() when the function is not executed because the breaker is currently open.
type Breaker struct {
// contains filtered or unexported fields
}
Breaker implements the circuit-breaker resiliency pattern
Code:
breaker := New(3, 1, 5*time.Second) for { result := breaker.Run(func() error { // communicate with some external service and // return an error if the communication failed return nil }) switch result { case nil: // success! case ErrBreakerOpen: // our function wasn't run because the breaker was open default: // some other error } }
New constructs a new circuit-breaker that starts closed. From closed, the breaker opens if "errorThreshold" errors are seen without an error-free period of at least "timeout". From open, the breaker half-closes after "timeout". From half-open, the breaker closes after "successThreshold" consecutive successes, or opens on a single error.
Go will either return ErrBreakerOpen immediately if the circuit-breaker is already open, or it will run the given function in a separate goroutine. If the function is run, Go will return nil immediately, and will *not* return the return value of the function. It is safe to call Go concurrently on the same Breaker.
Run will either return ErrBreakerOpen immediately if the circuit-breaker is already open, or it will run the given function and pass along its return value. It is safe to call Run concurrently on the same Breaker.
Package breaker imports 4 packages (graph) and is imported by 62 packages. Updated 2020-05-19. Refresh now. Tools for package owners.