go-kratos 微服务框架 bm 模块使用

本文详细介绍了Go语言Kratos微服务框架中BM模块的使用,包括路由配置、性能分析、Context上下文、中间件及其内置的Recovery、Trace、Logger、CSRF和CORS中间件的使用方法,以及自适应限流的实现。
摘要由CSDN通过智能技术生成

路由

创建项目成功后,进入internal/server/http目录下,打开http.go文件,其中有默认生成的blademaster模板。其中:

func New(s api.DemoServer) (engine *bm.Engine, err error) {
   
	var (
		cfg bm.ServerConfig
		ct paladin.TOML
	)
	if err = paladin.Get("http.toml").Unmarshal(&ct); err != nil {
   
		return
	}
	if err = ct.Get("Server").UnmarshalTOML(&cfg); err != nil {
   
		return
	}
	svc = s
	engine = bm.DefaultServer(&cfg)    // 创建引擎
	api.RegisterDemoBMServer(engine, s)
	initRouter(engine) // 注册路由
	err = engine.Start()
	return
}

initRouter(engine)

func initRouter(e *bm.Engine) {
   
	e.Ping(ping)
	g := e.Group("/kratos-demo")
	{
   
		g.GET("/start", howToStart)
		// 路径参数有两个特殊符号":"和"*"
		// ":" 跟在"/"后面为参数的key,匹配两个/中间的值 或 一个/到结尾(其中不再包含/)的值
		// "*" 跟在"/"后面为参数的key,匹配从 /*开始到结尾的所有值,所有*必须写在最后且无法多个

		// NOTE:这是不被允许的,会和 /start 冲突
		// g.GET("/:xxx")

		// NOTE: 可以拿到一个key为name的参数。注意只能匹配到/param1/felix,无法匹配/param1/felix/hao(该路径会404)
		g.POST("/start", howToStart)
		g.GET("param/:name", pathParam)
		// NOTE: 可以拿到多个key参数。注意只能匹配到/param2/felix/hao/love,无法匹配/param2/felix或/param2/felix/hao
		g.GET("/param2/:name/:value/:felid", pathParam)
		// NOTE: 可以拿到一个key为name的参数 和 一个key为action的路径。
		// NOTE: 如/params3/felix/hello,action的值为"/hello"
		// NOTE: 如/params3/felix/hello/hi,action的值为"/hello/hi"
		// NOTE: 如/params3/felix/hello/hi/,action的值为"/hello/hi/"
		g.GET("/param3/:name/*action", pathParam)
	}
}

Ping
engine自带Ping方法,用于设置/ping路由的handler,该路由统一提供于负载均衡服务做健康检测。服务是否健康,可自定义ping handler进行逻辑判断,如检测DB是否正常等。

func ping(ctx *bm.Context) {
   
	if _, err := svc.Ping(ctx, nil); err != nil {
   
		log.Error("ping error(%v)", err)
		ctx.AbortWithStatus(http.StatusServiceUnavailable)
	}
}

默认路由

默认路由有:

  • /metrics 用于prometheus信息采集
  • /metadata 可以查看所有注册的路由信息

查看加载的所有路由信息:

curl 'http://127.0.0.1:8000/metadata'

输出:

{
   "code":0,"message":"0","ttl":1,"data":{
   "/debug/pprof/":{
   "method":"GET"},"/debug/pprof/allocs":{
   "method":"GET"},"/debug/pprof/block":{
   "method":"GET"}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值