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  }