actr-runtime-mailbox 0.3.1

Persistent mailbox layer for the Actor-RTC framework, backed by SQLite.
Documentation

Actor-RTC Mailbox Layer

Persistent mailbox layer for the Actor-RTC framework, backed by SQLite.

Core Features

  • Message Persistence: Reliable message queue and mailbox storage
  • Dead Letter Queue: Poison message isolation and manual intervention

Quick Start

use actr_runtime_mailbox::prelude::*;
use actr_protocol::{ActrId, Realm, ActrType};
use actr_protocol::prost::Message as ProstMessage;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Create SQLite mailbox storage
    let mailbox = SqliteMailbox::new("./data/mailbox.db").await?;

    // Create sender ActrId and serialize
    let sender = ActrId {
        realm: Realm { realm_id: 1 },
        serial_number: 1000,
        r#type: ActrType {
            manufacturer: "example".to_string(),
            name: "TestActor".to_string(),
            version: "1.0.0".to_string(),
        },
    };
    let mut from_bytes = Vec::new();
    sender.encode(&mut from_bytes)?;

    let message = b"Hello, World!".to_vec();

    // Enqueue message (from is the sender's ActrId as Protobuf bytes)
    let message_id = mailbox.enqueue(from_bytes, message, MessagePriority::Normal).await?;

    // Dequeue messages
    let messages = mailbox.dequeue().await?;
    println!("Retrieved {} messages", messages.len());

    // Acknowledge message
    if let Some(msg) = messages.first() {
        mailbox.ack(msg.id).await?;
    }

    Ok(())
}