基本思路:定義一個(gè)chan,chan大小為需要限制的qps大小,go一個(gè)協(xié)程啟動(dòng)tick,每1000/qps時(shí)間在tick中寫(xiě)入數(shù)值,啟動(dòng)另一個(gè)協(xié)程,讀取chan中的值,如果讀取到chan中有值,則向下層接口發(fā)送請(qǐng)求。
package main
import (
"fmt"
"time"
"httpclient"
)
var LEN int = 10
func tickStoreCh(arrlen int, ch chan int) {
len := 1000/arrlen
fmt.Println(len)
tickTime := time.NewTicker(time.Duration(len)*time.Millisecond)
var i int
for {
fmt.Println(len)
i++
-tickTime.C
ch- i
}
}
func OrganReq(org string, qps int) {
ch := make(chan int, qps)
go tickStoreCh(qps, ch)
time.Sleep(1000*time.Millisecond)
for {
//收客戶請(qǐng)求,發(fā)送http請(qǐng)求給RE
client := httpclient.NewHttpClient(time.Duration(1000)*time.Millisecond, time.Duration(2000)*time.Millisecond)
header := make(map[string]string)
header["Content-Type"] = "application/json;charset=utf-8"
code, err := client.ResponseCode("http://127.0.0.1:19988", header, "llltest")
value := - ch
fmt.Println(code, value, err, "lenchan:", len(ch))
//time.Sleep(time.Second)
}
}
到此這篇關(guān)于golang簡(jiǎn)易令牌桶算法實(shí)現(xiàn)代碼的文章就介紹到這了,更多相關(guān)golang 令牌桶算法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!