通用的消息通知服务,主要解决公司平台服务中发通知问题,通过订阅RabbitMq消息(也提供Api访问)实现高内聚低耦合,其他服务只需要向RabbitMq丢消息即可,具体设计如下:
1、采用Mongo配置如下集合:消息模板、数据Providers、全局变量、邮件Layout、发送器Senders、发送日志
2、订阅到消息后通过唯一的模板编号找到模板信息,模板中有获取ModelProvider、收件人/抄送人Provider、推送方式等
3、支持消息体自带发送人抄送人等,支持邮件携带附件功能等
4、 各Provider负责返回模板所需的各种数据(支持Dapr调用和Sql),主要有2类:获取模板数据 及 获取收件人
5、模板渲染采用 Razor+RazorEngine 实现,渲染好之后通过 反射+缓存 找到对应Sender进行发送(邮件/短信/App/Webhook/Wechat);寻找Sender这里采用了策略模式的思想。
6、发送完之后记录发送日志,日志结构及内容完全支持重试机制
7、 基于以上消息服务,扩展了一个通用的后台定时发通知的功能,需求来源为:每个租户都有根据一定条件冻结用户功能并发提醒;采用Hangfire作为定时任务框架,只需要配置好job的数据扫描范围,触发条件及满足条件时要发送的消息模板和执行动作即可。