huaweicloud-sdk-go-v3
huaweicloud-sdk-go-v3 copied to clipboard
关于BaseInvoker中,Withretry方法的问题
需求和问题描述: 使用NewEcsClient创建ecs,然后调用ListServerGroupsInvoker,这里使用了retry功能。然后发现无论成功失败都retry了一定次数。 客户端创建代码增加了RequestHandler,ResponseHandler。
func RequestHandler(request http.Request) {
fmt.Println(request)
}
func ResponseHandler(response http.Response) {
fmt.Println(response)
}
WithHttpHandler(httphandler.
NewHttpHandler().
AddRequestHandler(RequestHandler).
AddResponseHandler(ResponseHandler)))
response, err := client.ListServerGroupsInvoker(&model.ListServerGroupsRequest{
Limit: &limit,
}).WithRetry(5, func(i interface{}, err error) bool { return err != nil}, new(retry.None)).Invoke()
if err == nil {
fmt.Printf("%+v\n", response)
}
结果就是handler打印了很多次,然后我看WithRetry的代码https://github.com/huaweicloud/huaweicloud-sdk-go-v3/blob/b1fce86b345524cdeb25cba84a0c325178499b98/core/invoker/invoker.go#L87 发现这里的退出条件只有times满足条件。 期望: 请求成功或者在重试过程中成功就结束retry,是否增加一个条件? 比如
if b.retryChecker(resp, err) {
time.Sleep(time.Duration(b.backoffStrategy.ComputeDelayBeforeNextRetry()))
} else {
break
}
🙏
感谢使用,v0.1.12已修复该问题
👌