用途
rust-actor 是一份关于 Rust 语言中 Actor 模型实践的技能参考文档,覆盖消息传递、状态隔离、监督树、死锁预防、容错、Actix 框架以及 Erlang 风格的设计思路。它面向需要在 Rust 中构建高并发、可容错服务的开发者,提供可复用的代码范式与实现检查清单。
主要能力
文档以「解决方案模式」(Solution Patterns)组织内容,给出以下具体模式:
- 基础 Actor 实现:定义
Actortrait(关联Message与Error类型)、Context(包含 mailbox、sender、state、supervisor)、ActorState枚举(Starting、Running、Restarting、Stopping、Stopped)以及Addr地址句柄,并给出 CounterActor 示例。 - 请求-响应模式:使用
tokio::sync::oneshot配合超时实现同步请求,包含Request结构体、request异步函数(含 SendFailed、Timeout、Canceled 错误类型)与调用示例。 - 监督树(Supervision Tree):定义
SupervisionStrategy(OneForOne、AllForOne、RestForOne)、Supervisor、Child、ChildSpec、RestartStrategy(Permanent、Temporary、Transient),并实现子进程报错处理、重启限流(max_restarts、window)与停止逻辑。 - 有界邮箱与死锁预防:
BoundedMailbox封装mpsc::channel(capacity),提供带背压的send_with_backpressure与立即返回的try_send。 - Actor 生命周期管理:
LifecycleHandlertrait 提供 pre_start、post_start、pre_restart、post_restart、post_stop 钩子,并以 DatabaseActor 演示连接资源的建立、关闭与清理。
文档还包含 Actor vs 线程模型 的对比表(状态共享、死锁风险、可扩展性、故障处理、调试、内存六个维度),以及 Actix 框架示例(实现 Actor、Handler、Message 与 #[rtype(result = "usize")])。
使用方式
文档以工作流形式给出实现步骤:
- Step 1:设计 Actor 层级 —— 明确哪些状态需要隔离(每个隔离状态对应 1 个 actor)、哪些操作需要顺序处理(归入同一 actor)、哪些可独立失败(拆分并用监督)、哪些需要扩展(使用 actor 池)。
- Step 2:选择消息模式 —— 即发即忘(异步发送、无响应)、请求-响应(oneshot 通道回复)、流式(多响应通道)、广播(多接收者)。
- Step 3:设置监督 —— 选择监督策略(OneForOne 为默认、AllForOne 用于紧耦合、RestForOne 用于顺序依赖)与重启策略(Permanent、Temporary、Transient)。
文档提供验证命令示例:cargo test --test actor_tests、cargo test --test deadlock_tests -- --test-threads=1 --nocapture、cargo bench --bench actor_bench、cargo run --release --bin load_test、RUST_LOG=debug cargo run。
适用场景
- 需要状态隔离、避免共享可变状态与锁竞争的并发系统。
- 需要监督树与自动重启实现容错的长期运行服务。
- 请求-响应、流式、广播等异步消息通信场景。
- 使用 Actix 框架进行 Actor 风格开发的项目。
限制与注意事项
文档列出了实现检查清单与常见陷阱。检查清单要求:每个 actor 职责单一、邮箱有界、消息类型为 Send + 'static、actor 间无共享可变状态、监督策略与错误处理匹配、生命周期在 post_stop 中清理、无循环消息依赖、请求-响应带超时、监控邮箱大小与消息延迟、满邮箱时处理背压。常见陷阱包括:循环消息依赖导致死锁(应使用超时并避免循环依赖)、无界邮箱导致内存无限增长(应使用有界通道与背压)、Actor 内阻塞操作导致无响应(应使用异步 I/O 或 spawn 阻塞任务)。
文档提到中文版本参考 SKILL_ZH.md,并列出相关技能:rust-concurrency、rust-async、rust-error、rust-channel、rust-performance。关于收费、价格、支持平台与授权方式,资料中暂未提供。