kratos: Index | Examples | Files

package breaker

import ""



Package Files

breaker.go sre_breaker.go


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 Uses

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.


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 Uses

func Init(conf *Config)

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

type Breaker Uses

type Breaker interface {
    Allow() error

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

ExampleBreaker show breaker usage.


// 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 Uses

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

    // Google
    K   float64

    Window  xtime.Duration
    Bucket  int
    Request int64

Config broker config.

type Group Uses

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.


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 Uses

func NewGroup(conf *Config) *Group

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

func (*Group) Get Uses

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 Uses

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 Uses

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 breaker imports 9 packages (graph) and is imported by 6 packages. Updated 2020-03-29. Refresh now. Tools for package owners.