天天看點

從短信類到短信平台之設計篇

引言

   手機短信在系統的應用中越來越廣泛,從單純的發送資訊到手機,發展到接收手機發送的短信,進行資訊的擷取,更有甚者,還可以進行業務的變更,業務資料的修改。從少量的發送,發展到大量的收發,衍生出大量的互動性短信。這就對短信收發的設計提出了更高的要求,不僅僅是簡單的發送消息,不僅僅是簡單的短信子產品,而且需要配合消息隊列,短信路由子系統,業務編碼規則等等技術來滿足大量互動性短息的收發要求。

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

<code>package</code> <code>com.andyshi;</code>

<code>import</code> <code>java.rmi.RemoteException;</code>

<code>import</code> <code>org.tempuri.WebServiceSoapProxy;</code>

<code>public</code> <code>class</code> <code>SMSManager {</code>

<code>    </code><code>WebServiceSoapProxy client=</code><code>new</code> <code>WebServiceSoapProxy();</code>

<code>                                                                                                                                                                                                                               </code> 

<code>    </code><code>public</code> <code>SMSManager(){</code>

<code>//      client.setEndpoint("http://sdk2.entinfo.cn/webservice.asmx");</code>

<code>    </code><code>}</code>

<code>    </code><code>public</code> <code>void</code> <code>Receive(){</code>

<code>                                                                                                                                                                                                                                </code> 

<code>    </code><code>public</code> <code>void</code> <code>Send(){</code>

<code>        </code><code>try</code> <code>{</code>

<code>            </code><code>client.sendSMS(</code><code>"sdfsd"</code><code>, </code><code>"sdfsf"</code><code>, </code><code>"sdf"</code><code>, </code><code>"sf"</code><code>);</code>

<code>        </code><code>} </code><code>catch</code> <code>(RemoteException e) {</code>

<code>            </code><code>// TODO Auto-generated catch block</code>

<code>            </code><code>e.printStackTrace();</code>

<code>        </code><code>}</code>

<code>}</code>

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。

本文轉自 virusswb 51CTO部落格,原文連結:http://blog.51cto.com/virusswb/1268657,如需轉載請自行聯系原作者