use amiquip::{Connection, ConsumerMessage, ConsumerOptions, QueueDeclareOptions, Result};
use std::thread;
use std::time::Duration;
const TASK_QUEUE: &str = "task_queue";
fn main() -> Result<()> {
env_logger::init();
let mut connection = Connection::insecure_open("amqp://guest:guest@localhost:5672")?;
let channel = connection.open_channel(None)?;
let queue = channel.queue_declare(
TASK_QUEUE,
QueueDeclareOptions {
durable: true,
..QueueDeclareOptions::default()
},
)?;
channel.qos(0, 1, false)?;
let consumer = queue.consume(ConsumerOptions::default())?;
println!("Waiting for messages. Press Ctrl-C to exit.");
for (i, message) in consumer.receiver().iter().enumerate() {
match message {
ConsumerMessage::Delivery(delivery) => {
let body = String::from_utf8_lossy(&delivery.body);
println!("({:>3}) Received [{}]", i, body);
#[allow(clippy::clippy::naive_bytecount)]
let dits = delivery.body.iter().filter(|&&b| b == b'.').count();
thread::sleep(Duration::from_secs(dits as u64));
println!("({:>3}) ... done sleeping", i);
consumer.ack(delivery)?;
}
other => {
println!("Consumer ended: {:?}", other);
break;
}
}
}
connection.close()
}