golang简易令牌桶算法实现代码浅谈

本文主要介绍了golang简易令牌桶算法实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

基本思路:定义一个chan,chan大小为需要限制的qps大小,go一个协程启动tick,每1000/qps时间在tick中写入数值,启动另一个协程,读取chan中的值,如果读取到chan中有值,则向下层接口发送请求。

代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

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 {

        //收客户请求,发送http请求给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)

    }

}

到此这篇关于golang简易令牌桶算法实现代码的文章就介绍到这了,希望可以帮到你。

转自:微点阅读   https://www.weidianyuedu.com

猜你喜欢

转载自blog.csdn.net/weixin_45707610/article/details/131830456
今日推荐