github.com/lingyao2333/mo-zero@v1.4.1/core/load/sheddergroup.go (about) 1 package load 2 3 import ( 4 "io" 5 6 "github.com/lingyao2333/mo-zero/core/syncx" 7 ) 8 9 // A ShedderGroup is a manager to manage key based shedders. 10 type ShedderGroup struct { 11 options []ShedderOption 12 manager *syncx.ResourceManager 13 } 14 15 // NewShedderGroup returns a ShedderGroup. 16 func NewShedderGroup(opts ...ShedderOption) *ShedderGroup { 17 return &ShedderGroup{ 18 options: opts, 19 manager: syncx.NewResourceManager(), 20 } 21 } 22 23 // GetShedder gets the Shedder for the given key. 24 func (g *ShedderGroup) GetShedder(key string) Shedder { 25 shedder, _ := g.manager.GetResource(key, func() (closer io.Closer, e error) { 26 return nopCloser{ 27 Shedder: NewAdaptiveShedder(g.options...), 28 }, nil 29 }) 30 return shedder.(Shedder) 31 } 32 33 type nopCloser struct { 34 Shedder 35 } 36 37 func (c nopCloser) Close() error { 38 return nil 39 }