lilqueue
it's just a lil job queue runner.
jobs are plain serde-serializable structs that implement a single-method trait:
Job::process(&self) -> Result<(), JobError>
storage is provided by the application. lilqueue does not depend on sqlite, sqlx,
rusqlite, seaorm, or seekwel.
queue traits
Implement the capability traits your storage supports:
JobQueue: enqueue serialized jobsLockableQueue: atomically claim and complete jobsRetryableQueue: retry or fail claimed jobs
The worker runner requires RetryableQueue. Lock tokens, leases, and database-specific
state should live inside the queue adapter's Claim type, not in job code.
example
use async_trait;
use ;
use ;
use Duration;
async
adapter crates
This repo includes separate adapter crates:
crates/lilqueue-seaorm:SeaOrmQueueover a SeaORM SQLite connectioncrates/lilqueue-seekwel:SeekwelQueueover Seekwel's global connection
They are separate packages so SeaORM/sqlx and Seekwel/rusqlite do not have to be
linked into the same dependency graph. Publish lilqueue first, then publish
adapter crates after that version is available on crates.io.
SeaORM:
use ;
use ;
let db = connect.await?;
let queue = new.await?;
let processor = new;
Seekwel:
use ;
use ;
use Connection;
file?;
let queue = global?;
let processor = new;
axum dashboard
The dashboard is storage-agnostic too. Provide a type that implements
dashboard::DashboardData:
use Router;
use dashboard;
let app = new
.nest;
dashboard routes:
GET /queue/(HTML overview)GET /queue/api/stats(JSON counters)GET /queue/api/jobs?limit=50(JSON recent jobs)