go-zero icon indicating copy to clipboard operation
go-zero copied to clipboard

not supporting generated with WithPriority

Open gocpplua opened this issue 1 year ago • 0 comments

goctl version 1.3.3 linux/amd64

我们在获取降载成员时,使用getShedder,实现如下:

func (ng *engine) getShedder(priority bool) load.Shedder {
	if priority && ng.priorityShedder != nil {
		return ng.priorityShedder
	}

	return ng.shedder
}

所以,具体获取到哪一个,其实就看变量 priority。而gozero整个框架中,只有一处使用到getShedder

handler.SheddingHandler(ng.getShedder(fr.priority), metrics),

根据调用路径,我们最后知道,这个 fr.priority 就是我们在 RegisterHandlers接口的 AddRoutes 中传入的参数。如果我们在server.AddRoutes,最后调用 rest.WithPriority(),那么我们就会获取到 priorityShedder。

// WithPriority returns a RunOption with priority.
// 定义路由优先级,如果在服务 cpu 负载较高时,优先保证这些路由的正常使用,优先级低的将会优先丢弃。
func WithPriority() RouteOption {
	return func(r *featuredRoutes) {
		r.priority = true
	}
}

由于api/internal/handler/routes.go 中的RegisterHandlers接口是使用goctl通过.api文件自动生成的,我们无法修改。那么我们如果通过.api 进行自动生成? 查看goctl的自动生成文件,发现不支持。

gocpplua avatar Jul 29 '22 06:07 gocpplua