golang的hystrix库“电路断开”而没有“超时”错误

我们在golang应用程序中使用hystrix,即使没有 hystrix:超时

,在这里我们也会收到 hystrix:电路断开错误

hystrix配置:

hystrix.ConfigureCommand(cmd,hystrix.CommandConfig{
        Timeout:               timeout,MaxConcurrentRequests: 1000,ErrorPercentThreshold: 5,SleepWindow:           15 * 60 * 1000,//15 Minutes
    })

在hystrix后备部分中,我们记录错误消息信息。我们可以清楚地看到我们只有 hystrix:电路断开错误,没有其他任何错误

golang的hystrix库“电路断开”而没有“超时”错误

有时它的行为非常随机,在下图中,我们可以看到 hystrix:超时 hystrix:电路断开

之间没有相关性

golang的hystrix库“电路断开”而没有“超时”错误

sudo / sample hystrix代码:

func crawl(vendor string,req *http.Request,timeout int) (result []byte) {

    hystrix.Do(vendor,func() error {

        resp,err := httpClient.Do(req)
        if err != nil {
            log.Errorln("Error sending post request: ",err)
        } else {
            defer resp.Body.Close()
        }
        respBody,errResp := ioutil.ReadAll(resp.Body)
        if errResp != nil {
            log.WithFields(log.Fields{"RequestID": requestID}).Errorln("Error reading parser response",errResp,resp.Status)
        }

        if resp.StatusCode == 200 {
            result = respBody
        } else {
            log.Errorln(" SERVER SIDE ERROR",resp.StatusCode,obj)
        }

        return nil
    },func(err error) error {
        logApiTimeouts(vendor,err)
        log.WithFields(log.Fields{"RequestID": requestID}).Errorln("Hystrix Error:",err,obj)
        return nil
    })
}

有人遇到此错误以及如何解决此错误吗?

heroliyimin 回答:golang的hystrix库“电路断开”而没有“超时”错误

可能是因为requestVolumeThreshold的默认设置为20。

每个来自hystrix golang客户端的文档,

// DefaultVolumeThreshold is the minimum number of requests needed before a circuit can be tripped due to health
DefaultVolumeThreshold = 20

您可以设置它,

// Settings returns the hystrix command config
func (c Config) Settings() hystrix.CommandConfig {
   return hystrix.CommandConfig{
      Timeout:                8000,RequestVolumeThreshold: 1000,// FIXME: all calls must be paginated
   }
}

将其调整为大于默认值的某个数字可以解决我的错误。

本文链接:https://www.f2er.com/2881601.html

大家都在问