国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

應(yīng)用消息隊列應(yīng)對大并發(fā)訪問的解決方案

2013-12-29 00:00:00馬璐
電腦知識與技術(shù) 2013年2期

摘要:為了讓使用此消息隊列的開發(fā)人員了解此消息隊列的接口以及結(jié)構(gòu),特編寫此文檔。

關(guān)鍵詞:消息隊列;設(shè)計

中圖分類號:TP311 文獻標(biāo)識碼:A 文章編號:1009-3044(2013)02-0412-03

在Web2.0的時代,高并發(fā)的情況越來越常見,從而使消息隊列有成為居家必備的趨勢,相應(yīng)的也涌現(xiàn)出了很多實現(xiàn)方案,像Twitter以前就使用RabbitMQ實現(xiàn)消息隊列服務(wù),現(xiàn)在又轉(zhuǎn)而使用Kestrel來實現(xiàn)消息隊列服務(wù),此外還有很多其他的選擇,比如說:ActiveMQ,ZeroMQ等。上述消息隊列的軟件中,大多為了實現(xiàn)AMQP,STOMP,XMPP之類的協(xié)議,變得極其重量級,但在很多Web應(yīng)用中的實際情況是:我們只是想找到一個緩解高并發(fā)請求的解決方案,不需要雜七雜八的功能,一個輕量級的消息隊列實現(xiàn)方式才是我們真正需要的。因為redis本身實現(xiàn)了list,相關(guān)操作也可以保證是原子的,所以可以很自然的通過list來實現(xiàn)消息隊列。隊列的意義在于,分離了任務(wù)的產(chǎn)生和任務(wù)的執(zhí)行。

2.2 內(nèi)部結(jié)構(gòu)

IFailure,失敗信息處理接口;IHttpCallBack,Http方式回調(diào)接口;IMessageListener,

消息監(jiān)聽接口,提供消息監(jiān)聽方法; IMessageManager, 消息管理中心,提供對消息的各種操作方法;IMessageParser,消息解析器,提供消息到xml的轉(zhuǎn)換,以及xml到消息的轉(zhuǎn)換;IMessagePublisher,消息發(fā)布中心;IQueueManager,隊列管理中心,提供對隊列的各種操作方法;ISocketCallBack,Socket方式回調(diào)接口;ISubscriberManager,

訂閱者管理中心,提供對訂閱者的各種操作方法;ITopicManager,主題管理中心,提供對主題的各種操作方法;IXmlValidation,消息驗證器,用以驗證消息的完整性。

3 運行設(shè)計

運行控制:首先登錄,登錄完成后將轉(zhuǎn)向主題列表頁面。主題ID是提交消息時區(qū)分主題的,如果主題列表中沒有需要的主題,可以點擊主題進行注冊,點擊主題可以進入到訂閱者列表頁面。

主題注冊完后會自動生成主題的ID,這個ID就是提交消息時需要的topicid。

訂閱者注冊:訂閱者注冊有個需要注意的地方就是采用http還是socket的回調(diào)方式,如果是http方式,系統(tǒng)將會將消息的xml格式以參數(shù)名xml 用post方式傳遞給訂閱者。如何是socket的方式則會根據(jù)ip和端口號直接將消息的xml形式傳遞訂閱者。訂閱者需要返回一個消息是否接收成功的xml。

如果MSG為1,則表示消息已經(jīng)發(fā)送成功,如果MSG不為1或者沒有返回信息,系統(tǒng)則認為消息發(fā)送失敗,此時系統(tǒng)將會將此消息重復(fù)發(fā)送直到成功,但不會超過五次。如果五次還不成功則放棄該消息的發(fā)送,寫入日志。

隊列注冊:其中的ID就是消息提交時所需要的queueid。

4 系統(tǒng)數(shù)據(jù)結(jié)構(gòu)設(shè)計

Redis下的key設(shè)計

Redis是key/value型數(shù)據(jù)庫,發(fā)布訂閱模式下消息和訂閱者是以主題關(guān)聯(lián)的,所以以主題id為主線來設(shè)計數(shù)據(jù)的存儲結(jié)構(gòu)。

點對點模式下就相對簡單了,以隊列id為主要的key就可以

5 系統(tǒng)出錯處理設(shè)計

5.1 消息提交出錯

消息提交出錯將會給消息提交者返回一個xml格式的出錯信息,格式如下:

其中MSG為返回信息的代碼,方便判斷。

[MSG\&含義\&1\&成功\&2\&主題或隊列不存在\&3\&Xml格式有誤\&4\&隊列中暫時沒有消息\&5\&系統(tǒng)異常\&]

MSG 為5的情況,是由于redis數(shù)據(jù)庫出了問題,本系統(tǒng)將實時監(jiān)控并自動重啟redis。

5.2 消息發(fā)布出錯

消息發(fā)布的時候如果沒有得到訂閱者的反饋,或者反饋的MSG不為1,則認為消息沒有發(fā)布成功,系統(tǒng)將重復(fù)發(fā)送五次,再不成功將記入日志。

西安市| 晋宁县| 洛宁县| 榆中县| 南漳县| 井冈山市| 顺义区| 海阳市| 东方市| 黎城县| 丰城市| 临泽县| 娱乐| 临漳县| 黑河市| 南城县| 微山县| 建湖县| 浮山县| 华坪县| 洛宁县| 晋中市| 中卫市| 新闻| 泸定县| 将乐县| 泰来县| 台中市| 德昌县| 上杭县| 历史| 北海市| 通道| 如皋市| 高要市| 临潭县| 台东县| 彰化县| 色达县| 卢氏县| 定南县|