Skip to main content

DistributedRateLimiter

Struct DistributedRateLimiter 

Source
pub struct DistributedRateLimiter { /* private fields */ }
Expand description

Ergonomic handle for cluster-wide rate limiting against a backend.

Pairs a DistributedRateLimitBackend with a limiter key and a RateLimitConfig. The algorithm (token bucket vs sliding window) is taken from the config, exactly as with the in-process limiters in crate::rate_limit.

Cloning is cheap: the backend is held behind an Arc and shared.

Implementations§

Source§

impl DistributedRateLimiter

Source

pub fn new( backend: Arc<dyn DistributedRateLimitBackend>, key: impl Into<String>, config: RateLimitConfig, ) -> Self

Create a new distributed rate limiter.

§Arguments
  • backend - Shared store implementing DistributedRateLimitBackend.
  • key - Logical limiter name (e.g. a task name or queue).
  • config - Rate limit configuration (selects the algorithm).
Source

pub fn key(&self) -> &str

The limiter key.

Source

pub fn config(&self) -> &RateLimitConfig

The active configuration.

Source

pub fn algorithm(&self) -> DistributedAlgorithm

The active algorithm.

Source

pub async fn try_acquire(&self) -> Result<bool>

Try to acquire a single permit cluster-wide.

Returns Ok(true) if granted, Ok(false) if rate limited.

§Errors

Returns an error if the backend store is unavailable.

Source

pub async fn try_acquire_n(&self, cost: f64) -> Result<AcquireOutcome>

Try to acquire cost permits atomically.

Returns the full AcquireOutcome so callers can inspect the remaining permits and suggested retry delay.

§Errors

Returns an error if the backend store is unavailable.

Source

pub async fn acquire(&self, max_sleep: Duration) -> Result<Duration>

Acquire a single permit, awaiting (with bounded sleeps) until granted.

Returns the total time waited. Each retry sleeps for the backend’s suggested retry_after, clamped to max_sleep to remain responsive under contention from other workers.

§Errors

Returns an error if the backend store is unavailable.

Source

pub async fn available(&self) -> Result<f64>

Available permits for this limiter (after refill).

§Errors

Returns an error if the backend store is unavailable.

Source

pub async fn time_until_available(&self) -> Result<Duration>

Estimated time until a single permit is available.

§Errors

Returns an error if the backend store is unavailable.

Source

pub async fn reset(&self) -> Result<()>

Reset the limiter state for this key in the backend.

§Errors

Returns an error if the backend store is unavailable.

Trait Implementations§

Source§

impl Clone for DistributedRateLimiter

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DistributedRateLimiter

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more