Skip to main content

BackoffPolicy

Struct BackoffPolicy 

Source
pub struct BackoffPolicy {
    pub max_attempts: Option<u32>,
    pub backoff: Backoff,
}
Expand description

The built-in ReconnectPolicy: a Backoff curve plus an optional cap on consecutive attempts.

A dropped connection is the normal case, not the exceptional one: brokers are restarted for upgrades, failed over, and partitioned from their clients by the network in between. The default therefore retries forever, on the theory that a worker process which outlives its broker’s restart is worth more than one which exits and waits for a supervisor.

use queuey_rabbitmq::BackoffPolicy;

// Give up after ten tries instead of retrying forever.
let policy = BackoffPolicy::default().max_attempts(Some(10));
assert_eq!(policy.max_attempts, Some(10));

Set RabbitMqOptions::reconnect to None to turn reconnection off entirely and get the original fail-fast behaviour back.

Fields§

§max_attempts: Option<u32>

How many consecutive attempts to make before giving up, or None to keep trying indefinitely.

Defaults to None. The count is of consecutive failures: it resets the moment a connection succeeds, so a process that reconnects once an hour for a year never exhausts a limit of three. Some(0) never reconnects at all, which is RabbitMqOptions::reconnect(None) the long way round.

§backoff: Backoff

Delay between attempts, as a function of how many have failed.

Defaults to exponential with full jitter: 500ms base, doubling, capped at 30 seconds. Jitter matters more here than in a job backoff: every worker in a fleet loses its connection at the same instant when a broker goes down, and an unjittered backoff would have all of them knock on the door in lockstep for as long as the outage lasts.

Implementations§

Source§

impl BackoffPolicy

Source

pub fn max_attempts(self, attempts: Option<u32>) -> Self

Limit the number of consecutive attempts, or None for no limit.

Source

pub fn backoff(self, backoff: Backoff) -> Self

Replace the delay schedule between attempts.

Trait Implementations§

Source§

impl Clone for BackoffPolicy

Source§

fn clone(&self) -> BackoffPolicy

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 BackoffPolicy

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Default for BackoffPolicy

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl ReconnectPolicy for BackoffPolicy

Source§

fn next_delay(&self, attempt: Attempt<'_>) -> Option<Duration>

The first attempt after a drop is immediate; the rest follow the curve.

A failover is often complete in the time it took the client to notice, so waiting out a backoff before even trying would add that delay to the common case. Backoff::delay_for takes the 1-based attempt that just failed, which is exactly the failure count.

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<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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> CompatExt for T

Source§

fn compat(self) -> Compat<T>
where T: Sized,

Applies the Compat adapter by value. Read more
Source§

fn compat_ref(&self) -> Compat<&T>

Applies the Compat adapter by shared reference. Read more
Source§

fn compat_mut(&mut self) -> Compat<&mut T>

Applies the Compat adapter by mutable reference. 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> Same for T

Source§

type Output = T

Should always be Self
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