# actr-mailbox
๐๏ธ **Actor-RTC ๆไน
ๅ้ฎ็ฎฑๅฑ**
`actr-mailbox` ๆไพ Actor-RTC ๆกๆถ็ๆถๆฏๆไน
ๅๅ่ฝ๏ผๅบไบ SQLite ๅฎ็ฐ๏ผ็กฎไฟๆถๆฏ็ๅฏ้ ๅญๅจๅๆฃ็ดขใ
## ๐ฆ ๅ่ฝ็นๆง
- **ๆถๆฏๆไน
ๅ**: ๅฏ้ ็ๆถๆฏ้ๅๅ้ฎ็ฎฑๅญๅจ๏ผๅบไบ SQLiteใ
- **ไผๅ
็บง้ๅ**: ๆฏๆ้ซใๆฎ้ไธค็งไผๅ
็บง็ๆถๆฏใ
- **ACID ไฟ่ฏ**: ๅฉ็จ SQLite ไบๅก็กฎไฟๆถๆฏๆไฝ็ๅๅญๆงใ
## ๐ ๅฟซ้ๅผๅง
ๅจ `Cargo.toml` ไธญๆทปๅ ไพ่ต๏ผ
```toml
[dependencies]
actr-mailbox = { path = "path/to/actr-mailbox" }
```
### ๅบๆฌไฝฟ็จ
```rust,no_run
use actr_mailbox::prelude::*;
use std::time::Duration;
async fn message_processor(mailbox: impl Mailbox) {
loop {
// 1. ไป้ๅไธญ่ทๅไธๆนๆถๆฏ
// ๆญคๆไฝไผ่ชๅจๅค็ไผๅ
็บง๏ผๅนถๅฐๆถๆฏๆ ่ฎฐไธบโๅค็ไธญโ
match mailbox.dequeue().await {
Ok(messages) => {
if messages.is_empty() {
tokio::time::sleep(Duration::from_secs(1)).await;
continue;
}
println!("ๅค็ {} ๆกๆถๆฏ...", messages.len());
for msg in messages {
// 2. ๅจ่ฟ้ๆง่กไฝ ็ไธๅก้ป่พ
// ไพๅฆ: process_data(msg.payload).await;
// 3. ๆๅๅค็ๅ๏ผ็กฎ่ฎคๆถๆฏ๏ผๅฐๅ
ถไป้ๅๆฐธไน
ๅ ้ค
if let Err(e) = mailbox.ack(msg.id).await {
eprintln!("ๆถๆฏ {} ็กฎ่ฎคๅคฑ่ดฅ: {}", msg.id, e);
}
}
}
Err(e) => {
eprintln!("ไป้ๅๆๅๆถๆฏๅคฑ่ดฅ: {}", e);
tokio::time::sleep(Duration::from_secs(5)).await;
}
}
}
}
```
## ๐๏ธ ๆถๆๅฑๆฌก
```text
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ actr-core โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ actr-sdk โ actr-mailbox โ actr-runtimeโ (ๆญคๅฑ)
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ actr-protocol โ actr-version โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ actr-types โ actr-uri โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
```
## ๐ ่ฎธๅฏ่ฏ
MIT License