从短信类到短信平台之设计篇

引言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。

相关文章
相关标签/搜索