引言
手機短信在系統的應用中越來越廣泛,從單純的發送信息到手機,發展到接收手機發送的短信,進行信息的獲取,更有甚者,還可以進行業務的變更,業務數據的 修改。從少量的發送,發展到大量的收發,衍生出大量的互動性短信。這就對短信收發的設計提出了更高的要求,不僅僅是簡單的發送消息,不僅僅是簡單的短信模 塊,而且需要配合消息隊列,短信路由子系統,業務編碼規則等等技術來滿足大量互動性短息的收發要求。
1、短信收發類
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();
}
}
}
|
2、短信收發模塊
成為幾個類的組合,Sender,Receiver,還有一些輔助的方法,而且輸入輸出也從簡單類型變成了實體類,減少模塊調用者的出錯概率。
變化
1、從單個類變成了幾個類的組合。
職責單一。
2、增加輔助類。
例如短信實體的創建類。
因為收到的短信是字符串,而且可能是多條短信,所以增加了一些解析類,從字符串中解析出短信,生成短信實體。
3、輸入輸入
整個收發過程的輸入輸出從簡單類型的變成了實體類,這樣可以減少模塊調用者出錯的概率,對外更加內聚。
3、短信收發子系統
隨着短信收發量的增大,同步實時發送和接收已經不能滿足要求。而且隨着業務的增加,業務系統的增加,有很多地方都需要短信的收發功能,比如說短信驗證, 短信查詢,短信互動,訂閱短信通知,群發短信,短信操作業務,短信變更業務數據。業務也從單純的發,或者是少量的收,變成大量的收發處理。
這時候需要考慮更多的東西,例如短信的實時性,可靠性,自動重發,優先級。需要將短信的收發和處理分開,需要消息隊列的配合,將收到和需要發送的短信先存入消息隊列,然后定時從消息隊列獲取,進行發送或者業務的處理。
4、短信收發平台
短信收發平台負責具體的短信收發工作,分離具體的業務處理,增加短信路由子系統。
短信有三個運營商:移動,聯通,電信。
4.1 短信路由子系統:
1、短信平台收到短信之后,交給短信路由子系統,將收到的業務編碼,按照業務編碼規則路由到某個業務子系統,進行業務的處理。如果是指令性的短信,則不需要信息返回;如果是交互性的短信,業務子系統處理之后肯定還需要發送短信,發送短信給短信路由子系統。
2、如果業務子系統需要發送短信,肯定是需要發送給一個手機號的,這個手機號只可能是具體的一個運營商的,但是業務子系統不用關心這些,它只是知道發送給一個手機號一段消息,然后交給短信路由子系統,短信路由子系統來決定經由那個運營商的通道發送到具體的手機號。
4.2 存儲設計
很多的短信都可以用模板+具體業務數據(例如祝福類短信,其中的用戶名不一樣,其他的內容都是一樣的)的形式來表示,業務子系統負責存儲模板和業務數據,這樣可以減少很多冗余,而且需要修改短信內容的話,只需要修改模板就可以了。
短信平台存儲完整的短信內容,方便查詢統計。
4.3 其他
隨着短息量越來越大,子系統也會使用消息隊列來緩存收發的消息,減輕具體業務的處理壓力。
============================================
后記
==========
2013-08-14
發送子系統
接收業務系統來的短信,進行具體的發送工作。發送之前,可能需要區分通道,也就是短信是發給那個運營商的,之前是想交給路由子系統來實現的,但是覺得這個工作更應該是發送子系統來做的事情,路由子系統和業務還是有一點關系,至少還有一個業務匹配規則配置。
接收子系統
接收外部發送過來的短信。
路由子系統
路由和分解短信到具體的業務子系統,路由的規則包括特服號碼(運營商或者是SP分配給短信業務申請者的一個號碼)和短信業務的識別碼。
比如說發送到100900的都是訂單獲取的業務,發送到100800都是個人信息獲取的業務,發送到100700都是幫助獲取的業務。
識別碼也就是接收短信的內容,或者是內容的前幾位數字。比如說接收到的內容是QX10000,那就是訂單子系統的,用來取消(QX)訂單,訂單編號是10000。