You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.2 KiB
60 lines
1.2 KiB
package breaker_test
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/bilibili/kratos/pkg/net/netutil/breaker"
|
|
xtime "github.com/bilibili/kratos/pkg/time"
|
|
)
|
|
|
|
// ExampleGroup show group usage.
|
|
func ExampleGroup() {
|
|
c := &breaker.Config{
|
|
Window: xtime.Duration(3 * time.Second),
|
|
K: 1.5,
|
|
Bucket: 10,
|
|
Request: 100,
|
|
}
|
|
// init default config
|
|
breaker.Init(c)
|
|
// new group
|
|
g := breaker.NewGroup(c)
|
|
// reload group config
|
|
c.Bucket = 100
|
|
c.Request = 200
|
|
g.Reload(c)
|
|
// get breaker by key
|
|
g.Get("key")
|
|
}
|
|
|
|
// ExampleBreaker show breaker usage.
|
|
func ExampleBreaker() {
|
|
// new group,use default breaker config
|
|
g := breaker.NewGroup(nil)
|
|
brk := g.Get("key")
|
|
// mark request success
|
|
brk.MarkSuccess()
|
|
// mark request failed
|
|
brk.MarkFailed()
|
|
// check if breaker allow or not
|
|
if brk.Allow() == nil {
|
|
fmt.Println("breaker allow")
|
|
} else {
|
|
fmt.Println("breaker not allow")
|
|
}
|
|
}
|
|
|
|
// ExampleGo this example create a default group and show function callback
|
|
// according to the state of breaker.
|
|
func ExampleGo() {
|
|
run := func() error {
|
|
return nil
|
|
}
|
|
fallback := func() error {
|
|
return fmt.Errorf("unknown error")
|
|
}
|
|
if err := breaker.Go("example_go", run, fallback); err != nil {
|
|
fmt.Println(err)
|
|
}
|
|
}
|
|
|