在日常编码中,有很多不确定结果,比如网络请求,不确定什么时候能够成功,这就需要我们有一种重试机制,保证服务的高可用性.
重试分为以下几种情况:
- 重试固定次数
1
2
3
4
5
6
7
8
9
10
11// 重试固定次数
func RetryCount(count int, fn func() error) bool {
for i := 0; i < count; i++ {
err := fn()
if err == nil {
return true
}
}
return false
} - 在特定时间内重试不定次数,失败后休眠一段时间后继续重试
1 | // 在 duration 内,一直调用 fn,直到成功,失败后等待 sleep |
如果自定义的函数不是返回error
,需要使用闭包再包一下.