#worker #job-processing #background-jobs #job #job-queue #processing #background-processing

muffin

Muffin is a background job processing library designed to work with MongoDB as its storage backend

2 releases

0.1.1 Feb 16, 2023
0.1.0 Feb 15, 2023

#19 in #background-processing

MIT license

46KB
837 lines

Muffin

Muffin is a background job processing library designed to work with MongoDB as its storage backend.

Requires MongoDB 6 with feature compatibility level set to 6.

Example

// Connect to a database called "muffin_testing".
let client = Client::with_uri_str("mongodb://localhost:27017").await?;
let database = client.database("muffin_testing");

// The state is passed to each "process" method on an instance of Job.
let state = JobState {
    mongo_client: client,
};

let mut muffin = Muffin::new(database, Arc::new(state)).await?;

// Create a new job and push it for processing
muffin
    .push(MyJob {
        name: "Peter".into(),
    })
    .await?;

// Register jobs that should be processed.
muffin.register::<MyJob>();

// Start processing jobs.
tokio::select! {
    _ = muffin.run() => {},
    _ = tokio::signal::ctrl_c() => {
        eprintln!("Received ctrl+c!");
    }
};

// Need to wait for all in-flight jobs to finish processing.
muffin.shutdown().await;

License

  • MIT license

Dependencies

~25–36MB
~660K SLoC