k8s限速队列使用场景分析
场景1:add->add->get->get
package main
import (
"fmt"
"k8s.io/client-go/util/workqueue"
)
func main() {
queue := workqueue.NewRateLimitingQueue(workqueue.DefaultControllerRateLimiter())
queue.Add(100)
queue.Add(100)
v, _ := queue.Get()
fmt.Println(v)
v, _ = queue.Get()
fmt.Println(v)
}
连续Add相同key通过dirty这个set去重。
场景2:add->get->add->done->get
package main
import (
"fmt"
"k8s.io/client-go/util/workqueue"
)
func main() {
queue := workqueue.NewRateLimitingQueue(workqueue.DefaultControllerRateLimiter())
queue.Add(100)
v, _ := queue.Get()
fmt.Println(v)
queue.Add(100)
queue.Done(100)
v, _ = queue.Get()
fmt.Println(v)
}
调用Done方法时,会把之前Add时加入dirty的相同key放入队列。