- add callback sign check.

This commit is contained in:
gazebo
2018-06-19 18:41:58 +08:00
parent 143a929c8c
commit 27919a36fc
11 changed files with 324 additions and 95 deletions

View File

@@ -6,6 +6,7 @@ import (
"net/http"
"time"
"git.rosy.net.cn/baseapi/utils"
"go.uber.org/zap"
)
@@ -19,17 +20,20 @@ type AccessPlatformAPIWithRetryParams struct {
}
const (
PAErrorLevelSuccess = 0
PAErrorLevelExceedLimit = 1
PAErrorLevelRecoverable = 2
PAErrorLevelFailed = 3
PAErrorLevelSuccess = "JXC4_SUCCESS"
PAErrorLevelExceedLimit = "JXC4_EXCEED_LIMIT"
PAErrorLevelRecoverable = "JXC4_RECOVERABLE"
PAErrorLevelGeneralFail = "JXC4_GENERAL_FAIL"
)
var (
ErrRecoverableErrMaxRetry = errors.New("recoverable error reach max retry count!")
ErrLimitReachMaxRetry = errors.New("Reach max retry count!")
ErrHttpCode = errors.New("HTTP Code is not 200")
ErrBusinessCode = errors.New("Business code is not ok")
)
var (
ErrStrHttpCode = "HTTP Code is not 200"
ErrStrBusinessCode = "Business code is not ok"
)
var (
@@ -37,7 +41,7 @@ var (
CBErrMsgUnmarshal = "can not unmarshal data:%v, data:%v"
)
func AccessPlatformAPIWithRetry(params *AccessPlatformAPIWithRetryParams, handleResponse func(response *http.Response) (int, error)) error {
func AccessPlatformAPIWithRetry(params *AccessPlatformAPIWithRetryParams, handleResponse func(response *http.Response) (string, error)) error {
exceedLimitRetryCount := 0
recoverableErrorRetryCount := 0
for {
@@ -60,29 +64,29 @@ func AccessPlatformAPIWithRetry(params *AccessPlatformAPIWithRetryParams, handle
continue
}
return ErrHttpCode
return utils.NewErrorIntCode(ErrStrHttpCode, response.StatusCode)
}
errLevel, err := handleResponse(response)
errCode, err := handleResponse(response)
if err != nil {
return err
}
if errLevel == PAErrorLevelSuccess {
if errCode == PAErrorLevelSuccess {
return nil
} else if errLevel == PAErrorLevelExceedLimit {
} else if errCode == PAErrorLevelExceedLimit {
exceedLimitRetryCount++
if exceedLimitRetryCount <= params.MaxExceedLimitRetryCount {
time.Sleep(params.SleepSecondWhenExceedLimit)
} else {
return ErrLimitReachMaxRetry
}
} else if errLevel == PAErrorLevelRecoverable {
} else if errCode == PAErrorLevelRecoverable {
if recoverableErrorRetryCount <= params.MaxRecoverableRetryCount {
continue
}
return ErrRecoverableErrMaxRetry
} else {
return ErrBusinessCode
return utils.NewErrorCode(ErrStrBusinessCode, errCode)
}
}
}