mirror of
https://github.com/Diggsey/sqlxmq.git
synced 2024-05-31 23:48:12 +00:00
Update example
This commit is contained in:
parent
153e353db6
commit
eedd8b6626
|
@ -35,5 +35,4 @@ runtime-tokio-rustls = ["sqlx/runtime-tokio-rustls"]
|
|||
dotenv = "0.15.0"
|
||||
pretty_env_logger = "0.4.0"
|
||||
futures = "0.3.13"
|
||||
signal-hook = "0.3"
|
||||
tokio = { version = "1", features = ["full"] }
|
||||
|
|
37
examples/graceful-shutdown.rs
Normal file
37
examples/graceful-shutdown.rs
Normal file
|
@ -0,0 +1,37 @@
|
|||
use sqlxmq::{job, CurrentJob, JobRegistry};
|
||||
use std::time::Duration;
|
||||
use tokio::time;
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
dotenv::dotenv().ok();
|
||||
let db = sqlx::PgPool::connect(&std::env::var("DATABASE_URL").unwrap()).await?;
|
||||
|
||||
sleep.builder().set_json(&5u64)?.spawn(&db).await?;
|
||||
|
||||
let mut handle = JobRegistry::new(&[sleep]).runner(&db).run().await?;
|
||||
|
||||
// Let's emulate a stop signal in a couple of seconts after running the job
|
||||
time::sleep(Duration::from_secs(2)).await;
|
||||
println!("A stop signal received");
|
||||
|
||||
// Stop listening for new jobs
|
||||
handle.stop().await;
|
||||
|
||||
// Wait for the running jobs to stop for maximum 10 seconds
|
||||
handle.wait_jobs_finish(Duration::from_secs(10)).await;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[job]
|
||||
pub async fn sleep(mut job: CurrentJob) -> sqlx::Result<()> {
|
||||
let second = Duration::from_secs(1);
|
||||
let mut to_sleep: u64 = job.json().unwrap().unwrap();
|
||||
while to_sleep > 0 {
|
||||
println!("job#{} {to_sleep} more seconds to sleep ...", job.id());
|
||||
time::sleep(second).await;
|
||||
to_sleep -= 1;
|
||||
}
|
||||
job.complete().await
|
||||
}
|
Loading…
Reference in a new issue