github.com/songzhibin97/gkit@v1.2.13/downgrade/example_test.go (about) 1 package downgrade 2 3 import ( 4 "context" 5 6 "github.com/afex/hystrix-go/hystrix" 7 ) 8 9 var fuse Fuse 10 11 // type RunFunc = func() error 12 // type FallbackFunc = func(error) error 13 // type RunFuncC = func(context.Context) error 14 // type FallbackFuncC = func(context.Context, error) error 15 16 func mockRunFunc() RunFunc { 17 return func() error { 18 return nil 19 } 20 } 21 22 func mockFallbackFunc() FallbackFunc { 23 return func(err error) error { 24 return nil 25 } 26 } 27 28 func mockRunFuncC() RunFuncC { 29 return func(ctx context.Context) error { 30 return nil 31 } 32 } 33 34 func mockFallbackFuncC() FallbackFuncC { 35 return func(ctx context.Context, err error) error { 36 return nil 37 } 38 } 39 40 func ExampleNewFuse() { 41 // 拿到一个熔断器 42 fuse = NewFuse() 43 } 44 45 func ExampleHystrix_ConfigureCommand() { 46 // 不设置 ConfigureCommand 走默认配置 47 // hystrix.CommandConfig{} 设置参数 48 fuse.ConfigureCommand("test", hystrix.CommandConfig{}) 49 } 50 51 func ExampleHystrix_Do() { 52 // Do: 同步执行 func() error, 没有超时控制 直到等到返回, 53 // 如果返回 error != nil 则触发 FallbackFunc 进行降级 54 err := fuse.Do("do", mockRunFunc(), mockFallbackFunc()) 55 if err != nil { 56 // 处理 error 57 } 58 } 59 60 func ExampleHystrix_Go() { 61 // Go: 异步执行 返回 channel 62 ch := fuse.Go("go", mockRunFunc(), mockFallbackFunc()) 63 if err := <-ch; err != nil { 64 // 处理 error 65 } 66 } 67 68 func ExampleHystrix_GoC() { 69 // GoC: Do/Go 实际上最终调用的就是GoC, Do主处理了异步过程 70 // GoC可以传入 context 保证链路超时控制 71 fuse.GoC(context.TODO(), "goc", mockRunFuncC(), mockFallbackFuncC()) 72 }