我正在使用速率限制器来限制路由的请求数量
请求被发送到一个频道,我想限制每秒处理的数量,但我很难理解我是否设置正确,我没有收到错误,但我不确定我是否我什至在使用速率限制器
这是添加到频道的内容:
type processItem struct {
itemString string
}
这是通道和限制器:
itemChannel := make(chan processItem, 5)
itemThrottler := rate.NewLimiter(4, 1) //4 a second, no more per second (1)
var waitGroup sync.WaitGroup
项目被添加到频道:
case "newItem":
waitGroup.Add(1)
itemToExec := new(processItem)
itemToExec.itemString = "item string"
itemChannel <- *itemToExec
然后使用 goroutine 处理添加到通道中的所有内容:
go func() {
defer waitGroup.Done()
err := itemThrottler.Wait(context.Background())
if err != nil {
fmt.Printf("Error with limiter: %s", err)
return
}
for item := range itemChannel {
execItem(item.itemString) // the processing function
}
defer func() { <-itemChannel }()
}()
waitGroup.Wait()
有人可以确认发生以下情况:
- execItem 函数在通道的每个成员上每秒运行 4 次
我不明白“err := itemThrottler.Wait(context.Background())”在代码中做了什么,这是如何调用的?