pub struct RetryQueue { /* private fields */ }Expand description
Retry queue for managing message retries with exponential backoff.
Implementations§
Source§impl RetryQueue
impl RetryQueue
Sourcepub fn with_config(config: RetryConfig) -> Self
pub fn with_config(config: RetryConfig) -> Self
Creates a new retry queue with custom configuration.
Sourcepub fn enqueue(
&mut self,
message: Message,
retry_count: u32,
) -> Option<DateTime<Utc>>
pub fn enqueue( &mut self, message: Message, retry_count: u32, ) -> Option<DateTime<Utc>>
Adds a message to the retry queue.
The retry queue is a pure scheduling mechanism — it does not enforce a retry limit. ACK-level retry limits are enforced by the ACK manager in the protocol layer.
Duplicate messages (same ID already in queue) are silently ignored.
§Arguments
message- The message to queue for retryretry_count- Current retry count (used for backoff calculation)
§Returns
The absolute time the retry is scheduled for, or None if the
message was already queued (nothing was scheduled).
Sourcepub fn enqueue_with_delay(
&mut self,
message: Message,
retry_count: u32,
delay_ms: u64,
) -> Option<DateTime<Utc>>
pub fn enqueue_with_delay( &mut self, message: Message, retry_count: u32, delay_ms: u64, ) -> Option<DateTime<Utc>>
Adds a message to the retry queue with an explicit delay, bypassing the backoff formula.
Used for reachability probes toward peers an authoritative relay verdict reported unreachable, where the interval is driven by per-peer escalation rather than this message’s retry count.
Duplicate messages (same ID already in queue) are silently ignored;
None means nothing was scheduled.
Sourcepub fn dequeue_ready(&mut self) -> Option<RetryEntry>
pub fn dequeue_ready(&mut self) -> Option<RetryEntry>
Dequeues the next message that is ready for retry.
§Returns
Returns Some(RetryEntry) if a message is ready, None otherwise.
Sourcepub fn peek_ready(&self) -> Vec<&RetryEntry>
pub fn peek_ready(&self) -> Vec<&RetryEntry>
Gets all messages ready for retry without removing them.
Sourcepub fn remove(&mut self, message_id: &str) -> bool
pub fn remove(&mut self, message_id: &str) -> bool
Removes a message from the queue (e.g., after successful delivery).
Sourcepub fn cleanup_expired(&mut self) -> usize
pub fn cleanup_expired(&mut self) -> usize
Cleans up expired messages that exceeded their max lifetime.
§Returns
Returns the number of expired messages removed.
Sourcepub fn drain_all(&mut self) -> Vec<RetryEntry>
pub fn drain_all(&mut self) -> Vec<RetryEntry>
Drains all entries from the queue, ignoring retry_at timing.
Returns entries in priority order (earliest retry_at first, then
highest message priority). Used for immediate flush when transport
becomes available.
Sourcepub fn time_until_next_retry(&self) -> Option<Duration>
pub fn time_until_next_retry(&self) -> Option<Duration>
Gets the time until the next retry is ready.
§Returns
Returns Some(Duration) if there are pending retries, None if empty.
Sourcepub fn stats(&self) -> RetryQueueStats
pub fn stats(&self) -> RetryQueueStats
Gets statistics about the retry queue.