最近重构公司消息服务的架构设计
目标
研发一套独立的消息系统,此系统进行集中配置管理供各业务系统使用,用于支撑站内信、短信通知、短信验证码、邮件、微信消息、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模块(暂不做)、通知信息配置模块;