mirror of
https://github.com/oarkflow/mq.git
synced 2025-09-27 04:15:52 +08:00
feat: sig
This commit is contained in:
7
mq.go
7
mq.go
@@ -125,16 +125,13 @@ type RateLimiter struct {
|
||||
C chan struct{}
|
||||
}
|
||||
|
||||
// Modified RateLimiter: use blocking send to avoid discarding tokens.
|
||||
func NewRateLimiter(rate int, burst int) *RateLimiter {
|
||||
rl := &RateLimiter{C: make(chan struct{}, burst)}
|
||||
ticker := time.NewTicker(time.Second / time.Duration(rate))
|
||||
go func() {
|
||||
for range ticker.C {
|
||||
select {
|
||||
case rl.C <- struct{}{}:
|
||||
default:
|
||||
// bucket full; token discarded
|
||||
}
|
||||
rl.C <- struct{}{} // blocking send; tokens queue for deferred task processing
|
||||
}
|
||||
}()
|
||||
return rl
|
||||
|
Reference in New Issue
Block a user