前言
為啥會說到這個元件呢? 主要是最近再和某銀行項目進行接口對接,做過銀行項目的都懂吧,那接口的承載能力,是吧,有點讓人無語!每次出問題,都要人工介入,想想都刺激~,于是在網上查找一個hystrix-go元件, 可以幫我們解決一些問題
1. Hystrix
Hystrix 是由 Netflex 開發的一款開源元件,提供了基礎的熔斷功能。 Hystrix 将降級的政策封裝在 Command 中,提供了 run 和 fallback 兩個方法,前者表示正常的邏輯,比如微服務之間的調用……,如果發生了故障,再執行 fallback方法傳回結果,我們可以把它了解成保底操作。但是這個元件是為JAVA實作的,而hystrix-go元件是基于go 實作的 簡單版本;
疑問: 這個元件是沒有人維護了嗎?都4,5年沒有更新過了,有知道的小夥伴可以在底下留言告訴我哈!
2. Hystrix-go的基本使用
#安裝Hystrix-go元件
go get github.com/afex/hystrix-go/hystrix
2.1 源碼如下(這裡不是業務代碼,隻是一個示例)
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")
}
總結
沒有啥知識點,這個元件使用起來還是比較簡單的 ,根據自己的業務需求來實作就可以了,
在對接第三方時,一定要評估好對方接口的承載能力,要不天天需要人工處理,真的會謝!!!!