← 返回生产场景

🔔 消息通知

短信 / 邮件 / 推送 / 站内信 / 模板 / 到达率

📨通知系统架构核心
通知类型多(短信/邮件/APP推送/站内信),渠道多(阿里云/腾讯云/极光),不能每种写一套逻辑。
通知渠道场景成本延迟
短信验证码、订单通知、告警高(3~5分/条)秒级
邮件报表、账单、注册激活分钟级
APP推送订单状态变更、活动通知秒级
站内信系统公告、互动消息免费实时
// 统一通知服务(策略模式) public interface NotifyChannel { boolean send(String to, String content); } public class SmsChannel implements NotifyChannel { ... } // 阿里云短信 public class EmailChannel implements NotifyChannel { ... } // JavaMailSender public class PushChannel implements NotifyChannel { ... } // 极光/个推 public class NotifyService { private Map<String, NotifyChannel> channels; // 渠道注册 public void notify(NotifyRequest req) { for (String channelType : req.getChannels()) { channels.get(channelType).send(req.getTo(), req.getContent()); } } }
异步发送 + 重试生产
通知不能阻塞主流程(下单时发短信不能让用户等短信发完)。异步 + 失败重试。
// 异步:通过 MQ 解耦 // 下单时只发一条消息到MQ,消费者慢慢发通知 rabbitTemplate.convertAndSend("notify.queue", req); // 消费者:发通知 + 失败重试 @RabbitListener(queues = "notify.queue") public void handle(NotifyRequest req) { try { notifyService.notify(req); } catch (Exception e) { log.error("通知发送失败,将重试", e); throw e; // 抛出 → MQ重试3次 → 仍失败进死信队列 } }
到达率优化:① 短信用多渠道切换(阿里云发不了切腾讯云)② 限频防刷(60秒内只发1次)③ 敏感词过滤 ④ 降级(短信挂了转站内信)。
生产场景 · 消息通知 · 全栈资料库