pub struct ReconnectPolicy {
pub initial_delay: Duration,
pub max_delay: Duration,
pub multiplier: f64,
pub max_attempts: Option<u32>,
pub jitter: bool,
}Expand description
Exponential-backoff policy used by TaskHubGrpcWorker when the sidecar
is unavailable.
The worker applies this policy for both the initial connection attempt and
every subsequent reconnect after the gRPC stream drops. On a successful
connection the delay is reset to initial_delay.
§Delay calculation
delay[0] = initial_delay
delay[n] = min(delay[n-1] * multiplier, max_delay) ± jitterJitter (when enabled) adds a uniformly-distributed ±10 % random offset to each delay, which reduces “thundering herd” reconnects in environments with many workers.
§Examples
use std::time::Duration;
use dapr_durabletask::worker::ReconnectPolicy;
// Fast reconnect for development (no jitter, 2 max attempts):
let policy = ReconnectPolicy::new()
.with_initial_delay(Duration::from_millis(200))
.with_max_delay(Duration::from_secs(5))
.with_multiplier(2.0)
.with_max_attempts(2);
// Production policy with jitter:
let policy = ReconnectPolicy::new()
.with_initial_delay(Duration::from_secs(1))
.with_max_delay(Duration::from_secs(60))
.with_multiplier(1.5)
.with_jitter(true);Fields§
§initial_delay: DurationDelay before the first reconnect attempt. Defaults to 1 s.
max_delay: DurationUpper bound on the delay between reconnect attempts. Defaults to 30 s.
multiplier: f64Multiplier applied to the current delay after each failed attempt. Must be ≥ 1.0. Defaults to 1.5.
max_attempts: Option<u32>Maximum number of reconnect attempts before start() returns an error.
None means retry indefinitely. Defaults to None.
jitter: boolWhen true, add a uniformly-distributed ±10 % random offset to each
delay. Defaults to true.
Implementations§
Source§impl ReconnectPolicy
impl ReconnectPolicy
Sourcepub fn with_initial_delay(self, delay: Duration) -> Self
pub fn with_initial_delay(self, delay: Duration) -> Self
Set the initial delay before the first reconnect attempt.
Sourcepub fn with_max_delay(self, max: Duration) -> Self
pub fn with_max_delay(self, max: Duration) -> Self
Set the maximum delay between reconnect attempts.
Sourcepub fn with_multiplier(self, mult: f64) -> Self
pub fn with_multiplier(self, mult: f64) -> Self
Set the backoff multiplier (must be ≥ 1.0).
Sourcepub fn with_max_attempts(self, n: u32) -> Self
pub fn with_max_attempts(self, n: u32) -> Self
Set the maximum number of reconnect attempts.
None retries indefinitely.
Sourcepub fn with_jitter(self, jitter: bool) -> Self
pub fn with_jitter(self, jitter: bool) -> Self
Enable or disable ±10 % random jitter on each delay.
Trait Implementations§
Source§impl Clone for ReconnectPolicy
impl Clone for ReconnectPolicy
Source§fn clone(&self) -> ReconnectPolicy
fn clone(&self) -> ReconnectPolicy
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ReconnectPolicy
impl Debug for ReconnectPolicy
Auto Trait Implementations§
impl Freeze for ReconnectPolicy
impl RefUnwindSafe for ReconnectPolicy
impl Send for ReconnectPolicy
impl Sync for ReconnectPolicy
impl Unpin for ReconnectPolicy
impl UnsafeUnpin for ReconnectPolicy
impl UnwindSafe for ReconnectPolicy
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request