一个程序使用 N 个并发工作人员作为从通道消费数据的 goroutine 将数据发送到 API(生产者/消费者模式)。API 表示它无法使用 HTTP 状态代码处理更多,并要求退避。
- 在退避间隔过去之前,如何阻止所有工作人员?
- 我把那些重试失败的请求放在哪里?
非常感谢任何指向这个可能已经解决的问题的链接/指针!
一个程序使用 N 个并发工作人员作为从通道消费数据的 goroutine 将数据发送到 API(生产者/消费者模式)。API 表示它无法使用 HTTP 状态代码处理更多,并要求退避。
非常感谢任何指向这个可能已经解决的问题的链接/指针!
您可以使用 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 的图书馆。看起来它会解决你的问题