小编new*_*ing的帖子

不断重试 Golang 中的函数

我正在尝试创建一个可以按以下方式工作的功能:

  1. 一旦服务函数被调用,它就会使用 Fetch 函数从服务获取记录(以字节数组的形式),JSON 解组字节数组,填充结构,然后将结构发送到 DB 函数保存到数据库。
  2. 现在,由于这需要是一个连续的工作,所以我添加了两个 if 条件,如果收到的记录长度为 0,则我们使用重试函数重试拉取记录,否则我们只写入数据库。

我已经尝试调试重试函数有一段时间了,但它不起作用,并且在第一次重试后基本上停止了(即使我将尝试次数指定为 100)。我可以做什么来确保它不断重试拉取记录?

代码如下:

// RETRY FUNCTION
func retry(attempts int, sleep time.Duration, f func() error) (err error) {
for i := 0; ; i++ {
    err = f()
    if err == nil {
        return
    }

    if i >= (attempts - 1) {
        break
    }

    time.Sleep(sleep)
    sleep *= 2

    log.Println("retrying after error:", err)
}
return fmt.Errorf("after %d attempts, last error: %s", attempts, err) }


//Save Data function 

type Records struct { …
Run Code Online (Sandbox Code Playgroud)

go exponential-backoff retry-logic

1
推荐指数
2
解决办法
3万
查看次数

标签 统计

exponential-backoff ×1

go ×1

retry-logic ×1