前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >go语言中接口限流案例

go语言中接口限流案例

原创
作者头像
周辰晨
发布2024-04-08 18:50:04
1430
发布2024-04-08 18:50:04
举报
文章被收录于专栏:go语言小册go语言小册

使用 Gin 框架和 Sentinel 实现限流的示例代码:

代码语言:javascript
复制
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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档