pub struct Queue { /* private fields */ }Expand description
An in-memory background job queue.
Create via Queue::builder() or Queue::new().
Register handlers with register(), then push jobs
with push() or push_delayed().
The queue must be started with start() to spawn
background worker tasks that process jobs.
Implementations§
Source§impl Queue
impl Queue
Sourcepub fn builder() -> QueueBuilder
pub fn builder() -> QueueBuilder
Create a builder for customizing the queue.
Sourcepub async fn push(
&self,
name: impl Into<String>,
payload: &(impl Serialize + ?Sized),
) -> Result<u64, QueueError>
pub async fn push( &self, name: impl Into<String>, payload: &(impl Serialize + ?Sized), ) -> Result<u64, QueueError>
Push a job for immediate execution.
The payload is serialized to JSON. Returns the job ID.
Sourcepub async fn push_delayed(
&self,
name: impl Into<String>,
payload: &(impl Serialize + ?Sized),
delay: Duration,
) -> Result<u64, QueueError>
pub async fn push_delayed( &self, name: impl Into<String>, payload: &(impl Serialize + ?Sized), delay: Duration, ) -> Result<u64, QueueError>
Push a job for delayed execution.
The job will not be picked up by a worker until delay has elapsed.
Sourcepub async fn push_dedup(
&self,
name: impl Into<String>,
payload: &(impl Serialize + ?Sized),
dedup_key: impl Into<String>,
) -> Result<u64, QueueError>
pub async fn push_dedup( &self, name: impl Into<String>, payload: &(impl Serialize + ?Sized), dedup_key: impl Into<String>, ) -> Result<u64, QueueError>
Push with a dedup key — the job is queued at most once concurrently.
If a job with the same dedup_key is currently in pending, this is a
no-op and the existing id is returned. Useful for idempotent triggers
(e.g. flush a cache only once per minute regardless of how many requests
arrived). The dedup window ends when the job is picked up.
Sourcepub fn start(&self)
Available on crate feature compio only.
pub fn start(&self)
compio only.Start background worker tasks (compio runtime).
Sourcepub async fn shutdown(&self, timeout: Duration)
pub async fn shutdown(&self, timeout: Duration)
Gracefully shut down the queue.
Stops accepting new jobs and waits for in-flight jobs to complete (up to the given timeout).
Sourcepub fn dead_letters(&self) -> Vec<DeadJob>
pub fn dead_letters(&self) -> Vec<DeadJob>
Returns a snapshot of jobs in the dead letter queue.
Allocates a new Vec<DeadJob> and deep-clones every entry. For
monitoring code that just iterates entries read-only, prefer
Self::dead_letters_arc (atomic refcount per entry, no payload
copies) or Self::dead_letter_count (no allocation at all).
Sourcepub fn dead_letters_arc(&self) -> Vec<Arc<DeadJob>>
pub fn dead_letters_arc(&self) -> Vec<Arc<DeadJob>>
Returns a cheap snapshot of the dead letter queue.
Each entry is shared via Arc rather than deep-cloned, so this is
suitable for emitting from metrics endpoints or hot paths. Returned
Arc<DeadJob> handles remain valid even if Self::clear_dead_letters
is called concurrently.
Sourcepub fn dead_letter_count(&self) -> usize
pub fn dead_letter_count(&self) -> usize
Returns the number of jobs currently in the dead letter queue.
Sourcepub fn clear_dead_letters(&self)
pub fn clear_dead_letters(&self)
Clear all dead letters.
Sourcepub fn pending_count(&self) -> usize
pub fn pending_count(&self) -> usize
Returns the number of pending jobs.
Sourcepub fn inflight_count(&self) -> u64
pub fn inflight_count(&self) -> u64
Returns the number of currently in-flight jobs.
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for Queue
impl !UnwindSafe for Queue
impl Freeze for Queue
impl Send for Queue
impl Sync for Queue
impl Unpin for Queue
impl UnsafeUnpin for Queue
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> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
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> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more