为啥会说到这个组件呢? 主要是最近再和某银行项目进行接口对接,做过银行项目的都懂吧,那接口的承载能力,是吧,有点让人无语!每次出问题,都要人工介入,想想都刺激
~,于是在网上查找一个hystrix-go组件, 可以帮我们解决一些问题
Hystrix 是由 Netflex 开发的一款开源组件,提供了基础的熔断功能。 Hystrix 将降级的策略封装在 Command 中,提供了 run 和 fallback 两个方法,前者表示正常的逻辑,比如微服务之间的调用……,如果发生了故障,再执行 fallback方法返回结果,我们可以把它理解成保底操作。但是这个组件是为JAVA实现的,而hystrix-go组件是基于go 实现的 简单版本;
疑问: 这个组件是没有人维护了吗?都4,5年没有更新过了,有知道的小伙伴可以在底下留言告诉我哈!
#安装Hystrix-go组件
go get github.com/afex/hystrix-go/hystrix
package main
import (
"errors"
"fmt"
"github.com/afex/hystrix-go/hystrix"
"github.com/gin-gonic/gin"
"net/http"
"time"
)
// 创建一个中间件
func TestMiddleware(ctx *gin.Context) {
hystrix.Do("baidu", func() error {
ctx.Next()
//这里判断的是返回状态
code := ctx.Writer.Status()
if code != 200 {
return errors.New("status err")
}
return nil
}, func(err error) error {
if err != nil {
//写日志,发短信,发邮件等操作,这里主要做些异常处理,进行补偿操作
ctx.JSON(500, gin.H{
"msg": "请求接口失败",
})
}
return nil
})
}
func init() {
hystrix.ConfigureCommand("baidu", hystrix.CommandConfig{
Timeout: int(time.Second * 10), //执行command的超时时间
MaxConcurrentRequests: 10, //执行command的最大并发量
RequestVolumeThreshold: 100, //在统计窗口内的最大请求数量
SleepWindow: int(time.Second * 2), //请求窗口
ErrorPercentThreshold: 20, //错误百分比
})
}
func main() {
r := gin.Default()
fmt.Println("abc")
r.GET("/test", func(c *gin.Context) {
//这里以baidu为例,正常的话,就是你请求的那业务接口
_, err := http.Get("https://www.baidu.com")
if err != nil {
c.JSON(500, gin.H{
"mes": err,
})
return
}
c.JSON(200, gin.H{
"msg": "this is ok",
})
}, TestMiddleware)
r.Run(":8888")
}
没有啥知识点,这个组件使用起来还是比较简单的 ,根据自己的业务需求来实现就可以了,
在对接第三方时,一定要评估好对方接口的承载能力,要不天天需要人工处理,真的会谢!!!!
留言与评论(共有 0 条评论) “” |