最近重构公司消息服务的架构设计
目标
研发一套独立的消息系统,此系统进行集中配置管理供各业务系统使用,用于支撑站内信、短信通知、短信验证码、邮件、微信消息、APP消息、IM等消息形式。
架构
1) 基于消息队列采用发布、订阅模式。消息的生产者为对外的消息接口,接收业务系统消息后将消息写入到消息队列指定的topic,订阅者对消息进行处理并行的发送消息。
2) 所有通知消息定义唯一“消息ID”来标识消息类型。
3) 通知消息由各消息模块(短信、邮件、站内信、微信、APP)自己负责本消息的发送,去读取消息节点配置信息,根据当前的消息ID判断自己是否需要发送消息,是则发送否则丢弃。
4) 消息体,消息体采用JSON报文格式,方便各系统之间对接。
消息数据定义
{
msghead:
{
msgtype:””,
msgid:””,
rcvuid:””,
rcvcid:””,
rcvmobile:””,
rcvemail:””,
time:””,
system:””
}
,
msgbody:
{
text:””,
noticemsg:””,
wxmsg:””,
appmsg:””,
immsg:””,
smsmsg:[{},{}]
}
}
字段 |
说明 |
值 |
msghead |
消息头 |
|
Msgtype |
消息类型 |
消息类型:notice/sms/email/im/wx |
Msgid |
消息id |
定义全局唯一 |
Rcvuid |
接收帐号id |
|
Rcvcid |
接收公司id |
|
Rcvmobile |
接收手机号 |
|
Rcvemail |
接收邮箱 |
|
Time |
发送时间 |
|
System |
发送系统模块 |
云仓 |
Msgbody |
消息体 |
|
Text |
文本消息内容 |
|
Noticemsg |
站内信消息内容 |
|
Wxmsg |
微信消息内容 |
|
Appmsg |
APP消息内容 |
|
Immsg |
IM消息内容 |
|
Smsmsg |
短信消息内容 |
标签->值数组,供短信模板使用 |
项目结构
消息接口API(msg_api)
1) 负责接收业务系统发送消息请求,将消息写到消息队列中;
2) 提供接口供业务系统查询,如查询用户的站内信消息列表、查询验证码是否正确等;
3) 提供数据接口供管理平台使用,如配置信息发送结点;
短信处理程序(msg_handle_sms)
1) 负责订阅消息,读取消息进行短信发送;
2) 负责验证码的生成处理;
3) 数据操作调用消息接口API;
4) 通知消息需要读取配置信息决定当前消息发送或丢弃;
邮件处理程序(msg_handle_email)
1) 负责订阅消息,读取消息进行邮件发送;
2) 数据操作调用消息接口API;
3) 通知消息需要读取配置信息决定当前消息发送或丢弃;
站内信处理程序(msg_handle_notice)
1) 负责订阅消息,读取消息进行通知;
2) 通知消息需要读取配置信息决定当前消息发送或丢弃;
3) 数据操作调用消息接口API;
数据库
1) 使用一个消息数据库;
2) 数据库表分为短信模块、站内信模块、IM模块(暂不做)、通知信息配置模块;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?