限流中间件limitIP多扣次数问题

按文章添加限流中间件到路由后,每次请求limitIP中间件的次数减少都会多,
limitIP(“100-H”)先减少一次,然后嵌套在内的limitIP(“1000-H”)再减少一次,实际就是每层嵌套的限流器都会从上至下的挨个执行减少一次。这样会造成限流不对啊,咋办?求大神给个好的方案

Summer
最佳答案

已修复,利用 context 里面设置值来灵活辨别使用 peek 或者 get 方法,peek 取限流数据时,不会增加访问次数:

// 获取限流的结果
    if c.GetBool("limiter-once") {
        // Peek() 取结果,不增加访问次数
        return limiterObj.Peek(c, key)
    } else {

        // 确保多个路由组里调用 LimitIP 进行限流时,只增加一次访问次数。
        c.Set("limiter-once", true)

        // Get() 取结果且增加访问次数
        return limiterObj.Get(c, key)
    }

修改了两个文件,请以最新文章为准 10.3. 限流中间件《G02 Go API 实战》

2年前 评论
FatTiger 1年前
讨论数量: 2
Summer

已修复,利用 context 里面设置值来灵活辨别使用 peek 或者 get 方法,peek 取限流数据时,不会增加访问次数:

// 获取限流的结果
    if c.GetBool("limiter-once") {
        // Peek() 取结果,不增加访问次数
        return limiterObj.Peek(c, key)
    } else {

        // 确保多个路由组里调用 LimitIP 进行限流时,只增加一次访问次数。
        c.Set("limiter-once", true)

        // Get() 取结果且增加访问次数
        return limiterObj.Get(c, key)
    }

修改了两个文件,请以最新文章为准 10.3. 限流中间件《G02 Go API 实战》

2年前 评论
FatTiger 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!