Documentation Index
Fetch the complete documentation index at: https://tech.illasoft.com/llms.txt
Use this file to discover all available pages before exploring further.
概述
kira-queue 是一个轻量 PGMQ worker,消费 Supabase Postgres 的 pgmq_public.* 队列,执行异步邮件发送和账户删除工作。单文件 176 行(kira-queue/index.ts),三条 worker 并发运行。
部署形态
| 项 | 值 |
|---|---|
| 平台 | Fly.io,单机 |
| 入口 | bun run dev |
| 无对外端口(纯后台 worker) | |
| 观测 | Better Stack heartbeat |
订阅的队列
| 队列 | 消息格式 | 处理动作 |
|---|---|---|
pgmq_public.daily_email | { userId } | POST {API_URL}/mail/daily |
pgmq_public.account_deletion | { userId } | read → DELETE /user?password=...&userId=... → POST /mail/account-deletion → archive |
pgmq_public.account_deletion_reminder | { userId } | pop → POST /mail/account-deletion |
- 轮询频率:30 秒
- Daily + Reminder 用
pgmq.pop(at-most-once) - Account Deletion 用
pgmq.read+ 成功后显式pgmq.archive(at-least-once,避免因 /user DELETE 失败丢消息)
环境变量
端到端流程:账户删除
/support/cancel-delete-account,它会 pgmq.delete 对应两条消息,并发送 cancelled 邮件。
代码结构
Promise.all([dailyMailQueue(), accountDeletionQueue(), accountDeletionReminderQueue()]) 并发启动。任一抛出未捕获错误会导致整个进程退出(Fly 会重启)。
Caveat
硬编码密码
DELETE /user 的 password 在 kira-queue/index.ts:56 硬编码为 xK9mP2vL7nQ4wR8s。kira-be 侧也是相同的硬编码比对。建议后续改为环境变量,两端同步替换。
单机运行约束
account_deletion 使用 pgmq.read(非 exclusive),如果部署多实例可能同时拉到同一条消息 → 双重删除。Fly.io 配置固定为单机(min_machines_running = 1,不能扩 replicas)。
失败重试
HTTP 调用 kira-be 失败时,pgmq.read 的消息没有 archive,默认 visibility timeout 后会被重新取出。如果 kira-be 持续不可用,消息会累积。