專利名稱:消息處理方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,特別涉及一種消息分發(fā)及性能調(diào)優(yōu)技術(shù)中的消息處
理方法。
背景技術(shù):
在大訪問量、高并發(fā)的大型網(wǎng)站中,Web服務(wù)器的線程消耗是非常嚴(yán)重的,線程資 源十分保貴,如何提高線程利用率、提高請(qǐng)求的響應(yīng)能力常常是網(wǎng)站性能優(yōu)化的關(guān)鍵點(diǎn)。但 在系統(tǒng)中又常常會(huì)有一些高并發(fā)、高耗時(shí)、低實(shí)時(shí)性的操作,這些操作的結(jié)果對(duì)于網(wǎng)站用戶 來說并不需要及時(shí)反饋,但是如果網(wǎng)頁等待這些同步操作返回,則對(duì)線程占用和響應(yīng)都有 嚴(yán)重的影響,減少服務(wù)的吞吐量。這樣,如何分流這些消息,進(jìn)行異步處理就變得重要了。異 步調(diào)用框架就提供了一個(gè)通用的模型來處理這樣的調(diào)用?,F(xiàn)有方案一使用線程池對(duì)耗時(shí)操作進(jìn)行異步處理。把一個(gè)需要執(zhí)行的操作交給 線程池,線程池自己負(fù)責(zé)線程的創(chuàng)建、分配和銷毀。通過使用線程池可以對(duì)高消耗的操作進(jìn) 行優(yōu)化,從而提高系統(tǒng)的處理能力和吞吐量。其缺陷是線程池仍然是消耗本機(jī)線程,在高 并發(fā)的情況下對(duì)CPU和內(nèi)存消耗非常嚴(yán)重,雖然可以通過修改配置提高線程數(shù),但是對(duì)本 機(jī)資源的消耗是無法有效解決的。現(xiàn)有方案二 使用消息隊(duì)列(MSMQ)異步處理高消耗的操作。通過使用消息隊(duì)列可 以把待處理的消息路由到本機(jī)或者別的機(jī)器上的另外一個(gè)進(jìn)程進(jìn)行處理。這種方式提供更 好的資源擴(kuò)展,通過把消息路由到別的機(jī)器進(jìn)行處理,可以降低對(duì)本機(jī)資源的消耗,同時(shí)消 息隊(duì)列所提供的異步和離線機(jī)制可以更好的提高主程序的響應(yīng)能力。消息隊(duì)列的離線機(jī)制 也有效保障了消息傳遞的可靠性。其缺陷是消息隊(duì)列本身沒有合適的可編程機(jī)制,支持針 對(duì)不同的消息處理應(yīng)用相對(duì)應(yīng)的插件進(jìn)行處理的機(jī)制,以及針對(duì)不同消息的按需的靈活路 由,需要在此基礎(chǔ)上進(jìn)行擴(kuò)展。
發(fā)明內(nèi)容
(一)要解決的技術(shù)問題本發(fā)明要解決的技術(shù)問題是如何提供一個(gè)通用的框架,對(duì)消息進(jìn)行分流和異步 處理,并且使服務(wù)端能夠支持針對(duì)不同的消息動(dòng)態(tài)地選擇相應(yīng)的插件分別進(jìn)行處理。( 二 )技術(shù)方案為解決上述技術(shù)問題,本發(fā)明提供了一種消息處理方法,其特征在于,包括以下步 驟Sl 客戶端把要進(jìn)行異步處理或離線處理的消息路由到對(duì)應(yīng)的服務(wù)端;S2 服務(wù)端接收所述消息,然后分析其中的消息來源參數(shù),生成可在反轉(zhuǎn)控制IOC 容器中提取的關(guān)系名稱;S3 通過所述關(guān)系名稱從所述IOC容器中提取與消息對(duì)應(yīng)的消息處理器;S4 在各自的消息處理器中實(shí)現(xiàn)對(duì)消息的處理。
其中,步驟Sl具體包括Sll 客戶端把要進(jìn)行異步處理或離線處理的消息寫入微軟消息隊(duì)列MSMQ ;S12 =Windows操作系統(tǒng)根據(jù)服務(wù)端提供的服務(wù)地址,把消息自動(dòng)路由到服務(wù)端。其中,步驟Sl中消息隊(duì)列的寫入操作應(yīng)用Windows通信基礎(chǔ)WCF來處理。其中,步驟S2中生成可在反轉(zhuǎn)控制IOC容器中提取的關(guān)系名稱具體方式為根據(jù) 事先在IOC容器中注冊(cè)的消息來源參數(shù)與消息處理器的對(duì)應(yīng)關(guān)系提取關(guān)系名稱。其中,在步驟S2中,通過所述服務(wù)端提供的消息服務(wù)接口接收所述消息。其中,消息接口中的參數(shù)包括消息標(biāo)識(shí)和消息來源標(biāo)識(shí),所述消息來源標(biāo)識(shí)包 括客戶端標(biāo)識(shí)、服務(wù)標(biāo)識(shí)及服務(wù)的版本ID。其中,在步驟S2中,所述消息處理器通過統(tǒng)一的接口被調(diào)用。其中,在步驟S4中,對(duì)消息的處理包括對(duì)外部服務(wù)的調(diào)用、對(duì)數(shù)據(jù)庫的操作以及 進(jìn)行日志記錄。(三)有益效果本發(fā)明通過綜合應(yīng)用MSMQ、WCF、IOC容器和巧妙的接口設(shè)計(jì),我們開發(fā)出了一個(gè) 可以支持異步處理消息、具有自動(dòng)選擇插件進(jìn)行消息處理功能的通用的異步調(diào)用方法。通 過應(yīng)用此方法可以把消息的處理路由給別的進(jìn)程或者別的服務(wù)器進(jìn)行處理,能夠指定不同 的服務(wù)地址和部署更多的服務(wù)器進(jìn)行處理,從而可以支持大量的消息處理任務(wù),進(jìn)而大大 地優(yōu)化網(wǎng)站或服務(wù)的性能,提高該網(wǎng)站或服務(wù)的吞吐量和降低響應(yīng)時(shí)間,更有效地利用服 務(wù)器資源。
圖1是本發(fā)明的一種消息處理方法流程圖;圖2是實(shí)現(xiàn)本發(fā)明的消息處理方法的客戶端服務(wù)端框架結(jié)構(gòu)圖;圖3是本發(fā)明實(shí)施例的消息處理時(shí)序圖。
具體實(shí)施例方式為使本發(fā)明的目的、內(nèi)容、和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施方式作 進(jìn)一步地詳細(xì)描述。本發(fā)明的整體思路是設(shè)計(jì)一個(gè)分布式調(diào)用框架,分為客戶端調(diào)用和服務(wù)端處理。如圖1所示,本發(fā)明的步驟包括步驟S 1,客戶端把要進(jìn)行異步或離線處理的消息寫入MSMQ (Microsoft Message Queue,微軟消息隊(duì)列),Windows操作系統(tǒng)根據(jù)服務(wù)端提供的服務(wù)地址,把消息自動(dòng)路由到 服務(wù)端。步驟S2,服務(wù)端接收來自于消息隊(duì)列的消息,然后分析其中的消息來源參數(shù),生成 可在IOCdnversion of Control,反轉(zhuǎn)控制)容器中提取的關(guān)系名稱。步驟S3,服務(wù)端通過所述關(guān)系名稱從所述IOC容器中提取與消息對(duì)應(yīng)的消息處理
ο步驟S4,在各自的消息處理器中實(shí)現(xiàn)對(duì)消息的處理,包括對(duì)外部服務(wù)的調(diào)用,數(shù)據(jù) 庫的操作,日志記錄等。
其中,消息隊(duì)列的寫入和提取,以及服務(wù)端的并發(fā)控制等相關(guān)網(wǎng)絡(luò)問題通過應(yīng)用 微軟的 WCF (Windows CommunicationFoundation,Windows 通信基礎(chǔ))技術(shù)進(jìn)行統(tǒng)一處理。圖2示出了實(shí)現(xiàn)本發(fā)明方法的框架結(jié)構(gòu)示意圖,圖中示出了客戶端1和客戶端2 分別通過各自的消息來源參數(shù)source和消息標(biāo)識(shí)identity來調(diào)用服務(wù),具體通過source 中的serviceName在分組中獲取要調(diào)用服務(wù)的地址address,調(diào)用服務(wù)采用上述的WCF技術(shù) 將各自的消息放入消息隊(duì)列中。服務(wù)端獲取消息隊(duì)列后,根據(jù)消息來源參數(shù)和消息標(biāo)識(shí)從 IOC容器中選擇正確的處理器來處理消息。具體步驟結(jié)合時(shí)序圖進(jìn)行描述。如圖3所示,為消息處理時(shí)序圖。 上述步驟Sl具體包括步驟S 11,客戶端通過WCF把需要處理的消息寫入本地的消息隊(duì)列MSMQ。因?yàn)閼?yīng) 用了微軟的WCF,客戶端把消息寫入隊(duì)列,服務(wù)端獲取隊(duì)列中的消息均被表現(xiàn)為對(duì)服務(wù)接口 的調(diào)用和服務(wù)接口的實(shí)現(xiàn)處理。所以這里所謂的把消息寫入消息隊(duì)列,實(shí)際上是對(duì)服務(wù)端 提供的一個(gè)消息服務(wù)接口進(jìn)行調(diào)用。本實(shí)施例中,消息服務(wù)接口 IServicelnvoker定義如 下表1所示表1服務(wù)端提供的服務(wù)接口定義
權(quán)利要求
一種消息處理方法,其特征在于,包括以下步驟S1客戶端把要進(jìn)行異步處理或離線處理的消息路由到對(duì)應(yīng)的服務(wù)端;S2服務(wù)端接收所述消息,然后分析其中的消息來源參數(shù),生成可在反轉(zhuǎn)控制IOC容器中提取的關(guān)系名稱;S3通過所述關(guān)系名稱從所述IOC容器中提取與消息對(duì)應(yīng)的消息處理器;S4在各自的消息處理器中實(shí)現(xiàn)對(duì)消息的處理。
2.如權(quán)利要求1所述的消息處理方法,其特征在于,步驟Sl具體包括Sll 客戶端把要進(jìn)行異步處理或離線處理的消息寫入微軟消息隊(duì)列MSMQ ;S12:Wind0WS操作系統(tǒng)根據(jù)服務(wù)端提供的服務(wù)地址,把消息自動(dòng)路由到服務(wù)端。
3.如權(quán)利要求2所述的消息處理方法,其特征在于,步驟Sl中消息隊(duì)列的寫入操作應(yīng) 用Windows通信基礎(chǔ)WCF來處理。
4.如權(quán)利要求1所述的消息處理方法,其特征在于,步驟S2中生成可在反轉(zhuǎn)控制IOC 容器中提取的關(guān)系名稱具體方式為根據(jù)事先在IOC容器中注冊(cè)的消息來源參數(shù)與消息處 理器的對(duì)應(yīng)關(guān)系提取關(guān)系名稱。
5.如權(quán)利要求1 4中任一項(xiàng)所述的消息處理方法,其特征在于,在步驟S2中,通過所 述服務(wù)端提供的消息服務(wù)接口接收所述消息。
6.如權(quán)利要求5所述的消息處理方法,其特征在于,消息接口中的參數(shù)包括消息標(biāo)識(shí) 和消息來源標(biāo)識(shí),所述消息來源標(biāo)識(shí)包括客戶端標(biāo)識(shí)、服務(wù)標(biāo)識(shí)及服務(wù)的版本ID。
7.如權(quán)利要求1 4中任一項(xiàng)所述的消息處理方法,其特征在于,在步驟S2中,所述消 息處理器通過統(tǒng)一的接口被調(diào)用。
8.如權(quán)利要求1 4中任一項(xiàng)所述的消息處理方法,其特征在于,在步驟S4中,對(duì)消息 的處理包括對(duì)外部服務(wù)的調(diào)用、對(duì)數(shù)據(jù)庫的操作以及進(jìn)行日志記錄。
全文摘要
本發(fā)明公開了一種消息處理方法,包括以下步驟S1、客戶端把要進(jìn)行異步處理或離線處理的消息路由到對(duì)應(yīng)的服務(wù)端;S2、服務(wù)端接收所述消息,然后分析其中的消息來源參數(shù),生成可在控制反轉(zhuǎn)IOC容器中提取的關(guān)系名稱;S3、通過所述關(guān)系名稱從所述IOC容器中提取與消息對(duì)應(yīng)的消息處理器;S4、在各自的消息處理器中實(shí)現(xiàn)對(duì)消息的處理。本發(fā)明提供了一個(gè)通用的框架,對(duì)消息進(jìn)行分流和異步處理,并且使服務(wù)端能夠支持針對(duì)不同的消息動(dòng)態(tài)地選擇相應(yīng)的插件分別進(jìn)行處理。
文檔編號(hào)H04L29/06GK101964763SQ20101050391
公開日2011年2月2日 申請(qǐng)日期2010年9月30日 優(yōu)先權(quán)日2010年9月30日
發(fā)明者陳俊彪 申請(qǐng)人:北京神州泰岳軟件股份有限公司