mirror of
https://github.com/Diggsey/sqlxmq.git
synced 2024-06-12 18:19:23 +00:00
Not working signal-shutdown
example
This commit is contained in:
parent
1aff20c3e5
commit
7a4dcd9792
|
@ -35,3 +35,5 @@ 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"] }
|
||||
|
|
49
examples/signal-shutdown.rs
Normal file
49
examples/signal-shutdown.rs
Normal file
|
@ -0,0 +1,49 @@
|
|||
#[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(&10)?.spawn(&db).await?;
|
||||
|
||||
let handle = sqlxmq::JobRegistry::new(&[sleep]).runner(&db).run().await?;
|
||||
|
||||
println!("Press Ctrl+C to send a stop signal");
|
||||
wait_signal()?;
|
||||
println!("Got a stop signal, waiting for jobs to finish ...");
|
||||
|
||||
// this would just instantly kill the job
|
||||
// handle.stop().await;
|
||||
|
||||
// this waits for the job to finish, but hangs forever afterwards
|
||||
handle.into_inner().await?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn wait_signal() -> std::io::Result<()> {
|
||||
use signal_hook::consts::signal::*;
|
||||
use signal_hook::iterator::Signals;
|
||||
|
||||
let mut signals = Signals::new(&[SIGTERM, SIGINT, SIGQUIT])?;
|
||||
let handle = signals.handle();
|
||||
for signal in signals.forever() {
|
||||
match signal {
|
||||
SIGTERM | SIGINT | SIGQUIT => break,
|
||||
_ => (),
|
||||
}
|
||||
}
|
||||
handle.close();
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[sqlxmq::job]
|
||||
pub async fn sleep(mut job: sqlxmq::CurrentJob) -> sqlx::Result<()> {
|
||||
let second = std::time::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());
|
||||
tokio::time::sleep(second).await;
|
||||
to_sleep -= 1;
|
||||
}
|
||||
job.complete().await
|
||||
}
|
Loading…
Reference in a new issue