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  }