go-zero
go-zero copied to clipboard
not supporting generated with WithPriority
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的自动生成文件,发现不支持。