目录
1 1. 文档介绍.... 4
1.1 文档目的... 4
1.2 文档范围... 4
1.3 读者对象... 4
1.4 参考文献... 4
1.5 术语与缩写解释... 4
2 系统概述.... 5
3 设计约束.... 6
4 设计策略.... 7
5 系统总体结构.... 8
6 子系统N的结构与功能.... 9
7 开发环境的配置.... 10
8 运行环境的配置.... 11
9 测试环境的配置.... 12
10 其它.... 13
消息中心接收别的系统发送的消息,再基于一定的规则以邮件、短信、消息等方式推送消息到pc端和手机端,比如对于attendance迟到、早退、tour超时提醒等需要及时推送相应的信息给相关人员,中心对规则、用户、消息进行管理。为此,根据“先进实用、稳定可靠”的原则设计本消息中心。
消息的接收、发送、保存,对应用用户的管理。
开发人员
缩写、术语 |
解 释 |
QoS level |
Quality of Service level |
SD |
系统设计,System Design |
|
|
|
|
… |
|
系统主要完成消息的接收、发送和保存,再基于一定的规则以邮件、短信、消息等方式推送消息到pc端或手机,以及对用户、规则、消息进行管理。系统接收来自别的系统应用用户的消息,然后基于一定的规则把消息进行推送。
1.系统必须遵循国家软件开发的标准。
2.系统用java开发,服务器中间件为tomcat。
3.系统必须稳定可靠,性能高,满足每天40-500万次的推送量。
4.保证消息的成功送达,如果不成功就重发。
1. 系统高可用、高性能、易扩展,安全稳定,实用可靠,满足用户的需要。
2. 系统可以进行扩展,增加推送的消息种类,增加消息推送的规则。
3. 系统可以复用于别的系统的消息推送。
1.逻辑架构
系统采用接口用rocketMQ实现应用用户的消息接收,用drools依据一定的规则进行消息转发,发送邮件、短信、消息到pc端和手机端,消息发送后用rocketMQ发送结果消息给应用用户。用户管理发送规则,对不同的消息、发送的方式、发送的时间、接收者进行设置,以后消息中心按照这些规则发送消息。规则处理采用drools完成。
系统采用MQTT服务器 mosquito实现消息对手机端的推送,采用winsocket发送消息给pc端。MQTT通过发布/订阅方式发送消息给手机,方式为发布/订阅,为了实现点对点发送,需要在发送的消息里加上手机端的imei和用户名,同时在手机端进行判断,如果imei和用户名符合则接收此消息。采用winsocket实现推送消息到pc端,为实现点对点的推送,可以在消息中加上要发送的pc端的用户名,pc端对消息的用户名进行判断,如果和自己的一样则接收消息。对于群发,大家都可以收到。
应用用户通过接口发送消息给消息中心,消息采用json格式,包含应用用户id、发送消息方式id、Title、content、usrId,sendTime。
采用mqtt QoS level 2协议,保证自动重发发送不成功的消息,而且可以保证消息的顺序到达,可以设置超时时间,防止断网。Mqtt不建立长连接,省电、省流量。还可以用mosquitto实现集群发送,集群可以线性扩展。
应用系统用户在注册、登陆后申请发送消息的类别,有邮件、短信、手机消息、pc消息4种,注册后要记住自己的id,然后通过接口发送消息;管理员审批用户的申请,管理消息;消息中心发送消息或邮件、短信到相应的pc端或手机端用户。系统的管理功能包括对规则、用户、消息进行管理。
中心的时区设当地的时区,系统用ntpdate命令让系统使用NTP(NetworkTime Protocol 网络时间协议)协议来从网络同步时间的命令,这样即使有夏令时的变化,系统也会自动更新。中心使用时间时需要得到系统的时区。
2.网络架构
1. 消息接收发送模块。
1)提供发送接口用于接收应用用户的消息和参数,然后通过规则发送消息,用户通过接收接口得到发送结果:
发送消息到手机端。
发送消息到pc端。
发送邮件。
发送短信。
2.手机、pc接收模块。
手机接收消息中心发送的消息。
Pc接收消息中心发送的消息。
3.管理模块。
1)用户和管理员注册、登陆。
2)实现用户申请消息发送方式申请、查看消息、修改密码、统计消息。用户可以申请邮件、短信、手机消息、pc消息4种方式发送消息。
3)管理用户、审批用户发送方式、管理员密码修改、查看和统计发送过的消息。
4)管理规则,可以增加、修改、删除查询规则。
1. 应用用户用例图
2. 管理员用例图
3消息用户用例图
4.应用用户用例图
1.发送消息流程图
系统包括消息接收送接模块、手机、pc接收消息模块、管理模块,共3个模块。
提供接口用于接收应用用户的消息,然后用drools通过规则异步发送消息,用户调用接收接口得到发送结果:
发送消息到手机端。
发送消息到pc端。
发送邮件。
发送短信。
系统采用rocketmq接收消息和返回消息发送结果给用户,系统给pc、手机采用@Async异步发送邮件等消息,并得到发送结果,把结果返回给调用者,消息及发送的情况入库,入库时需要检查消息是否已经存在。用户采用异步调用本接口,得到发送结果,如果不成功,用户可以重发。
因为中心的时区与各用户的时区不同,用户需要发送自己的时区,系统返回发送时间时要根据时区转换时间。
当手机离线没有收到消息,则在定时器中重发;对于需要定时发送的消息,通过定时器完成发送。定时器20分钟执行一次,对这2种情况通过规则发送消息。系统确定时间时要根据时区进行转换,按照用户的时区时间来发送消息。
单元名称 |
单元功能描述 |
备注 |
com.isoftstone.message.domain.Message |
消息实体 |
|
com.isoftstone.message.MessageBiz |
消息发送接收业务类 |
|
com.isoftstone.message.dao.MessageDao |
消息管理dao类 |
|
com.isoftstone.message.service.MessageService |
消息管理service类 |
|
com.isoftstone.message.mailMessage |
发送邮件 |
|
com.isoftstone.message.shortMessage |
发送短信 |
|
com.isoftstone.message.pcMessage |
发送pc消息 |
|
com.isoftstone.message.MobileMessage |
发送手机消息 |
|
1. 发送接口
接口定义:public void sendMessage(String applicationId,String typeid,Stringtitle,String content,String userId) throwsException;
l 描述:通过调用此接口可发送消息及参数,接口在com.isoftstone.message.MessageBiz中。
l 入口参数
父元素 |
元素 |
必须 |
类型 |
备注 |
|
applicationId |
M |
String |
|
|
typeid |
O |
String |
|
|
title |
|
String, |
|
|
content |
O |
String |
|
|
userId |
|
String |
|
|
sendTime
|
|
String |
|
|
timeZone |
|
String |
|
2. 接收接口
接口定义:public Integer getMessageResult(String applicationId,String typeid,Stringtitle,String content,String userId) throwsException;
l 描述:通过调用此接口可得到发送消息的结果,如果发送失败,用户则调用发送接口重发。接口在com.isoftstone.message.MessageBiz中。
l 入口参数
父元素 |
元素 |
必须 |
类型 |
备注 |
|
applicationId |
M |
String |
|
|
typeid |
O |
String |
|
|
title |
|
String, |
|
|
userId |
|
String |
|
|
sendTime
|
|
String |
|
|
timeZone |
|
String |
|
接口返回:
返回码 |
含义 |
备注 |
0 |
成功 |
|
1 |
失败 |
|
2 |
数据重复提交 |
|
3 |
服务器异常 |
|
4 |
没有发送权限 |
|
5 |
网络异常 |
|
以下场景触发模块:
用户调用接口发送消息。
流程描述:
1. 用户使用接口发送消息及参数。
2. 接口对消息参数进行分析,判断是否可以发送。
3. 接口根据参数分别异步发送邮件、短信、手机、pc消息,并得到发送结果,反馈给接口调用者。
4. 发送消息后保存消息到数据库。
IO异常:数据插入失败,写入日志。
数据库操作异常:数据插入失败,写入日志
网络连接超时异常:网络异常,发送失败,写入日志并反馈给用户。
手机用mqtt接收消息。
Pc用winsocket接收消息。
用户和管理员注册、登陆。应用用户注册后记住自己的id,以后发送消息时会用到。
实现用户申请消息发送方式申请、查看消息、修改密码、统计消息。用户可以申请邮件、短信、手机消息、pc消息4种方式发送消息。
管理规则、用户、审批用户发送方式、管理员密码修改、查看和统计发送过的消息。
规则以xml格式生成。
完成应用用户和注册、登陆。
实现用户申请消息发送方式申请。用户可以申请邮件、短信、手机消息、pc消息4种方式发送消息。
1.应用用户消息管理
2.应用用户消息管理
3.应用用户密码管理
4.发送管理
5.应用用户消息统计
管理员实现对应用用户的管理、对应用用户申请的管理和对消息的管理,及管理员注册、登陆。
1.应用用户管理
2.应用用户消息审批管理
2. 消息管理
4..管理员密码管理
5.消息统计
5. 规则管理
6. 规则编辑
类别 |
标准配置 |
最低配置 |
计算机硬件 |
Pc windos |
|
软件 |
eclipse |
|
网络通信 |
Tcp/ip |
|
其它 |
|
|
类别 |
标准配置 |
最低配置 |
计算机硬件 |
服务器 |
|
软件 |
Linux |
|
网络通信 |
Tcp/ip |
|
其它 |
|
|
同开发环境。
n 主要用途:保存发送的邮件
n 数据增长频率:个
n 数据保存周期:由用户调用操作
FIELD NAME |
FIELD CODE |
FIELD YPE |
FIELD LENGTH |
KEY |
O/M |
DEFAULT VALUE |
DESCRIPTION |
id |
id |
bigint |
|
pk |
M |
|
|
标题 |
title |
varchar(80) |
|
|
M |
|
|
内容 |
content |
varchar(500) |
|
|
M |
|
|
发送时间 |
sendTime |
datetime |
|
|
M |
|
|
接收时间 |
ReceiveTime |
datetime |
|
|
|
|
|
发送状态 |
status |
tinyint |
|
|
M |
|
|
接收用户id |
receiveUserId |
varchar(50) |
|
|
|
|
|
应用用户id |
applicationTypeId |
bigint |
|
|
|
|
|
是否删除 |
deleted |
tinyint |
|
|
|
|
|
n 主要用途:保存发送的手机消息
n 数据增长频率:个
n 数据保存周期:由用户调用操作
FIELD NAME |
FIELD CODE |
FIELD YPE |
FIELD LENGTH |
KEY |
O/M |
DEFAULT VALUE |
DESCRIPTION |
id |
id |
bigint |
|
pk |
M |
|
|
标题 |
title |
varchar(80) |
|
|
M |
|
|
内容 |
content |
varchar(500) |
|
|
M |
|
|
发送时间 |
sendTime |
datetime |
|
|
M |
|
|
接收时间 |
ReceiveTime |
datetime |
|
|
|
|
|
发送状态 |
status |
tinyint |
|
|
M |
|
|
接收用户id |
receiveUserId |
varchar(50) |
|
|
|
|
|
应用用户id |
applicationTypeId |
bigint |
|
|
|
|
|
是否删除 |
deleted |
tinyint |
|
|
|
|
|
n 主要用途:保存发送的短信消息。
n 数据增长频率:个
n 数据保存周期:由用户调用操作
FIELD NAME |
FIELD CODE |
FIELD YPE |
FIELD LENGTH |
KEY |
O/M |
DEFAULT VALUE |
DESCRIPTION |
id |
id |
bigint |
|
pk |
M |
|
|
标题 |
title |
varchar(80) |
|
|
M |
|
|
内容 |
content |
varchar(500) |
|
|
M |
|
|
发送时间 |
sendTime |
datetime |
|
|
M |
|
|
发送状态 |
status |
tinyint |
|
|
M |
|
|
接收时间 |
ReceiveTime |
datetime |
|
|
|
|
|
接收用户id |
receiveUserId |
varchar(50) |
|
|
|
|
|
应用用户id |
applicationTypeId |
bigint |
|
|
|
|
|
是否删除 |
deleted |
tinyint |
|
|
|
|
|
n 主要用途:保存管理员信息。
n 数据增长频率:个
n 数据保存周期:由用户注册、修改决定。
FIELD NAME |
FIELD CODE |
FIELD YPE |
FIELD LENGTH |
KEY |
O/M |
DEFAULT VALUE |
DESCRIPTION |
id |
id |
bigint |
|
pk |
M |
|
|
姓名 |
name |
varchar(30) |
|
|
M |
|
|
|
|
varchar(128) |
|
|
M |
|
|
电话 |
telephone |
varchar(32) |
|
|
M |
|
|
密码 |
passWord |
varchar(50) |
|
|
M |
|
|
注册时间 |
registerTime |
datetime |
|
|
|
|
|
是否删除 |
deleted |
tinyint |
|
|
|
|
|
n 主要用途:保存发送消息用户信息。
n 数据增长频率:个
n 数据保存周期:由用户注册、修改决定。
FIELD NAME |
FIELD CODE |
FIELD YPE |
FIELD LENGTH |
KEY |
O/M |
DEFAULT VALUE |
DESCRIPTION |
id |
id |
bigint |
|
pk |
M |
|
|
姓名 |
name |
varchar(30) |
|
|
M |
|
|
|
|
varchar(128) |
|
|
M |
|
|
电话 |
telephone |
varchar(32) |
|
|
M |
|
|
密码 |
passWord |
varchar(50) |
|
|
M |
|
|
注册时间 |
registerTime |
datetime |
|
|
|
|
|
是否删除 |
deleted |
tinyint |
|
|
|
|
|
n 主要用途:保存用户消息订阅方式信息。
n 数据增长频率:个
n 数据保存周期:由管理员操作决定。
FIELD NAME |
FIELD CODE |
FIELD YPE |
FIELD LENGTH |
KEY |
O/M |
DEFAULT VALUE |
DESCRIPTION |
id |
id |
bigint |
|
pk |
M |
|
|
方式 |
name |
varchar(30) |
|
|
M |
|
邮件 |
备注 |
reamark |
varchar(128) |
|
|
M |
|
|
是否删除 |
deleted |
tinyint |
|
|
|
|
|
n 主要用途:提供各个国家时区,为管理员指定中心的时区服务。
n 数据增长频率:个
n 数据保存周期:由管理员修改决定
FIELD NAME |
FIELD CODE |
FIELD YPE |
FIELD LENGTH |
KEY |
O/M |
DEFAULT VALUE |
DESCRIPTION |
id |
id |
bigint |
|
pk |
M |
|
|
国家 |
country |
varchar(80) |
|
|
M |
|
|
时区 |
timeZone |
varchar(100) |
|
|
M |
|
|
key |
key |
datetime |
|
|
M |
|
用于国际化id |
产生时间 |
createTime |
datetime |
|
|
|
|
|
备注 |
remark |
bigint |
|
|
|
|
|
是否删除 |
deleted |
tinyint |
|
|
|
|
|
n 主要用途:保存消息中心的时区,时区可以由系统自动获取,也可以由管理员指定。
n 数据增长频率:个
n 数据保存周期:由管理员修改决定
FIELD NAME |
FIELD CODE |
FIELD YPE |
FIELD LENGTH |
KEY |
O/M |
DEFAULT VALUE |
DESCRIPTION |
id |
id |
bigint |
|
pk |
M |
|
|
国家 |
country |
varchar(80) |
|
|
M |
|
|
时区 |
timeZone |
varchar(100) |
|
|
M |
|
|
key |
key |
datetime |
|
|
M |
|
用于国际化id |
产生时间 |
createTime |
datetime |
|
|
|
|
|
备注 |
remark |
bigint |
|
|
|
|
|
是否删除 |
deleted |
tinyint |
|
|
|
|
|
n 主要用途:保存发送消息用户信息。
n 数据增长频率:个
n 数据保存周期:由用户注册、修改决定。
FIELD NAME |
FIELD CODE |
FIELD YPE |
FIELD LENGTH |
KEY |
O/M |
DEFAULT VALUE |
DESCRIPTION |
id |
id |
bigint |
|
pk |
M |
|
|
用户id |
applicationId |
bigint |
|
|
M |
|
|
消息类别id |
typeId |
bigint |
|
|
M |
|
|
类别名称 |
name |
varchar(50) |
|
|
M |
|
|
备注 |
remark |
varchar(100) |
|
|
M |
|
|
申请时间 |
applyTime |
datetime |
|
|
|
|
|
是否删除 |
deleted |
tinyint |
|
|
|
|
|
是否同意 |
agree |
tinyint |
|
|
|
|
|
n 主要用途:保存发送pc的消息
n 数据增长频率:个
n 数据保存周期:由用户调用操作
FIELD NAME |
FIELD CODE |
FIELD YPE |
FIELD LENGTH |
KEY |
O/M |
DEFAULT VALUE |
DESCRIPTION |
id |
id |
bigint |
|
pk |
M |
|
|
标题 |
title |
varchar(80) |
|
|
M |
|
|
内容 |
content |
varchar(500) |
|
|
M |
|
|
发送时间 |
sendTime |
datetime |
|
|
M |
|
|
发送状态 |
status |
tinyint |
|
|
M |
|
|
接收时间 |
ReceiveTime |
datetime |
|
|
|
|
|
接收用户id |
receiveUserId |
varchar(50) |
|
|
|
|
|
应用用户id |
applicationTypeId |
bigint |
|
|
|
|
|
是否删除 |
deleted |
tinyint |
|
|
|
|
|
n 主要用途:保存发送规则
n 数据增长频率:个
n 数据保存周期:由用户调用操作
FIELD NAME |
FIELD CODE |
FIELD YPE |
FIELD LENGTH |
KEY |
O/M |
DEFAULT VALUE |
DESCRIPTION |
id |
id |
bigint |
|
pk |
M |
|
|
规则标题 |
name |
varchar(80) |
|
|
M |
|
|
规则内容 |
content |
varchar(500) |
|
|
M |
|
|
产生时间 |
createTime |
datetime |
|
|
M |
|
|
修改时间 |
updateTime |
datetime |
|
|
M |
|
|
备注 |
remark |
varchar(100) |
|
|
M |
|
|
是否删除 |
deleted |
tinyint |
|
|
|
|
|
系统用scribe保存日志。
总之,这是一个先进实用的消息推送设计,抛砖引玉,大家可以参考借鉴。
版权声明:本文为博主原创文章,未经博主允许不得转载。