异步消息队列
Async Message Queue
基于 EventEmitter 和 SQLite 持久化的异步消息队列,支持原子认领、空闲超时和自愈机制
子问题
1.原子 claim-confirm 防重复处理
2.SQLite 持久化待处理消息
3.空闲超时自动终止子进程
4.stale 消息自愈恢复
5.进程池并发限制与 slot 等待机制
6.会话级批量失败标记与孤儿消息清理
7.多信号源(message/abort/timeout)组合等待的内存泄漏防护
各项目的解法1 solutions
Signals
横向对比
| 维度 | claude-mem |
|---|---|
| 队列存储 | SQLite pending_messages 表,4 态状态机 |
| 消费模式 | AsyncIterableIterator + EventEmitter 非轮询 |
| 防重复机制 | SQLite 事务内原子 claim-confirm |
| 自愈策略 | claim 路径内置 60s stale 检测自动重置 |
| 空闲回收 | 3 分钟无消息 → AbortController → SIGKILL 升级 |
| 重试机制 | retry_count 计数,3 次后标记 failed |
| 进程管理 | PID 注册表 + 5 分钟孤儿收割定时器 |
最佳实践
1.使用 AsyncIterableIterator 模式消费队列,结合 EventEmitter 实现非轮询等待
2.confirm 用 DELETE 而非状态标记,避免表膨胀
3.自愈逻辑内置于 claim 路径而非外部定时器,减少组件耦合
4.waitForMessage 三信号共享 cleanup 函数防止监听器泄漏