breaker - ActiveState ActiveGo 1.8
...

Package breaker

import "github.com/eapache/go-resiliency/breaker"
Overview
Index
Examples

Overview ▾

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

Variables

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

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

type Breaker

Breaker implements the circuit-breaker resiliency pattern

type Breaker struct {
    // contains filtered or unexported fields
}

Example

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

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

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

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.