package breaker

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

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

Index

Examples

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.

Types

type Breaker

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

Breaker implements the circuit-breaker resiliency pattern

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) GetState

func (b *Breaker) GetState() State

GetState returns the current State of the circuit-breaker at the moment that it is called.

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.

type State

type State uint32

State is a type representing the possible states of a circuit breaker.

const (
	Closed State = iota
	Open
	HalfOpen
)

Source Files

breaker.go

Version
v1.7.0 (latest)
Published
Jul 19, 2024
Platform
linux/amd64
Imports
4 packages
Last checked
1 week ago

Tools for package owners.