Help us shape the future of Go! Take the 2026 Go Developer Survey

limiter

package
v0.16.4 Latest Latest
Warning

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

Go to latest
Published: Sep 22, 2026 License: Apache-2.0 Imports: 6 Imported by: 8

Documentation

Index

Constants

View Source
const TypeLimiter iface.ItemType = "limiter_config"

TypeLimiter serves as itemKey in ConfigValueImpl

Variables

View Source
var NewLimiterConfig = util.JsonInitializer(func() iface.ConfigValueItem {
	return &LimiterConfig{}
})

NewLimiterConfig decodes json bytes into a newly allocated LimiterConfig object

Functions

func CopyDefaultLimitConfig added in v0.6.0

func CopyDefaultLimitConfig() iface.ConfigValueItem

CopyDefaultLimitConfig copies the default limiter configuration and returns a new instance of it

func NewLimiterWrapper

func NewLimiterWrapper(conLimit ConcurrencyLimiter, qpsLimit RateLimiter) limit.Updater

NewLimiterWrapper wraps the given ConcurrencyLimiter and RateLimiter into a limit.Updater.

Types

type ConcurrencyLimiter

type ConcurrencyLimiter interface {
	// Acquire reports if next access to the protected resource is allowed.
	Acquire(ctx context.Context) bool

	// Release claims a previous taken access has released the resource.
	Release(ctx context.Context)

	// Status returns the total quota and occupied.
	Status(ctx context.Context) (limit, occupied int)
}

ConcurrencyLimiter limits the number of concurrent access towards the protected resource. The implementation of ConcurrencyLimiter should be concurrent safe.

func NewConcurrencyLimiter deprecated

func NewConcurrencyLimiter(lim int) ConcurrencyLimiter

Deprecated: Use NewConnectionLimiter instead.

func NewConnectionLimiter added in v0.3.3

func NewConnectionLimiter(lim int) ConcurrencyLimiter

NewConnectionLimiter returns a new ConnectionLimiter with the given limit.

type DummyConcurrencyLimiter

type DummyConcurrencyLimiter struct{}

DummyConcurrencyLimiter implements ConcurrencyLimiter but without actual limitation.

func (*DummyConcurrencyLimiter) Acquire

func (dcl *DummyConcurrencyLimiter) Acquire(ctx context.Context) bool

Acquire .

func (*DummyConcurrencyLimiter) Release

func (dcl *DummyConcurrencyLimiter) Release(ctx context.Context)

Release .

func (*DummyConcurrencyLimiter) Status

func (dcl *DummyConcurrencyLimiter) Status(ctx context.Context) (limit, occupied int)

Status .

type DummyRateLimiter

type DummyRateLimiter struct{}

DummyRateLimiter implements RateLimiter but without actual limitation.

func (*DummyRateLimiter) Acquire

func (drl *DummyRateLimiter) Acquire(ctx context.Context) bool

Acquire .

func (*DummyRateLimiter) Status

func (drl *DummyRateLimiter) Status(ctx context.Context) (max, current int, interval time.Duration)

Status .

type LimitReporter

type LimitReporter interface {
	ConnOverloadReport()
	QPSOverloadReport()
}

LimitReporter is the interface define to report(metric or print log) when limit happen

type LimiterConfig added in v0.6.0

type LimiterConfig struct {
	ConnectionLimit int64 `json:"connection_limit"`
	QPSLimit        int64 `json:"qps_limit"`
}

LimiterConfig represents the configuration for kitex server limiter zero value means no limit.

func (*LimiterConfig) DeepCopy added in v0.6.0

func (l *LimiterConfig) DeepCopy() iface.ConfigValueItem

DeepCopy makes a deep copy of LimiterConfig struct and returns a new instance of iface.ConfigValueItem

func (*LimiterConfig) EqualsTo added in v0.6.0

func (l *LimiterConfig) EqualsTo(item iface.ConfigValueItem) bool

EqualsTo determines if the LimiterConfig is equal to the given ConfigValueItem.

type RateLimiter

type RateLimiter interface {
	// Acquire reports if next access to the protected resource is allowed.
	Acquire(ctx context.Context) bool

	// Status returns the rate limit.
	Status(ctx context.Context) (max, current int, interval time.Duration)
}

RateLimiter limits the access rate towards the protected resource.

func NewQPSLimiter

func NewQPSLimiter(interval time.Duration, limit int) RateLimiter

NewQPSLimiter creates qpsLimiter.

type Updatable

type Updatable interface {
	UpdateLimit(limit int)
}

Updatable is a kind of limiters that support changing the limit dynamically. Note that `UpdateLimit` does not guarantee to be concurrent-safe.

Jump to

Keyboard shortcuts

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