use std::time::Duration;
use ruststream::runtime::{AppInfo, HandlerResult, RustStream};
use ruststream::subscriber;
use ruststream_fred::{RedisBroker, RedisList};
use serde::Deserialize;
#[derive(Debug, Deserialize)]
struct Job {
id: u64,
}
#[subscriber(RedisList::new("jobs"))]
async fn run_job(job: &Job) -> HandlerResult {
println!("running job {}", job.id);
HandlerResult::Ack
}
#[subscriber(RedisList::new("jobs.reliable").reliable())]
async fn run_reliable_job(job: &Job) -> HandlerResult {
println!("running reliable job {}", job.id);
HandlerResult::Ack
}
#[subscriber(
RedisList::new("jobs.recoverable")
.reliable()
.min_idle(Duration::from_secs(30))
.recovery_zset("jobs.recoverable.inflight")
)]
async fn run_recoverable_job(job: &Job) -> HandlerResult {
println!("running recoverable job {}", job.id);
HandlerResult::Ack
}
#[ruststream::app]
fn app() -> RustStream {
RustStream::new(AppInfo::new("jobs", "0.1.0")).with_broker(
RedisBroker::standalone("redis://localhost:6379"),
|b| {
b.include(run_job);
b.include(run_reliable_job);
b.include(run_recoverable_job);
},
)
}