apalis-sqlite 1.0.0

Background task processing for rust using apalis and sqlite
Documentation
use std::time::Duration;

use apalis::{layers::tracing::info, prelude::*};
use apalis_sqlite::{Config, SqliteStorage};
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};

#[tokio::main]
async fn main() {
    use tracing_subscriber::{EnvFilter, fmt};
    let fmt_layer = fmt::layer();
    let filter_layer = EnvFilter::try_from_default_env()
        .or_else(|_| EnvFilter::try_new("debug,sqlx=off"))
        .unwrap();

    tracing_subscriber::registry()
        .with(filter_layer)
        .with(fmt_layer)
        .init();

    let config = Config::default().queue("realtime-queue").lock_tasks(false);
    let (pool, listener) = SqliteStorage::connect_with_callback(":memory:").unwrap();
    SqliteStorage::setup(&pool).await.unwrap();

    let backend = SqliteStorage::new(&pool)
        .with_config(config)
        .poll_with_stream(listener);

    let mut b = backend.clone();
    tokio::spawn(async move {
        tokio::time::sleep(Duration::from_millis(1000)).await;
        let mut iters = 0;
        loop {
            iters += 1;
            tokio::time::sleep(Duration::from_millis(1000)).await;
            b.push(iters).await.unwrap();
            if iters == 10 {
                break;
            }
        }
    });

    async fn task(task: u32, worker: WorkerContext) -> Result<(), BoxDynError> {
        if task == 10 {
            worker.stop()?;
        }
        Ok(())
    }
    let worker = WorkerBuilder::new("rango-tango")
        .backend(backend)
        .on_event(|_, ev| info!("{ev:?}"))
        .build(task);
    worker.run().await.unwrap();
}