kmailbox 0.1.3

A simple kafka mailbox
Documentation
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);
}