Java面试要点:短信、邮件、站内信、App Push与多渠道降级
前言
通知推送广泛存在于支付成功、审批提醒、告警通知、营销触达、系统消息等场景。面试常问:
- 短信发送失败怎么办。
- 多渠道推送怎么设计。
- 模板参数怎么管理。
- 重复通知怎么防。
- 如何统计送达率。
通知链路
flowchart TD
A[业务事件] --> B[通知中心]
B --> C[模板渲染]
C --> D{选择渠道}
D --> E[短信]
D --> F[邮件]
D --> G[站内信]
D --> H[App Push]
E --> I[发送结果记录]
通知中心设计
通知中心建议独立出来,避免每个业务系统直接对接短信和邮件供应商。
核心能力:
- 模板管理。
- 渠道管理。
- 发送记录。
- 失败重试。
- 限流。
- 黑名单。
- 触达统计。
同步还是异步
同步发送
适合验证码等强实时场景。
缺点是依赖第三方响应。
异步发送
适合订单通知、审批提醒、营销消息。
优点:
- 不阻塞业务主链路。
- 可重试、可削峰。
常见做法:
- 业务系统发通知事件到 MQ。
- 通知中心消费并发送。
多渠道降级
例如短信供应商 A 失败,可以切到供应商 B;App Push 失败可以补站内信。
降级要点:
- 配置渠道优先级。
- 记录失败原因。
- 控制重试次数。
- 避免重复触达。
模板管理
模板应支持:
- 模板编码。
- 模板内容。
- 参数列表。
- 渠道差异。
- 审核状态。
- 版本管理。
示例:
1 | 订单 {orderNo} 已支付成功,金额 {amount} 元。 |
幂等和频控
通知重复会影响用户体验,甚至产生资费浪费。
常见幂等键:
1 | biz_type + biz_no + channel + receiver |
频控维度:
- 用户。
- 手机号。
- IP。
- 模板。
- 渠道。
高频面试题
为什么通知要独立成中心?
为了统一模板、渠道、限流、重试和统计,避免业务系统重复对接供应商。
短信失败怎么办?
可以重试、切换供应商、降级为其他渠道,并记录失败原因。
通知重复怎么防?
用业务唯一键做幂等,同时限制发送频率。
验证码和普通通知有什么区别?
验证码实时性更强,通常同步或准同步;普通通知更适合异步。
总结
通知推送系统的重点是统一接入、多渠道、模板化、可重试、可降级、可统计。企业落地时要把通知从业务主链路中解耦出来,同时保证重要通知有补偿能力。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Junly博客!
评论


