Crate apalis_sql

source ·
Expand description

apalis-sql

apalis offers Sqlite, Mysql and Postgres storages for its workers.

Example

#[tokio::main]
async fn main() -> std::io::Result<()> {
    std::env::set_var("RUST_LOG", "debug,sqlx::query=error");
    let database_url = std::env::var("DATABASE_URL").expect("Must specify url to db");

    let pg: PostgresStorage<Email> = PostgresStorage::connect(database_url).await.unwrap();

    async fn send_email(job: Email, _ctx: JobContext) -> Result<(), JobError> {
        log::info!("Attempting to send email to {}", job.to);
        Ok(())
    }
   // This can be even in another program/language
   let query = "Select apalis.push_job('apalis::Email', json_build_object('subject', 'Test apalis', 'to', 'test1@example.com', 'text', 'Lorem Ipsum'));";
   db.execute(query).await.unwrap();

    Monitor::new()
        .register_with_count(4, move |index| {
            WorkerBuilder::new(&format!("tasty-avocado-{index}"))
                .with_storage(pg)
                .build_fn(send_email)
        })
        .run()
        .await
}

Modules

  • mysqlmysql
    MySQL storage for apalis. Uses SKIP LOCKED
  • postgrespostgres
    Postgres storage for apalis. Uses NOTIFY and SKIP LOCKED Allows persisting jobs on a postgres db. Comes with helper functions eg:
  • sqlitesqlite
    Sqlite Storage for apalis. Uses a transaction and min(rowid)