引言java
手机短信在系统的应用中愈来愈普遍,从单纯的发送信息到手机,发展到接收手机发送的短信,进行信息的获取,更有甚者,还能够进行业务的变动,业务数据的 修改。从少许的发送,发展到大量的收发,衍生出大量的互动性短信。这就对短信收发的设计提出了更高的要求,不只仅是简单的发送消息,不只仅是简单的短信模 块,并且须要配合消息队列,短信路由子系统,业务编码规则等等技术来知足大量互动性短息的收发要求。web
一、短信收发类缓存
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
package
com.andyshi;
import
java.rmi.RemoteException;
import
org.tempuri.WebServiceSoapProxy;
public
class
SMSManager {
WebServiceSoapProxy client=
new
WebServiceSoapProxy();
public
SMSManager(){
// client.setEndpoint("http://sdk2.entinfo.cn/webservice.asmx");
}
public
void
Receive(){
}
public
void
Send(){
try
{
client.sendSMS(
"sdfsd"
,
"sdfsf"
,
"sdf"
,
"sf"
);
}
catch
(RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
|
二、短信收发模块编码
成为几个类的组合,Sender,Receiver,还有一些辅助的方法,并且输入输出也从简单类型变成了实体类,减小模块调用者的出错几率。spa
变化设计
一、从单个类变成了几个类的组合。code
职责单一。队列
二、增长辅助类。ci
例如短信实体的建立类。路由
由于收到的短信是字符串,并且多是多条短信,因此增长了一些解析类,从字符串中解析出短信,生成短信实体。
三、输入输入
整个收发过程的输入输出从简单类型的变成了实体类,这样能够减小模块调用者出错的几率,对外更加内聚。
三、短信收发子系统
随着短信收发量的增大,同步实时发送和接收已经不能知足要求。并且随着业务的增长,业务系统的增长,有不少地方都须要短信的收发功能,好比说短信验证, 短信查询,短信互动,订阅短信通知,群发短信,短信操做业务,短信变动业务数据。业务也从单纯的发,或者是少许的收,变成大量的收发处理。
这时候须要考虑更多的东西,例如短信的实时性,可靠性,自动重发,优先级。须要将短信的收发和处理分开,须要消息队列的配合,将收到和须要发送的短信先存入消息队列,而后定时从消息队列获取,进行发送或者业务的处理。
四、短信收发平台
短信收发平台负责具体的短信收发工做,分离具体的业务处理,增长短信路由子系统。
短信有三个运营商:移动,联通,电信。
4.1 短信路由子系统:
一、短信平台收到短信以后,交给短信路由子系统,将收到的业务编码,按照业务编码规则路由到某个业务子系统,进行业务的处理。若是是指令性的短信,则不须要信息返回;若是是交互性的短信,业务子系统处理以后确定还须要发送短信,发送短信给短信路由子系统。
二、若是业务子系统须要发送短信,确定是须要发送给一个手机号的,这个手机号只多是具体的一个运营商的,可是业务子系统不用关心这些,它只是知道发送给一个手机号一段消息,而后交给短信路由子系统,短信路由子系统来决定经由那个运营商的通道发送到具体的手机号。
4.2 存储设计
不少的短信均可以用模板+具体业务数据(例如祝福类短信,其中的用户名不同,其余的内容都是同样的)的形式来表示,业务子系统负责存储模板和业务数据,这样能够减小不少冗余,并且须要修改短信内容的话,只须要修改模板就能够了。
短信平台存储完整的短信内容,方便查询统计。
4.3 其余
随着短息量愈来愈大,子系统也会使用消息队列来缓存收发的消息,减轻具体业务的处理压力。
============================================
后记
==========
2013-08-14
发送子系统
接收业务系统来的短信,进行具体的发送工做。发送以前,可能须要区分通道,也就是短信是发给那个运营商的,以前是想交给路由子系统来实现的,可是以为这个工做更应该是发送子系统来作的事情,路由子系统和业务仍是有一点关系,至少还有一个业务匹配规则配置。
接收子系统
接收外部发送过来的短信。
路由子系统
路由和分解短信到具体的业务子系统,路由的规则包括特服号码(运营商或者是SP分配给短信业务申请者的一个号码)和短信业务的识别码。
好比说发送到100900的都是订单获取的业务,发送到100800都是我的信息获取的业务,发送到100700都是帮助获取的业务。
识别码也就是接收短信的内容,或者是内容的前几位数字。好比说接收到的内容是QX10000,那就是订单子系统的,用来取消(QX)订单,订单编号是10000。