问题域/PD-187

异步消息队列

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 函数防止监听器泄漏