【微服务网关——Go令牌桶限流】
warning:
这篇文章距离上次修改已过187天,其中的内容可能已经有所变动。
package main
import (
"fmt"
"github.com/juju/ratelimit"
"time"
)
// 令牌桶限流器示例
func main() {
// 创建一个每秒填充5个令牌的令牌桶限流器
limiter := ratelimit.NewBucket(5, 1*time.Second)
// 尝试获取令牌
for i := 0; i < 10; i++ {
time.Sleep(200 * time.Millisecond) // 为了更好地观察,在获取令牌前等待200毫秒
if limiter.TakeAvailable(1) {
fmt.Printf("Request allowed: %d\n", i)
} else {
fmt.Printf("Request rejected: %d\n", i)
}
}
}
这段代码演示了如何使用ratelimit
库中的NewBucket
函数创建一个令牌桶限流器,并通过TakeAvailable
方法尝试获取令牌。在每次循环中,程序会等待200毫秒,然后尝试从桶中获取一个令牌。如果获取成功,则允许请求,否则拒绝请求。这种方式可以帮助我们控制数据流量和防止峰值流量打垮系统。
评论已关闭