use kmailbox::{ReadState, RetryState, SendMail};
#[tokio::main]
async fn main() {
let name = "test-msg";
let build = kmailbox::Builder::new(&["192.168.102.8:9092"]);
let mb = build.shared_mailbox(name, 1);
if let Err(e) = mb {
println!("shared_mailbox: {e:?}");
return;
}
let mb = mb.unwrap();
println!("create: {:?}", mb.create().await);
let writer = build.writer().unwrap();
writer
.write(name, SendMail::new().payload("this is a test"))
.await
.unwrap();
let reader = build.shared_reader(name).unwrap();
let _ = reader
.read(|mail| async move { (ReadState::Fail, mail) })
.await;
loop {
tokio::select! {
_ = reader.retry(|mail| async move {
for _ in 0..1 {
println!("retry mail: {:?}", mail);
tokio::time::sleep(std::time::Duration::from_secs(3)).await;
}
(RetryState::DeadLetter, mail)
}) => {
},
_ = tokio::time::sleep(std::time::Duration::from_secs(15)) => {
break;
}
}
}
println!("delete: {:?}", mb.delete().await);
}