Skip to main content

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.

概述

PGMQ(Postgres Message Queue)是 kira-be 与 kira-queue 之间的异步通信通道,用于邮件发送和账户删除工作流。详细的消费端实现见 Kira Queue

技术栈

组件技术
运行时Bun
队列pgmq (PostgreSQL)
部署Fly.io

架构

三个队列

队列消息格式发送端消费动作
pgmq_public.daily_email{ userId }src/ai/libs/billing.ts:155-177(free 用户 credit < 15 时)POST /mail/daily
pgmq_public.account_deletion{ userId }POST /support/delete-account (sleep=30d)readDELETE /userPOST /mail/account-deletionarchive
pgmq_public.account_deletion_reminder{ userId }POST /support/delete-account (sleep=27d)popPOST /mail/account-deletion (reminder)

发送时机

Daily Emailsrc/ai/libs/billing.ts:155-177):
if (userPlan === "free" && data.credit < 15 && notificationEnabled) {
  supabase.schema("pgmq_public").rpc("send", {
    queue_name: "daily_email",
    message: { userId },
    sleep_seconds: 0,
  });
}
Account Deletion 两条并发(src/hono/support/index.ts):
await Promise.all([
  supabase.schema("pgmq_public").rpc("send", {
    queue_name: "account_deletion",
    message: { userId },
    sleep_seconds: 30 * 86400,
  }),
  supabase.schema("pgmq_public").rpc("send", {
    queue_name: "account_deletion_reminder",
    message: { userId },
    sleep_seconds: 27 * 86400,
  }),
]);
取消删除时通过 pgmq_public.delete RPC 撤回这两条消息。

消费端

详细见 Kira Queue 服务文档
  • 轮询频率:30 秒
  • account_deletionread + 显式 archive(at-least-once,避免 DELETE /user 失败丢消息)
  • daily_email / account_deletion_reminderpop(at-most-once)

相关 API

  • POST /mail/daily — 免费用户每日邮件
  • POST /mail/account-deletion — 账户删除各阶段邮件(scheduled / reminder / deleted / cancelled)
  • POST /support/delete-account — 发起删除
  • POST /support/cancel-delete-account — 取消删除