1、背景 平台内的原消息通知服务有以下 2 个弊端:第一,配置非常麻烦,需要配置五六张 MySql 表,并且关系 错综复杂;第二,设计思路及架构老旧,维护费劲,日志信息也比较欠缺,出错之后不易定位问题。为了解决以 上问题,决定重新开发一套简单高效且可扩展的消息通知架构。 2、设计 消息通知的本质是:把消息组装好,通过一定的发送渠道,发送到指定的终端,并记录发送日志。 基于此抽象出以下模型:消息模板、数据 Provider、发送器、全局变量、发送日志、布局页。采用订阅 RabbitMQ 消息实现逻辑解耦,以 MongoDB 作为存储。每条消息包含一个模板编号,根据编号得到消息的各组件:模板内容、 模板数据、发送通道、发送人、抄送人等。在收到消息后,需要对其进行一系列的合规校验,如模板是否存在、收 件人是否存在及合法、附件大小是否超限等,这里采用了责任链模式实现。消息渲染使用 RazorEngine 组件,获 取发送器对象采用了简单工厂模式 + 反射 + 缓存 实现(目前支持:邮件、短信、极光推送、微信、Webhook、 站内消息,并易于扩展),具体发送器依赖一个消息对象,而整个构建消息对