code: func (s *Server) throttleProviderConfigReload(throttle time.Duration, publish chan<- config.Message, in <-chan config.Message, stop chan bool) {
  	ring := channels.NewRingChannel(1)
  	defer ring.Close()
  
  	s.routinesPool.Go(func(stop chan bool) {
  		for {
  			select {
  			case <-stop:
  				return
  			case nextConfig := <-ring.Out():
  				if config, ok := nextConfig.(config.Message); ok {
  					publish <- config
  					time.Sleep(throttle)
  				}
  			}
  		}
  	})
  
  	for {
  		select {
  		case <-stop:
  			return
  		case nextConfig := <-in:
  			ring.In() <- nextConfig
  		}
  	}
  }
docs: // throttleProviderConfigReload throttles the configuration reload speed for a single provider.
  // It will immediately publish a new configuration and then only publish the next configuration after the throttle duration.
  // Note that in the case it receives N new configs in the timeframe of the throttle duration after publishing,
  // it will publish the last of the newly received configurations.