当前位置: 首页 > 工具软件 > syj-ratelimit > 使用案例 >

go juju/ratelimit 简单使用示例

邬弘化
2023-12-01

从接口限流了解到令牌桶。经过调研,发现 go语言 juju/ratelimit 令牌桶限流器使用比较多,于是研究了下。

具体令牌桶原理,请自行查询资料。

下面给出一个简单应用的例子:

package main

import (
	"fmt"
	"github.com/juju/ratelimit"
	"time"
)

func main() {
	b := newBucket(1*time.Second, 100)
	for i := 0; i < 1000; i++ {
		before := b.Available()
		tokenGet := b.TakeAvailable(1)
		if tokenGet != 0 {
			fmt.Println("获取到令牌 index=", i+1, "前后数量-> 前:", before, ", 后: ", b.Available(), ", tokenGet=", tokenGet)
		} else {
			fmt.Println("未获取到令牌,拒绝", i+1)
		}
		time.Sleep(1*time.Millisecond)
	}

}

func newBucket(fillInterval time.Duration, capacity int64) *ratelimit.Bucket {
	return ratelimit.NewBucketWithQuantum(fillInterval, capacity, capacity)
}

 

 

 类似资料: