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