Golang throttled基于GCRA速率限制库使用探索

 更新时间:2024年01月10日 14:20:40   作者:Eagle1949 技术源泉  
这篇文章主要为大家介绍了Golang throttled基于GCRA速率限制库使用实例探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

Throttled包

Throttled包实现了对HTTP端点等资源的速率限制访问。它使用通用信元速率算法(GCRA)来限制对资源(如HTTP端点)的访问,从而实现速率限制。

2.0.0版本对节流API进行了一些重大更改。如果此更改破坏了您的代码,或者您希望保留旧API的功能,请打开一个问题。我们不保证会有任何特定的更改,但希望了解更多关于用户需求的信息。

安装

import (
“github.com/throttled/sthrottled/v2”
)

然后,任何标准的Go工具,如构建、测试,都会自动找到包。您也可以使用go-get将其拉入您的项目中:

go get -u github.com/throttled/throttled/v2

如果你以前使用了throttled,现在推荐你升级到最新版本,并升级到含有context的新函数接口。

下面的函数可进行替换:

memstore.New => memstore.NewCtx
goredisstore.New => goredisstore.NewCtx
redigostore.New => redigostore.NewCtx
throttled.NewGCRARateLimiter => throttled.NewGCRARateLimiterCtx
throttled.HTTPRateLimiter => throttled.HTTPRateLimiterCtx

请注意,并非所有store都使用了context.Context。

HTTPLimiter用于对http进行速率限制访问的用法

此示例演示了HTTPLimiter用于对http进行速率限制访问的用法。每分钟每条路径最多可处理20个请求,最多可处理5个附加请求:

package main
import (
 "fmt"
 "log"
 "net/http"
 "github.com/throttled/throttled/v2"
 "github.com/throttled/throttled/v2/store/memstore"
)
func myHandlerFunc(w http.ResponseWriter, r *http.Request) {
 fmt.Fprintf(w, "Hello, world")
}
func main() {
 store, err := memstore.NewCtx(65536)
 if err != nil {
  log.Fatal(err)
 }
 quota := throttled.RateQuota{
  MaxRate:  throttled.PerMin(20),
  MaxBurst: 5,
 }
 rateLimiter, err := throttled.NewGCRARateLimiterCtx(store, quota)
 if err != nil {
  log.Fatal(err)
 }
 httpRateLimiter := throttled.HTTPRateLimiterCtx{
  RateLimiter: rateLimiter,
  VaryBy:      &throttled.VaryBy{Path: true},
 }
 handler := http.HandlerFunc(myHandlerFunc)
 http.ListenAndServe(":8080", httpRateLimiter.RateLimit(handler))
}

我们经常在使用第三方API时,会看到这样的提示,该接口频率限制限额,请合理安排业务调用,特别是token的请求,经常会要求你缓存到本地,如果我们的项目供他人使用,也有速率限制时,可以集成这个库方便的完成需求。

Github地址:

https://github.com/throttled/throttled 

以上就是Golang throttled基于GCRA速率限制库使用探索的详细内容,更多关于Golang throttled GCRA速率限制的资料请关注脚本之家其它相关文章!

相关文章

  • Golang使用Swag搭建api文档的全过程

    Golang使用Swag搭建api文档的全过程

    Gin是Golang目前最为常用的Web框架之一,公司项目验收需要API接口设计说明书(Golang后端服务基于Gin框架编写),所以本文给大家介绍了Golang使用Swag搭建api文档的全过程,需要的朋友可以参考下
    2024-02-02
  • Golang发送Get和Post请求的实现

    Golang发送Get和Post请求的实现

    做第三方接口有时需要用Get或者Post请求访问,本文主要介绍了Golang发送Get和Post请求的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-05-05
  • GoLang中Module的基本使用方法

    GoLang中Module的基本使用方法

    Go module是从Go 1.11版本才引入的新功能,下面这篇文章主要给大家介绍了关于GoLang中Module的基本使用方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • golang中的三个点 ''...''的用法示例详解

    golang中的三个点 ''...''的用法示例详解

    这篇文章主要介绍了golang中的三个点 '...' 的用法示例详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • go语言使用中提示%!(NOVERB)的解决方案

    go语言使用中提示%!(NOVERB)的解决方案

    o语言的设计目标是提供一种简单易用的编程语言,同时保持高效性和可扩展性,它支持垃圾回收机制,具有强大的并发编程能力,可以轻松处理大规模的并发任务,Go语言还拥有丰富的标准库和活跃的开发社区,使得开发者能够快速构建出高质量的应用程序,需要的朋友可以参考下
    2023-10-10
  • Go语言中三种不同md5计算方式的性能比较

    Go语言中三种不同md5计算方式的性能比较

    md5计算在我们日常工作的时候经常能遇到,下面这篇文章主要介绍了Go语言中三种不同md5计算方式的性能比较,需要的朋友可以参考借鉴,下面来一起学习学习吧。
    2017-01-01
  • Go指针的具体使用

    Go指针的具体使用

    本文主要介绍了Go指针的具体使用,包括使用指针、空指针、指针数组、指向指针的指针等,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11
  • Go1.21新增slices包的用法详解

    Go1.21新增slices包的用法详解

    Go 1.21新增的 slices 包提供了很多和切片相关的函数,可以用于任何类型的切片,这篇文章主要来和大家介绍一下slices包中相关函数的用法,需要的可以参考一下
    2023-08-08
  • go语言之给定英语文章统计单词数量(go语言小练习)

    go语言之给定英语文章统计单词数量(go语言小练习)

    这篇文章给大家分享go语言小练习给定英语文章统计单词数量,实现思路大概是利用go语言的map类型,以每个单词作为关键字存储数量信息,本文通过实例代码给大家介绍的非常详细,需要的朋友参考下吧
    2020-01-01
  • golang替换无法显示的特殊字符(\u0000, \000, ^@)

    golang替换无法显示的特殊字符(\u0000, \000, ^@)

    这篇文章主要介绍了golang替换无法显示的特殊字符,包括的字符有\u0000, \000, ^@等,下文详细资料,需要的小伙伴可以参考一下
    2022-04-04

最新评论