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 register_handler<F, Fut>(
&self,
job_type: impl Into<String>,
handler: F,
)
pub async fn register_handler<F, Fut>( &self, job_type: impl Into<String>, handler: F, )
Register a job handler
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 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 UnsafeUnpin for WorkerSystem
impl !UnwindSafe for WorkerSystem
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> 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<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