pub struct WorkerSystem { /* private fields */ }Expand description
Main worker system for durable background job processing
Provides a reliable background job system with job persistence, retry logic, scheduling, and status tracking. Perfect for email sending, image processing, report generation, and any task that should survive restarts.
§Features
- Job persistence across restarts
- Exponential backoff retry logic
- Job scheduling and delayed execution
- Dead letter queue for failed jobs
- Priority-based job execution
- Concurrent job processing
- Job status tracking
§Examples
use aurora_db::workers::{WorkerSystem, WorkerConfig, Job, JobPriority};
use serde_json::json;
// Create worker system
let config = WorkerConfig {
storage_path: "./workers.db".to_string(),
max_concurrent_jobs: 10,
poll_interval_ms: 100,
};
let workers = WorkerSystem::new(config)?;
// Register job handlers
workers.register_handler("send_email", |job| async move {
let to = job.payload.get("to").and_then(|v| v.as_str()).unwrap();
let subject = job.payload.get("subject").and_then(|v| v.as_str()).unwrap();
// Send email
send_email(to, subject).await?;
Ok(())
}).await;
// Start processing jobs
workers.start().await?;
// Enqueue a job
let job = Job::new("send_email")
.add_field("to", json!("user@example.com"))
.add_field("subject", json!("Welcome!"))
.with_priority(JobPriority::High);
let job_id = workers.enqueue(job).await?;
println!("Enqueued job: {}", job_id);Implementations§
Source§impl WorkerSystem
impl WorkerSystem
Sourcepub fn new(config: WorkerConfig) -> Result<Self>
pub fn new(config: WorkerConfig) -> Result<Self>
Sourcepub async fn start(&self) -> Result<()>
pub async fn start(&self) -> Result<()>
Start the worker system
Begins processing jobs from the queue. Jobs are executed concurrently
based on the max_concurrent_jobs configuration.
§Examples
let workers = WorkerSystem::new(config)?;
// Register handlers first workers.register_handler(“task”, handler).await;
// Then start processing workers.start().await?;
Sourcepub async fn stop(&self) -> Result<()>
pub async fn stop(&self) -> Result<()>
Stop the worker system gracefully
Waits for currently running jobs to complete before shutting down. No new jobs will be picked up after calling this method.
§Examples
// Graceful shutdown workers.stop().await?;
Sourcepub async fn enqueue(&self, job: Job) -> Result<String>
pub async fn enqueue(&self, job: Job) -> Result<String>
Enqueue a new job for processing
Adds a job to the queue. It will be executed by a worker when available, respecting priority and scheduling constraints.
§Arguments
job- The job to enqueue
§Returns
The unique job ID for tracking status
§Examples
use serde_json::json;
// Simple job let job = Job::new(“send_welcome_email”) .add_field(“user_id”, json!(“123”)) .add_field(“email”, json!(“user@example.com”));
let job_id = workers.enqueue(job).await?;
// High priority job let urgent = Job::new(“process_payment”) .add_field(“amount”, json!(99.99)) .with_priority(JobPriority::Critical) .with_timeout(30); // 30 seconds
workers.enqueue(urgent).await?;
// Scheduled job (runs in 1 hour) let scheduled = Job::new(“send_reminder”) .add_field(“message”, json!(“Meeting in 1 hour”)) .scheduled_at(chrono::Utc::now() + chrono::Duration::hours(1));
workers.enqueue(scheduled).await?;
Sourcepub async fn get_status(&self, job_id: &str) -> Result<Option<JobStatus>>
pub async fn get_status(&self, job_id: &str) -> Result<Option<JobStatus>>
Get job status
Retrieves the current status of a job by its ID.
§Arguments
job_id- The job ID returned fromenqueue()
§Returns
Some(JobStatus)if job existsNoneif job not found
§Examples
let job_id = workers.enqueue(job).await?;
// Check status later if let Some(status) = workers.get_status(&job_id).await? { match status { JobStatus::Pending => println!(“Waiting to run”), JobStatus::Running => println!(“Currently executing”), JobStatus::Completed => println!(“Done!”), JobStatus::Failed { error, retries } => { println!(“Failed: {} (retries: {})”, error, retries); }, JobStatus::DeadLetter { error } => { println!(“Permanently failed: {}”, error); }, } }
Sourcepub async fn stats(&self) -> Result<QueueStats>
pub async fn stats(&self) -> Result<QueueStats>
Get queue statistics
Returns counts of jobs in various states for monitoring.
§Returns
QueueStats with pending, running, completed, failed, and dead letter counts
§Examples
let stats = workers.stats().await?;
println!(“Queue status:”); println!(“ Pending: {}“, stats.pending); println!(” Running: {}“, stats.running); println!(” Completed: {}“, stats.completed); println!(” Failed: {}“, stats.failed); println!(” Dead letter: {}“, stats.dead_letter);
// Alert on high failure rate let total = stats.completed + stats.failed; if total > 0 { let failure_rate = stats.failed as f64 / total as f64; if failure_rate > 0.10 { alert!(“High job failure rate: {:.1}%”, failure_rate * 100.0); } }
Auto Trait Implementations§
impl Freeze for WorkerSystem
impl !RefUnwindSafe for WorkerSystem
impl Send for WorkerSystem
impl Sync for WorkerSystem
impl Unpin for WorkerSystem
impl !UnwindSafe for WorkerSystem
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
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<F, W, T, D> Deserialize<With<T, W>, D> for F
impl<F, W, T, D> Deserialize<With<T, W>, D> for F
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> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more