use std::time::Duration;
use flashq::FlashQ;
#[tokio::main]
async fn main() -> flashq::Result<()> {
let client = FlashQ::new();
client.connect().await?;
client.set_rate_limit("rate-demo", 5).await?;
println!("Set rate limit: 5 jobs/sec on 'rate-demo'");
for i in 0..10 {
client
.push("rate-demo", serde_json::json!({"index": i}), None)
.await?;
}
println!("Pushed 10 jobs");
let start = std::time::Instant::now();
let mut pulled = 0;
for _ in 0..10 {
if let Some(job) = client
.pull("rate-demo", Some(Duration::from_secs(5)))
.await?
{
client.ack(job.id, None).await?;
pulled += 1;
}
}
let elapsed = start.elapsed();
println!(
"Pulled {pulled} jobs in {:.1}s (rate limited)",
elapsed.as_secs_f64()
);
client.clear_rate_limit("rate-demo").await?;
println!("Rate limit cleared");
client.close().await?;
Ok(())
}