limiter

package
v0.4.0-alpha Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 26, 2023 License: MIT Imports: 8 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrRequestEmpty = errors.New("request is empty")

Functions

This section is empty.

Types

type LimiterStore

type LimiterStore interface {
	// GetLimiter возвращает WaitLimiter для дальнейшего вызова его в запросе Tripper'а
	// На вход получет запрос от executor'а, по которому можно определить, например
	// токен доступа, по которому делается запрос, тем самым, создав лимитер под каждый
	// токен отдельно
	GetLimiter(*request.Request) (WaitLimiter, error)
}

LimiterStore это интерфейс для хранения всех лимитеров Вы можете реализовать свой собственный store, чтобы точнее контролировать лимитирование запросов, а также используемую оперативную память

func NewLimiterStoreTtlCache

func NewLimiterStoreTtlCache(
	rps int,
	limiterExpiration,
	cleanupCacheInterval time.Duration,
) LimiterStore

NewLimiterStoreTtlCache returns limiter's store with ttl cache storage

type LimiterTripper

type LimiterTripper http.RoundTripper

LimiterTripper type

func New

func New(rps int, limiterExpiration, cacheCleanupInterval time.Duration) LimiterTripper

Возвращает новый лимитер. rps - Количество запросов в секунду на один токен limiterExpiration - Время жизни одного лимитера в памяти. После истечения этого времени, он будет пересоздан или автоматически удален. cacheCleanupInterval - Интервал, указывающий, как часто нужно отчищать лимитеры, срок жизни которых истек

func NewWithStore

func NewWithStore(store LimiterStore) LimiterTripper

NewWithStore используется для переназначения хранилища лимитеров и более точного определения алгоритма лимитеров

type Tripper

type Tripper struct {
	Tripper http.RoundTripper
	// contains filtered or unexported fields
}

Объект, хранящий в себе все лимитеры запросов на конкретный токен. Чтобы не засорять память, в случае, если у вас много (сотни или тысячи) различных токенов, в этом пакете используется кеширование лимитеров. Лимитеры токенов регулярно удаляются из памяти.

func (*Tripper) RoundTrip

func (v *Tripper) RoundTrip(req *http.Request) (*http.Response, error)

RoundTrip возвращает функцию middleware для пакета executor

type WaitLimiter

type WaitLimiter interface {
	// Wait executes each request
	Wait(ctx context.Context) error
}
var DefaultLimiter WaitLimiter = &emptyLimiter{}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL