通信工程獲獎論文(2)
通信工程獲獎論文
通信工程獲獎論文篇2
淺談消息隊列技術(shù)在短信通信中的應用
1 概述
短消息服務以簡單方便的使用功能受到大眾的歡迎,除了大量使用的手機用戶到手機用戶的短信業(yè)務之外,從信息平臺到手機用戶的短消息服務也在快速發(fā)展,該類業(yè)務已成為廣大用戶獲取信息的一種重要手段。
由于歷史原因,舊版的農(nóng)信通業(yè)務在短信發(fā)送和接收過程中,采用了同步通信機制。當消息發(fā)送時,需要等待接收方響應,此時發(fā)送進程被阻塞。如果接收方響應不及時,勢必會影響發(fā)送方的發(fā)送速度。在通信量較小的情況,此種通信機制完全能滿足業(yè)務的需求。然而,當通信量達到每天幾百萬需求時,這樣的通信機制顯得捉襟見肘了,出現(xiàn)信息送達延時、信息積壓、記錄鎖等問題,嚴重影響到業(yè)務的發(fā)展。通過筆者對消息隊列的研究和學習,在農(nóng)信通系統(tǒng)中引入了消息隊列技術(shù)。實現(xiàn)原理是:消息的發(fā)送者把自己想要發(fā)送的消息放入一個容器中,然后把它保存在系統(tǒng)公用空間的消息隊列中,本地或者是異地消息接收程序再從該消息隊列中取出它的消息進行處理。
2 技術(shù)方案
2.1 消息隊列模塊
依照中國移動點對點CMPP3.0協(xié)議,結(jié)合短信業(yè)務的個性化需求,設計了四個消息隊列,分別是:①發(fā)送消息隊列:保存由數(shù)據(jù)操作模塊提供的數(shù)據(jù),供短信發(fā)送模塊使用。
②Response消息隊列:當短信發(fā)送模塊將信息發(fā)送
得到響應后,將該消息放入發(fā)送日志隊列中,由數(shù)據(jù)操作模塊處理。
③狀態(tài)報告隊列:當接收到用戶狀態(tài)報告時,將此狀態(tài)報告放入狀態(tài)報告隊列中,由數(shù)據(jù)操作模塊處理。
?、躆O消息隊列:當接收到用戶上行到短信網(wǎng)關(guān)的業(yè)務指令時,將業(yè)務指令信息放入MO隊列,由數(shù)據(jù)操作模塊處理。
2.2 數(shù)據(jù)操作模塊
在本實施方案中,此模塊主要進行兩部分操作:
2.2.1 從數(shù)據(jù)庫中讀取數(shù)據(jù)
負責從數(shù)據(jù)庫中批量讀取系統(tǒng)中待發(fā)送的消息數(shù)據(jù),放入待發(fā)送消息隊列中,數(shù)據(jù)取出的同時從數(shù)據(jù)庫中刪除已取出的數(shù)據(jù),避免重復讀取。
讀取數(shù)據(jù)采用實時或是間隔某個微小時間,判斷發(fā)送消息隊列中的消息量,當發(fā)送消息隊列中消息量小于某個閥值時,主線程觸發(fā)讀取數(shù)據(jù)操作。
2.2.2 從Response消息隊列、狀態(tài)報告消息隊列、MO消息隊列取數(shù)據(jù)寫入數(shù)據(jù)庫
采用多線程方式,處理Response消息隊列、狀態(tài)報告消息隊列、MO消息隊列中的數(shù)據(jù)。消息隊列中的數(shù)據(jù)根據(jù)其性質(zhì)可以設置不同的優(yōu)先級,為了保證用戶上行指令的及時性,MO消息隊列的優(yōu)先級高于Response隊列和狀態(tài)報告消息隊列。
Response消息隊列:從短信網(wǎng)關(guān)接收到的響應包,當response為0時,表示短信網(wǎng)關(guān)正確接收消息,記錄消息的發(fā)送日志。當response非0,表示短信網(wǎng)關(guān)接收數(shù)據(jù)失敗,一般這樣的情況給予3次發(fā)送機會,如果發(fā)送次數(shù)小于閥值,則該條消息的發(fā)送次數(shù)加1后重新寫入數(shù)據(jù)庫的待發(fā)送隊列中。
2.3 短信發(fā)送模塊
短信發(fā)送模塊主要作用是將待發(fā)送隊列中的信息發(fā)送到短信網(wǎng)關(guān),并接收網(wǎng)關(guān)返回的響應信息、狀態(tài)報告以及MO信息,原理如下:①創(chuàng)建多個發(fā)送線程,每一個線程創(chuàng)建一個與短信網(wǎng)關(guān)通信的socket連接,同時創(chuàng)建相應的多個接收線程和多個滑動窗口監(jiān)控線程。
?、诿總€發(fā)送線程首先判斷滑動窗口容器中數(shù)據(jù)量,當數(shù)據(jù)量小于滑動窗口閥值時,從發(fā)送消息隊列中取得待發(fā)送數(shù)據(jù)向短信網(wǎng)關(guān)發(fā)送,發(fā)送成功后將該信息置入滑動窗口容器中,并將全局計數(shù)器加1,否則該線程進行短暫的休息。
?、劢邮站€程實時接收短信網(wǎng)關(guān)傳送過來的數(shù)據(jù),接收線程接收到數(shù)據(jù)后,如果是Response響應,則根據(jù)消息內(nèi)容與滑動窗口容器中數(shù)據(jù)進行匹配,如果匹配到,則將滑動窗口容器中該數(shù)據(jù)刪除,放入Response消息隊列,由數(shù)據(jù)處理模塊進行處理。如果匹配失敗則拋棄該數(shù)據(jù);接收線程接收到狀態(tài)報告,將信息存入狀態(tài)報告消息隊列中;接收線程接收到用戶MO信息,將該信息存入MO消息隊列中。Response消息隊列、狀態(tài)報告消息隊列、MO消息隊列由數(shù)據(jù)操作模塊進行處理。
?、芑瑒哟翱谌萜鞅O(jiān)控線程間隔性檢測該容器中數(shù)據(jù)是否超時,如果超時,則該數(shù)據(jù)刪除并放入發(fā)送日志隊列同時為該數(shù)據(jù)置超時標志。
3 實施效果與優(yōu)勢
通過引入消息隊列技術(shù),在短信業(yè)務的數(shù)據(jù)通信中,每個連接的發(fā)送速度達到每秒60條左右。如果短信網(wǎng)關(guān)給一個短信類業(yè)務分配4個連接通道,那么業(yè)務的發(fā)送速度將達到每秒240條。完全能滿足日發(fā)送600萬(8*3600*
240,一天按8小時計算)的業(yè)務量需求。消息隊列技術(shù)不僅能提高通信速度,還具備以下優(yōu)勢:
①MSMQ是一種分布式的開放技術(shù),可以在服務端離線情況下工作,將消息臨時保存在發(fā)送方的消息隊列中,以后聯(lián)機時再發(fā)送到接收方處理,避免了由于通信中斷導致數(shù)據(jù)丟失現(xiàn)象,提高了通信的可靠性。
?、谟捎谑钱惒酵ㄐ艡C制,無論是發(fā)送方還是接收方,都不用等待對方返回成功消息,就可以執(zhí)行余下的代碼,大大提高了事務處理能力。
4 結(jié)束語
本文討論了微軟消息隊列在短信業(yè)務中的應用,農(nóng)信通系統(tǒng)通過利用微軟消息隊列解決了業(yè)務信息發(fā)送中遇到的發(fā)送瓶頸問題,對于類似需要大量發(fā)送短信的系統(tǒng)平臺設計具有很好的參考意義。