用途:Honker 为 SQLite 提供 Postgres NOTIFY/LISTEN 风格的消息能力,适用于已有 SQLite 且不想额外引入 Postgres 或 Redis 做消息的场景。它提供三大原语:Notify(临时发布订阅,不重放)、Stream(持久事件日志,按消费者记录偏移)、Queue(至少一次投递的任务队列,支持重试、优先级、延迟任务和死信)。还提供事务性发件箱、命名锁、限流、结果存储与 TTL、周期性任务与选主调度。
主要能力:基于 WAL 的 stat(2) 轮询(约 1ms 粒度)触发唤醒,典型唤醒延迟 1-5ms;claim 使用索引 UPDATE ... RETURNING,ack 使用 DELETE;jobs、events、notifications 与业务写入在同一事务内原子提交或回滚。Queue 的 visibility 默认 300s,重试耗尽进入 _honker_dead;Stream 为至少一次语义,每 1000 事件或 1 秒自动保存偏移,可配置。
安装:Python 用 pip install honker;Node.js 用 npm install @russellthehippo/honker-node;Rust 在 Cargo.toml 添加 honker = "0.x";Go、Ruby、Bun、Elixir 也有绑定。通用方式:.load ./libhonker_ext 后执行 SELECT honker_bootstrap();,任意 SQLite 3.9+ 客户端均可加载。Worker 可用 python -m honker worker myapp.tasks:db --queue=emails --concurrency=4 启动。
使用方式:Python 中通过 db.queue("emails").enqueue(...) 与 claim("worker-1") 处理任务,job.ack() 或 job.retry(delay_s=60, error=...);db.stream("user-events").publish/subscribe 实现事件流;db.listen 监听通知;@emails.task 与 @emails.periodic_task(crontab(...)) 声明任务;db.lock_acquire/lock_release 命名锁;db.rate_limit_try 限流。Go 直接调用 SQL 函数如 honker_claim_batch、honker_stream_publish、honker_scheduler_tick 等。
限制:必须开启 PRAGMA journal_mode = WAL;SQLite 单写多读,不支持多机复制;唤醒延迟典型 1-5ms,非亚毫秒;所有订阅者会在任意提交时被唤醒,过滤在 SELECT 阶段完成;不支持工作流 DAG,如需要请用 Temporal;已使用 Postgres 时应改用 pg-messaging。以上信息依据资料整理,收费、价格、平台支持范围等未提供。