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

36 lines
1.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 数据流
业务触发
业务系统(如任务到期、任务创建、状态变更)先产生日志化业务事件。
事件带基础字段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到存储层。
同时上报指标和日志:送达率、重试次数、端到端延迟、失败原因分布。
告警系统基于阈值触发报警(如失败率突增、队列堆积)。