Back to

Package breaker

Latest Go to latest

The highest tagged major version is .

Published: Jan 20, 2020 | License: MIT | Module:




const (
	// StateOpen when circuit breaker open, request not allowed, after sleep
	// some duration, allow one single request for testing the health, if ok
	// then state reset to closed, if not continue the step.
	StateOpen int32 = iota
	// StateClosed when circuit breaker closed, request allowed, the breaker
	// calc the succeed ratio, if request num greater request setting and
	// ratio lower than the setting ratio, then reset state to open.
	// StateHalfopen when circuit breaker open, after slepp some duration, allow
	// one request, but not state closed.

func Go

func Go(name string, run, fallback func() error) error

Go runs your function while tracking the breaker state of default group.


ExampleGo this example create a default group and show function callback according to the state of breaker.


package main

import (

func main() {
	run := func() error {
		return nil
	fallback := func() error {
		return fmt.Errorf("unknown error")
	if err := breaker.Go("example_go", run, fallback); err != nil {

func Init

func Init(conf *Config)

Init init global breaker config, also can reload config after first time call.

type Breaker

type Breaker interface {
	Allow() error

Breaker is a CircuitBreaker pattern. FIXME on int32 atomic.LoadInt32(&b.on) == _switchOn


ExampleBreaker show breaker usage.


package main

import (

func main() {
	// new group,use default breaker config
	g := breaker.NewGroup(nil)
	brk := g.Get("key")
	// mark request success
	// mark request failed
	// check if breaker allow or not
	if brk.Allow() == nil {
		fmt.Println("breaker allow")
	} else {
		fmt.Println("breaker not allow")

type Config

type Config struct {
	SwitchOff bool // breaker switch,default off.

	// Google
	K float64

	Window  xtime.Duration
	Bucket  int
	Request int64

Config broker config.

type Group

type Group struct {
	// contains filtered or unexported fields

Group represents a class of CircuitBreaker and forms a namespace in which units of CircuitBreaker.


ExampleGroup show group usage.


package main

import (
	xtime ""

func main() {
	c := &breaker.Config{
		Window:  xtime.Duration(3 * time.Second),
		K:       1.5,
		Bucket:  10,
		Request: 100,
	// init default config
	// new group
	g := breaker.NewGroup(c)
	// reload group config
	c.Bucket = 100
	c.Request = 200
	// get breaker by key

func NewGroup

func NewGroup(conf *Config) *Group

NewGroup new a breaker group container, if conf nil use default conf.

func (*Group) Get

func (g *Group) Get(key string) Breaker

Get get a breaker by a specified key, if breaker not exists then make a new one.

func (*Group) Go

func (g *Group) Go(name string, run, fallback func() error) error

Go runs your function while tracking the breaker state of group.

func (*Group) Reload

func (g *Group) Reload(conf *Config)

Reload reload the group by specified config, this may let all inner breaker reset to a new one.

Package Files

Documentation was rendered with GOOS=linux and GOARCH=amd64.

Jump to identifier

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to identifier