use robustmq::mq9::{MQ9Client, Priority};
use tokio::time::{sleep, Duration};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = MQ9Client::connect("nats://localhost:4222").await?;
println!("[rust] connected");
let mailbox = client.create(60, false, "", "").await?;
println!("[rust] private mailbox: {}", mailbox.mail_id);
client.send(&mailbox.mail_id, b"urgent task", Priority::High).await?;
client.send(&mailbox.mail_id, b"normal task", Priority::Normal).await?;
client.send(&mailbox.mail_id, b"background task", Priority::Low).await?;
println!("[rust] sent 3 messages (high / normal / low)");
let _sub = client
.subscribe(
&mailbox.mail_id,
|msg| async move {
println!(
"[rust] received [{}] {}",
msg.priority,
String::from_utf8_lossy(&msg.payload)
);
},
None,
"",
)
.await?;
sleep(Duration::from_millis(500)).await;
let metas = client.list(&mailbox.mail_id).await?;
println!("[rust] list: {} message(s) in mailbox", metas.len());
for m in &metas {
println!(" msg_id={} priority={} ts={}", m.msg_id, m.priority, m.ts);
}
if let Some(first) = metas.first() {
client.delete(&mailbox.mail_id, &first.msg_id).await?;
println!("[rust] deleted {}", first.msg_id);
}
let pub_box = client.create(60, true, "demo.queue", "Demo queue").await?;
println!("[rust] public mailbox: {}", pub_box.mail_id);
client.close().await?;
println!("[rust] done");
Ok(())
}