go-resiliency: github.com/eapache/go-resiliency/breaker Index | Examples | Files

package breaker

import "github.com/eapache/go-resiliency/breaker"

Package breaker implements the circuit-breaker resiliency pattern for Go.

Index

Examples

Package Files

breaker.go

Variables

var ErrBreakerOpen = errors.New("circuit breaker is open")

ErrBreakerOpen is the error returned from Run() when the function is not executed because the breaker is currently open.

type Breaker Uses

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
    }
}

func New Uses

func New(errorThreshold, successThreshold int, timeout time.Duration) *Breaker

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.

func (*Breaker) Go Uses

func (b *Breaker) Go(work func() error) 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.

func (*Breaker) Run Uses

func (b *Breaker) Run(work func() error) error

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 2019-08-29. Refresh now. Tools for package owners.