使用 Gin 框架和 Sentinel 实现限流的示例代码:
package main
import (
"log"
"net/http"
"github.com/alibaba/sentinel-golang/api"
"github.com/alibaba/sentinel-golang/core/base"
"github.com/alibaba/sentinel-golang/core/flow"
"github.com/gin-gonic/gin"
)
func initSentinel() error {
err := api.InitDefault()
if err != nil {
return err
}
_, err = flow.LoadRules([]*flow.Rule{
{
Resource: "rule1",
TokenCalculateStrategy: flow.Direct,
ControlBehavior: flow.Reject,
Threshold: 18,
StatIntervalInMs: 1000,
},
})
if err != nil {
return err
}
return nil
}
func main() {
err := initSentinel()
if err != nil {
log.Fatalf("初始化Sentinel失败: %v", err)
}
r := gin.Default()
r.GET("/test", func(c *gin.Context) {
e, b := api.Entry("rule1", api.WithTrafficType(base.Inbound))
if b != nil {
c.String(http.StatusTooManyRequests, "请求过多,请稍后再试")
} else {
defer e.Exit()
c.String(http.StatusOK, "Hello, World!")
}
})
r.Run(":8080")
}
在这个示例中,我们使用 Gin 框架创建了一个简单的 HTTP 服务器,并实现了一个 GET 请求的处理器。在处理器中,我们通过 Sentinel 进行限流控制,如果超出限流规则,则返回 429 Too Many Requests 错误,否则返回 "Hello, World!"。您可以根据需要修改路由、限流规则和返回的信息。启动服务器后,可以访问 http://localhost:8080/test
来测试限流效果。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。