first commit
This commit is contained in:
44
pkg/httpclient/retry.go
Normal file
44
pkg/httpclient/retry.go
Normal file
@ -0,0 +1,44 @@
|
||||
package httpclient
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
"time"
|
||||
)
|
||||
|
||||
const (
|
||||
// DefaultRetryTimes 如果请求失败,最多重试3次
|
||||
DefaultRetryTimes = 3
|
||||
// DefaultRetryDelay 在重试前,延迟等待100毫秒
|
||||
DefaultRetryDelay = time.Millisecond * 100
|
||||
)
|
||||
|
||||
// Verify parse the body and verify that it is correct
|
||||
type RetryVerify func(body []byte) (shouldRetry bool)
|
||||
|
||||
func shouldRetry(ctx context.Context, httpCode int) bool {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return false
|
||||
default:
|
||||
}
|
||||
|
||||
switch httpCode {
|
||||
case
|
||||
_StatusReadRespErr,
|
||||
_StatusDoReqErr,
|
||||
|
||||
http.StatusRequestTimeout,
|
||||
http.StatusLocked,
|
||||
http.StatusTooEarly,
|
||||
http.StatusTooManyRequests,
|
||||
|
||||
http.StatusServiceUnavailable,
|
||||
http.StatusGatewayTimeout:
|
||||
|
||||
return true
|
||||
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user