【发布时间】:2020-05-12 17:29:20
【问题描述】:
一个程序将数据发送到 API,使用 N 个并发工作程序作为从通道消费数据的 goroutine(生产者/消费者模式)。 API 表示它无法使用 HTTP 状态代码处理更多,并要求退避。
- 如何在退避间隔过去之前阻止所有工作人员?
- 我把那些重试失败的请求放在哪里?
非常感谢任何指向这个可能已经解决的问题的链接/指针!
【问题讨论】:
标签: go goroutine exponential-backoff
一个程序将数据发送到 API,使用 N 个并发工作程序作为从通道消费数据的 goroutine(生产者/消费者模式)。 API 表示它无法使用 HTTP 状态代码处理更多,并要求退避。
非常感谢任何指向这个可能已经解决的问题的链接/指针!
【问题讨论】:
标签: go goroutine exponential-backoff
您可以使用select来控制调用API
for _, k := range data {
select {
case <- backoff:
time.Sleep(backoffDuration)
default:
// Call API
// Check http status code and trigger backoff channel
backoff <- 1
}
}
设置如下:
设置这两个后,您可以通过操纵退避通道和退避持续时间来控制 API 调用,以控制例程暂停工作的时间。
免责声明:这只是伪代码。
您可以查看 Hashicorp 的图书馆 here。看起来它会解决你的问题
【讨论】: