Files
todo-vibe-coding/doc/notify.md

1.7 KiB
Raw Permalink Blame History

数据流

业务触发 业务系统(如任务到期、任务创建、状态变更)先产生日志化业务事件。 事件带基础字段event_id、event_type、user_id、occurred_at、payload。

通知规则判断 规则引擎判断这条事件是否需要通知、通知谁、用什么模板。 同时做用户偏好过滤(是否订阅、免打扰时段、语言、时区)。

调度器编排 立即通知:直接进入投递流程。 定时通知:调度器按 cron/延时规则在目标时间生成通知任务。 这一层负责时区换算与批量窗口控制(避免瞬时洪峰)。

写入 MQ 通知任务由生产者写入 MQ如 notification.jobs。 任务包含job_id、channel=email、to、template_id、params、trace_id、retry_count 等。

消费者处理 Worker 从 MQ 拉取任务先做幂等检查idempotency_key。 如果判定“已发送过”,直接 ACK 丢弃重复任务。 否则进入渠道网关Email Adapter

渠道网关发送Email 网关将模板渲染后的邮件通过 SMTP/邮件服务商发出。 返回成功或失败结果,并带错误码。

可靠性机制 成功:记录 sent 状态并 ACK MQ。 可重试失败(超时、限流、临时网络故障):写入重试队列,按指数退避再次投递。 不可重试失败(地址非法、模板错误)或超最大重试:进入 DLQ 死信队列,等待人工/自动补偿。

状态回写与观测 每次处理都会回写通知状态pending/sent/failed/dead到存储层。 同时上报指标和日志:送达率、重试次数、端到端延迟、失败原因分布。 告警系统基于阈值触发报警(如失败率突增、队列堆积)。