You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
go-zero/core/load/sheddergroup.go

37 lines
635 B
Go

package load
import (
"io"
"github.com/tal-tech/go-zero/core/syncx"
)
type ShedderGroup struct {
options []ShedderOption
manager *syncx.ResourceManager
}
func NewShedderGroup(opts ...ShedderOption) *ShedderGroup {
return &ShedderGroup{
options: opts,
manager: syncx.NewResourceManager(),
}
}
func (g *ShedderGroup) GetShedder(key string) Shedder {
shedder, _ := g.manager.GetResource(key, func() (closer io.Closer, e error) {
return nopCloser{
Shedder: NewAdaptiveShedder(g.options...),
}, nil
})
return shedder.(Shedder)
}
type nopCloser struct {
Shedder
}
func (c nopCloser) Close() error {
return nil
}