本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種執(zhí)行異步事件的技術(shù)。
背景技術(shù):
在分布式系統(tǒng)中,多個(gè)服務(wù)器集群通過分布式消息隊(duì)列實(shí)現(xiàn)異步。服務(wù)器異步消息是典型的生產(chǎn)者消費(fèi)者模式,生產(chǎn)者往消息隊(duì)列中發(fā)消息,消費(fèi)者從消息隊(duì)列中取消息。這種結(jié)構(gòu)帶來的優(yōu)勢(shì)是提供系統(tǒng)可用性,消除并發(fā)訪問高峰,加快網(wǎng)站響應(yīng)速度。
對(duì)于業(yè)務(wù)擴(kuò)張的時(shí)期,采用異步消息結(jié)構(gòu)可以帶來網(wǎng)站響應(yīng)速度。對(duì)于一個(gè)要處理十分復(fù)雜的業(yè)務(wù)邏輯的接口,開發(fā)人員可以將不影響接口返回?cái)?shù)據(jù)的業(yè)務(wù)邏輯放到異步事件中處理,提高接口的響應(yīng)速度。此外,系統(tǒng)中有多個(gè)模塊,不同服務(wù)器上每個(gè)開發(fā)人員負(fù)責(zé)不同模塊,需要重復(fù)很多設(shè)計(jì)工作,使得整個(gè)業(yè)務(wù)系統(tǒng)割裂,目前的系統(tǒng)格式不統(tǒng)一,實(shí)現(xiàn)效果不可控。
因此,如何高效執(zhí)行異步事件,成為本領(lǐng)域技術(shù)人員亟需解決的問題之一。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是提供一種執(zhí)行異步事件的方法和裝置。
根據(jù)本發(fā)明的一個(gè)方面,提供了一種執(zhí)行異步事件的方法,其中,該方法包括:
a基于主進(jìn)程中對(duì)應(yīng)的客戶端的請(qǐng)求,立即向所述客戶端返回與所述請(qǐng)求對(duì)應(yīng)的響應(yīng);
b在所述主進(jìn)程之外,異步申明與所述請(qǐng)求對(duì)應(yīng)的至少一個(gè)異步事件,并監(jiān)聽所述至少一個(gè)異步事件;
c根據(jù)所述至少一個(gè)異步事件,在注冊(cè)中心查找對(duì)應(yīng)的類或方法并進(jìn)行執(zhí)行。
優(yōu)選地,所述步驟c包括:
根據(jù)所述異步事件的事件名及其所在模塊的模塊名,在所述注冊(cè)中心查找對(duì)應(yīng)的類或方法并進(jìn)行執(zhí)行。
更優(yōu)選地,該方法還包括:
根據(jù)異步事件及其所在模塊所對(duì)應(yīng)的事件名和模塊名,在所述注冊(cè)中心進(jìn)行全局注冊(cè),其中,經(jīng)全局注冊(cè)后的模塊對(duì)外具有統(tǒng)一的集成方式。
優(yōu)選地,各個(gè)異步事件具有對(duì)應(yīng)的開關(guān),所述開關(guān)定義所述異步事件在注冊(cè)中心的插拔。
優(yōu)選地,該方法還包括:
根據(jù)對(duì)所述類或方法的執(zhí)行,獲得對(duì)應(yīng)的所述異步事件的執(zhí)行結(jié)果;
將所述執(zhí)行結(jié)果提供給所述客戶端。
根據(jù)本發(fā)明的另一個(gè)方面,還提供了一種執(zhí)行異步事件的裝置,其中,該裝置包括:
響應(yīng)裝置,用于基于主進(jìn)程中對(duì)應(yīng)的客戶端的請(qǐng)求,立即向所述客戶端返回與所述請(qǐng)求對(duì)應(yīng)的響應(yīng);
申明裝置,用于在所述主進(jìn)程之外,異步申明與所述請(qǐng)求對(duì)應(yīng)的至少一個(gè)異步事件,并監(jiān)聽所述至少一個(gè)異步事件;
執(zhí)行裝置,用于根據(jù)所述至少一個(gè)異步事件,在注冊(cè)中心查找對(duì)應(yīng)的類或方法并進(jìn)行執(zhí)行。
優(yōu)選地,所述執(zhí)行裝置用于:
根據(jù)所述異步事件的事件名及其所在模塊的模塊名,在所述注冊(cè)中心查找對(duì)應(yīng)的類或方法并進(jìn)行執(zhí)行。
更優(yōu)選地,該裝置還包括:
注冊(cè)裝置,用于根據(jù)異步事件及其所在模塊所對(duì)應(yīng)的事件名和模塊名,在所述注冊(cè)中心進(jìn)行全局注冊(cè),其中,經(jīng)全局注冊(cè)后的模塊對(duì)外具有統(tǒng)一的集成方式。
優(yōu)選地,各個(gè)異步事件具有對(duì)應(yīng)的開關(guān),所述開關(guān)定義所述異步事件在注冊(cè)中心的插拔。
優(yōu)選地,該裝置還包括提供裝置,用于:
根據(jù)對(duì)所述類或方法的執(zhí)行,獲得對(duì)應(yīng)的所述異步事件的執(zhí)行結(jié)果;
將所述執(zhí)行結(jié)果提供給所述客戶端。
根據(jù)本發(fā)明的又一個(gè)方面,還提供了一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)存儲(chǔ)有計(jì)算機(jī)代碼,當(dāng)所述計(jì)算機(jī)代碼被執(zhí)行時(shí),如前任一項(xiàng)所述的方法被執(zhí)行。
根據(jù)本發(fā)明的再一個(gè)方面,還提供了一種計(jì)算機(jī)程序產(chǎn)品,當(dāng)所述計(jì)算機(jī)程序產(chǎn)品被計(jì)算機(jī)設(shè)備執(zhí)行時(shí),如前任一項(xiàng)所述的方法被執(zhí)行。
根據(jù)本發(fā)明的再一個(gè)方面,還提供了一種計(jì)算機(jī)設(shè)備,所述計(jì)算機(jī)設(shè)備包括:
一個(gè)或多個(gè)處理器;
存儲(chǔ)器,用于存儲(chǔ)一個(gè)或多個(gè)計(jì)算機(jī)程序;
當(dāng)所述一個(gè)或多個(gè)計(jì)算機(jī)程序被所述一個(gè)或多個(gè)處理器執(zhí)行時(shí),使得所述一個(gè)或多個(gè)處理器實(shí)現(xiàn)如前任一項(xiàng)所述的方法。
與現(xiàn)有技術(shù)相比,本發(fā)明基于主進(jìn)程中對(duì)應(yīng)的客戶端的請(qǐng)求,立即向該客戶端返回與所述請(qǐng)求對(duì)應(yīng)的響應(yīng),同時(shí),在主進(jìn)程之外,異步申明與該請(qǐng)求對(duì)應(yīng)的至少一個(gè)異步事件,并監(jiān)聽該至少一個(gè)異步事件,從而在注冊(cè)中心查找對(duì)應(yīng)的類或方法并進(jìn)行執(zhí)行,使得在快速、高效地響應(yīng)客戶端請(qǐng)求的同時(shí),異步執(zhí)行相應(yīng)的異步事件,提升客戶端用戶的使用體驗(yàn)。
由于現(xiàn)有的異步事件的處理可能背后的代碼各式各樣,或者,對(duì)于多個(gè)異步事件,開發(fā)者分次寫代碼,異步事件多、代碼散亂,而本發(fā)明提供了一種統(tǒng)一的集成機(jī)制,開發(fā)者僅需按照框架模板填寫即可,方便快捷,同時(shí)框架統(tǒng)一,方便集成,采用同樣的協(xié)議和規(guī)范,不管是自己開發(fā),還是對(duì)外開放,都提供了便利,使得數(shù)據(jù)關(guān)聯(lián)性更強(qiáng);此外,由于業(yè)務(wù)系統(tǒng)有很多關(guān)聯(lián)關(guān)系,例如,發(fā)匯報(bào)/發(fā)外勤/日程提醒等都需要與其他模塊打通,本發(fā)明通過全局注冊(cè),使得對(duì)外打通對(duì)接更為便捷,實(shí)現(xiàn)高效地集成現(xiàn)有的資源。
進(jìn)一步地,本發(fā)明通過開關(guān)來定義異步事件在注冊(cè)中心的插拔,更有利于開發(fā)者的使用體驗(yàn)。
附圖說明
通過閱讀參照以下附圖所作的對(duì)非限制性實(shí)施例所作的詳細(xì)描述,本發(fā)明的其它特征、目的和優(yōu)點(diǎn)將會(huì)變得更明顯:
圖1示出根據(jù)本發(fā)明一個(gè)方面的一種執(zhí)行異步事件的裝置的結(jié)構(gòu)示意圖;
圖2示出根據(jù)本發(fā)明另一個(gè)方面的一種執(zhí)行異步事件的方法的流程示意圖。
附圖中相同或相似的附圖標(biāo)記代表相同或相似的部件。
具體實(shí)施方式
在更加詳細(xì)地討論示例性實(shí)施例之前應(yīng)當(dāng)提到的是,一些示例性實(shí)施例被描述成作為流程圖描繪的處理或方法。雖然流程圖將各項(xiàng)操作描述成順序的處理,但是其中的許多操作可以被并行地、并發(fā)地或者同時(shí)實(shí)施。此外,各項(xiàng)操作的順序可以被重新安排。當(dāng)其操作完成時(shí)所述處理可以被終止,但是還可以具有未包括在附圖中的附加步驟。所述處理可以對(duì)應(yīng)于方法、函數(shù)、規(guī)程、子例程、子程序等等。
在上下文中所稱“計(jì)算機(jī)設(shè)備”,也稱為“電腦”,是指可以通過運(yùn)行預(yù)定程序或指令來執(zhí)行數(shù)值計(jì)算和/或邏輯計(jì)算等預(yù)定處理過程的智能電子設(shè)備,其可以包括處理器與存儲(chǔ)器,由處理器執(zhí)行在存儲(chǔ)器中預(yù)存的存續(xù)指令來執(zhí)行預(yù)定處理過程,或是由ASIC、FPGA、DSP等硬件執(zhí)行預(yù)定處理過程,或是由上述二者組合來實(shí)現(xiàn)。計(jì)算機(jī)設(shè)備包括但不限于服務(wù)器、個(gè)人電腦、筆記本電腦、平板電腦、智能手機(jī)等。
所述計(jì)算機(jī)設(shè)備包括用戶設(shè)備與網(wǎng)絡(luò)設(shè)備。其中,所述用戶設(shè)備包括但不限于電腦、智能手機(jī)、PDA等;所述網(wǎng)絡(luò)設(shè)備包括但不限于單個(gè)網(wǎng)絡(luò)服務(wù)器、多個(gè)網(wǎng)絡(luò)服務(wù)器組成的服務(wù)器組或基于云計(jì)算(Cloud Computing)的由大量計(jì)算機(jī)或網(wǎng)絡(luò)服務(wù)器構(gòu)成的云,其中,云計(jì)算是分布式計(jì)算的一種,由一群松散耦合的計(jì)算機(jī)集組成的一個(gè)超級(jí)虛擬計(jì)算機(jī)。其中,所述計(jì)算機(jī)設(shè)備可單獨(dú)運(yùn)行來實(shí)現(xiàn)本發(fā)明,也可接入網(wǎng)絡(luò)并通過與網(wǎng)絡(luò)中的其他計(jì)算機(jī)設(shè)備的交互操作來實(shí)現(xiàn)本發(fā)明。其中,所述計(jì)算機(jī)設(shè)備所處的網(wǎng)絡(luò)包括但不限于互聯(lián)網(wǎng)、廣域網(wǎng)、城域網(wǎng)、局域網(wǎng)、VPN網(wǎng)絡(luò)等。
需要說明的是,所述用戶設(shè)備、網(wǎng)絡(luò)設(shè)備和網(wǎng)絡(luò)等僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的計(jì)算機(jī)設(shè)備或網(wǎng)絡(luò)如可適用于本發(fā)明,也應(yīng)包含在本發(fā)明保護(hù)范圍以內(nèi),并以引用方式包含于此。
后面所討論的方法(其中一些通過流程圖示出)可以通過硬件、軟件、固件、中間件、微代碼、硬件描述語言或者其任意組合來實(shí)施。當(dāng)用軟件、固件、中間件或微代碼來實(shí)施時(shí),用以實(shí)施必要任務(wù)的程序代碼或代碼段可以被存儲(chǔ)在機(jī)器或計(jì)算機(jī)可讀介質(zhì)(比如存儲(chǔ)介質(zhì))中。(一個(gè)或多個(gè))處理器可以實(shí)施必要的任務(wù)。
這里所公開的具體結(jié)構(gòu)和功能細(xì)節(jié)僅僅是代表性的,并且是用于描述本發(fā)明的示例性實(shí)施例的目的。但是本發(fā)明可以通過許多替換形式來具體實(shí)現(xiàn),并且不應(yīng)當(dāng)被解釋成僅僅受限于這里所闡述的實(shí)施例。
應(yīng)當(dāng)理解的是,雖然在這里可能使用了術(shù)語“第一”、“第二”等等來描述各個(gè)單元,但是這些單元不應(yīng)當(dāng)受這些術(shù)語限制。使用這些術(shù)語僅僅是為了將一個(gè)單元與另一個(gè)單元進(jìn)行區(qū)分。舉例來說,在不背離示例性實(shí)施例的范圍的情況下,第一單元可以被稱為第二單元,并且類似地第二單元可以被稱為第一單元。這里所使用的術(shù)語“和/或”包括其中一個(gè)或更多所列出的相關(guān)聯(lián)項(xiàng)目的任意和所有組合。
應(yīng)當(dāng)理解的是,當(dāng)一個(gè)單元被稱為“連接”或“耦合”到另一單元時(shí),其可以直接連接或耦合到所述另一單元,或者可以存在中間單元。與此相對(duì),當(dāng)一個(gè)單元被稱為“直接連接”或“直接耦合”到另一單元時(shí),則不存在中間單元。應(yīng)當(dāng)按照類似的方式來解釋被用于描述單元之間的關(guān)系的其他詞語(例如“處于...之間”相比于“直接處于...之間”,“與...鄰近”相比于“與...直接鄰近”等等)。
這里所使用的術(shù)語僅僅是為了描述具體實(shí)施例而不意圖限制示例性實(shí)施例。除非上下文明確地另有所指,否則這里所使用的單數(shù)形式“一個(gè)”、“一項(xiàng)”還意圖包括復(fù)數(shù)。還應(yīng)當(dāng)理解的是,這里所使用的術(shù)語“包括”和/或“包含”規(guī)定所陳述的特征、整數(shù)、步驟、操作、單元和/或組件的存在,而不排除存在或添加一個(gè)或更多其他特征、整數(shù)、步驟、操作、單元、組件和/或其組合。
還應(yīng)當(dāng)提到的是,在一些替換實(shí)現(xiàn)方式中,所提到的功能/動(dòng)作可以按照不同于附圖中標(biāo)示的順序發(fā)生。舉例來說,取決于所涉及的功能/動(dòng)作,相繼示出的兩幅圖實(shí)際上可以基本上同時(shí)執(zhí)行或者有時(shí)可以按照相反的順序來執(zhí)行。
下面結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步詳細(xì)描述。
圖1示出根據(jù)本發(fā)明一個(gè)方面的一種執(zhí)行異步事件的裝置的結(jié)構(gòu)示意圖。該裝置1包括響應(yīng)裝置101、申明裝置102和執(zhí)行裝置103。
其中,響應(yīng)裝置101基于主進(jìn)程中對(duì)應(yīng)的客戶端的請(qǐng)求,立即向所述客戶端返回與所述請(qǐng)求對(duì)應(yīng)的響應(yīng)。
具體地,客戶端請(qǐng)求了某個(gè)事件,則在主進(jìn)程中可立即對(duì)該事件進(jìn)行響應(yīng),響應(yīng)裝置101在主進(jìn)程中,基于該客戶端的請(qǐng)求,立即向該客戶端返回與該請(qǐng)求對(duì)應(yīng)的響應(yīng),例如,假設(shè)客戶端請(qǐng)求了某個(gè)外勤事件,則在主進(jìn)程中,響應(yīng)裝置101為該客戶發(fā)了一個(gè)外勤,立即向該客戶端反饋外勤發(fā)送成功,由此,客戶端可以立即獲得響應(yīng),對(duì)于使用該客戶端的用戶獲得較好的用戶使用體驗(yàn)。
申明裝置102在所述主進(jìn)程之外,異步申明與所述請(qǐng)求對(duì)應(yīng)的至少一個(gè)異步事件,并監(jiān)聽所述至少一個(gè)異步事件。
具體地,在主進(jìn)程之外,裝置1可以執(zhí)行與該請(qǐng)求對(duì)應(yīng)的其他異步事件,例如,該裝置1中的申明裝置102,在該主進(jìn)程之外,異步申明與所述請(qǐng)求對(duì)應(yīng)的至少一個(gè)異步事件,并監(jiān)聽該至少一個(gè)異步事件。如上例中,主進(jìn)程中,響應(yīng)裝置101立即基于請(qǐng)求向客戶端反饋外勤發(fā)送成功;同時(shí),在主進(jìn)程之外,申明裝置102異步申明與該請(qǐng)求對(duì)應(yīng)的至少一個(gè)異步事件,如異步申明一個(gè)異步事件“給客戶添加一條跟進(jìn)記錄”,其實(shí)際需要游說轉(zhuǎn)化客戶,并監(jiān)聽該異步事件。
執(zhí)行裝置103根據(jù)所述至少一個(gè)異步事件,在注冊(cè)中心查找對(duì)應(yīng)的類或方法并進(jìn)行執(zhí)行。
具體地,執(zhí)行裝置103根據(jù)申明裝置102所申明的至少一個(gè)異步事件,在注冊(cè)中心查找對(duì)應(yīng)的類或方法,并執(zhí)行該類或方法。如上例中,主進(jìn)程中,響應(yīng)裝置101立即基于請(qǐng)求向客戶端反饋外勤發(fā)送成功;同時(shí),在主進(jìn)程之外,申明裝置102異步申明與該請(qǐng)求對(duì)應(yīng)的至少一個(gè)異步事件,如異步申明一個(gè)異步事件“給客戶添加一條跟進(jìn)記錄”,并監(jiān)聽該異步事件;隨后,執(zhí)行裝置103根據(jù)該異步事件“給客戶添加一條跟進(jìn)記錄”,在注冊(cè)中心查找對(duì)應(yīng)的類或方法,如根據(jù)該異步事件在注冊(cè)中心的客戶關(guān)系管理系統(tǒng)中查找到了對(duì)應(yīng)的被注冊(cè)后的方法,該方法如記錄為客戶名下的一條相關(guān)跟進(jìn)記錄,該執(zhí)行裝置103即可以執(zhí)行該方法。
在此,在注冊(cè)中心中查找異步事件對(duì)應(yīng)的類或方法,其是一個(gè)臨時(shí)的線程,不干擾主進(jìn)程的一個(gè)異步過程。
在此,裝置1基于主進(jìn)程中對(duì)應(yīng)的客戶端的請(qǐng)求,立即向該客戶端返回與所述請(qǐng)求對(duì)應(yīng)的響應(yīng),同時(shí),在主進(jìn)程之外,異步申明與該請(qǐng)求對(duì)應(yīng)的至少一個(gè)異步事件,并監(jiān)聽該至少一個(gè)異步事件,從而在注冊(cè)中心查找對(duì)應(yīng)的類或方法并進(jìn)行執(zhí)行,使得在快速、高效地響應(yīng)客戶端請(qǐng)求的同時(shí),異步執(zhí)行相應(yīng)的異步事件,提升客戶端用戶的使用體驗(yàn)。
優(yōu)選地,所述執(zhí)行裝置103根據(jù)所述異步事件的事件名及其所在模塊的模塊名,在所述注冊(cè)中心查找對(duì)應(yīng)的類或方法并進(jìn)行執(zhí)行。
具體地,由于不同模塊中異步事件的事件名可能存在相同的情況,如果僅僅根據(jù)事件名去注冊(cè)中心查找,則可能會(huì)基于同一個(gè)事件名而查找到不同模塊對(duì)應(yīng)的類或方法,因此,執(zhí)行裝置103根據(jù)異步事件的事件名及其所在模塊的模塊名,在所述注冊(cè)中心查找對(duì)應(yīng)的類或方法并進(jìn)行執(zhí)行。
在此,該注冊(cè)中心中存儲(chǔ)了大量異步事件及其對(duì)應(yīng)的類或方法的映射關(guān)系,其可以由異步事件的開發(fā)者進(jìn)行注冊(cè)。
更優(yōu)選地,該裝置1還包括注冊(cè)裝置(未示出)。該注冊(cè)裝置根據(jù)異步事件及其所在模塊所對(duì)應(yīng)的事件名和模塊名,在所述注冊(cè)中心進(jìn)行全局注冊(cè),其中,經(jīng)全局注冊(cè)后的模塊對(duì)外具有統(tǒng)一的集成方式。
具體地,異步服務(wù)的開發(fā)者,完成對(duì)異步事件及其對(duì)應(yīng)的執(zhí)行方法的開發(fā)后,聯(lián)系注冊(cè)中心,例如通過預(yù)定的模板上傳異步事件及其事件名、該異步事件所在模塊所對(duì)應(yīng)的模塊名、該異步事件對(duì)應(yīng)的類或方法等,注冊(cè)裝置根據(jù)異步事件及其所在模塊所對(duì)應(yīng)的事件名和模塊名,在注冊(cè)中心進(jìn)行全局注冊(cè)。
例如,若異步服務(wù)的開發(fā)者是主服務(wù)內(nèi)部開發(fā)者,則開發(fā)者完成對(duì)異步事件及其對(duì)應(yīng)的執(zhí)行方法的開發(fā)后,聯(lián)系注冊(cè)中心,隨后,注冊(cè)裝置為異步事件指定執(zhí)行方法,此執(zhí)行方法可以是類和方法的實(shí)例。
若異步服務(wù)的開發(fā)者是第三方服務(wù)開發(fā)者,則開發(fā)者完成對(duì)異步事件及其對(duì)應(yīng)的執(zhí)行方法的開發(fā)后,聯(lián)系注冊(cè)中心,注冊(cè)裝置還可以檢查異步事件的事件名是否在注冊(cè)中心有重復(fù)注冊(cè)。若該異步事件的事件名有重名情況,則在注冊(cè)前要進(jìn)行事件名矯正,本著對(duì)第三方服務(wù)開發(fā)者便利的原則,注冊(cè)裝置會(huì)為每個(gè)第三方服務(wù)生成唯一內(nèi)部編號(hào),該唯一內(nèi)部編號(hào)作為前綴添加進(jìn)異步事件的事件名,完成事件名矯正,此矯正過程對(duì)第三方服務(wù)開發(fā)者無感知影響。這樣,注冊(cè)中心內(nèi)部查找異步事件時(shí)也可采用該唯一內(nèi)部編號(hào)。隨后,注冊(cè)裝置為異步事件指定執(zhí)行方法,例如可以通過網(wǎng)絡(luò)接收第三方服務(wù)開發(fā)者所遠(yuǎn)程傳輸和解析的序列化后的數(shù)據(jù)。
在此,重復(fù)注冊(cè)的情況往往出現(xiàn)在第三方服務(wù)向某個(gè)主服務(wù)的集成時(shí),因?yàn)榈谌椒?wù)開發(fā)者所要注冊(cè)的異步事件的事件名是模塊名加事件名,有一定可能與其它第三方服務(wù)開發(fā)者的命名出現(xiàn)重名的情況。而主服務(wù)內(nèi)部開發(fā)者在使用這套全局注冊(cè)機(jī)制時(shí),往往通過代碼校驗(yàn)或者內(nèi)部協(xié)調(diào),已提前規(guī)避此問題。
在此,對(duì)于異步服務(wù)的開發(fā)者是第三方服務(wù)開發(fā)者的情況,注冊(cè)中心可以提供統(tǒng)一的集成機(jī)制,例如提供統(tǒng)一的模板供第三方來填寫具體的異步事件及其對(duì)應(yīng)的類或方法并進(jìn)行提交,該注冊(cè)中心相當(dāng)于主服務(wù)來集成第三方所要提交的服務(wù),即異步事件與對(duì)應(yīng)的類或方法,對(duì)于第三方來講,其只關(guān)注什么樣的異步事件以及該異步事件是否解決,具體的則由注冊(cè)中心處理。
由于現(xiàn)有的異步事件的處理可能背后的代碼各式各樣,或者,對(duì)于多個(gè)異步事件,開發(fā)者分次寫代碼,異步事件多、代碼散亂,而在此,裝置1提供了一種統(tǒng)一的集成機(jī)制,開發(fā)者僅需按照框架模板填寫即可,方便快捷,同時(shí)框架統(tǒng)一,方便集成,采用同樣的協(xié)議和規(guī)范,不管是自己開發(fā),還是對(duì)外開放,都提供了便利,使得數(shù)據(jù)關(guān)聯(lián)性更強(qiáng);此外,由于業(yè)務(wù)系統(tǒng)有很多關(guān)聯(lián)關(guān)系,例如,發(fā)匯報(bào)/發(fā)外勤/日程提醒等都需要與其他模塊打通,在此,裝置1通過全局注冊(cè),使得對(duì)外打通對(duì)接更為便捷,實(shí)現(xiàn)高效地集成現(xiàn)有的資源。
優(yōu)選地,各個(gè)異步事件具有對(duì)應(yīng)的開關(guān),所述開關(guān)定義所述異步事件在注冊(cè)中心的插拔。
具體地,由于異步服務(wù)的開發(fā)者可能想在短期內(nèi)撤掉某個(gè)異步事件在注冊(cè)中心的注冊(cè),但又不想完全注銷該異步事件,這樣,可以為各個(gè)異步事件設(shè)置有對(duì)應(yīng)的開關(guān),所述開關(guān)定義所述異步事件在注冊(cè)中心的插拔。例如,若異步服務(wù)的開發(fā)者想在注冊(cè)中心短期內(nèi)撤掉某個(gè)異步事件,則該異步服務(wù)的開發(fā)者可以利用該異步事件對(duì)應(yīng)的開關(guān),撤掉該異步事件在注冊(cè)中心中與對(duì)應(yīng)的類或方法的映射關(guān)系,等到該異步服務(wù)的開發(fā)者哪天重新需要該異步事件時(shí),其不需要在注冊(cè)中心重新注冊(cè),而僅需要通過該開關(guān),在注冊(cè)中心重新插上該異步事件與其對(duì)應(yīng)的類或方法的映射關(guān)系即可。在此,通過該開關(guān)定義異步事件在注冊(cè)中心的插拔是一個(gè)動(dòng)態(tài)的過程。
在此,裝置1通過開關(guān)來定義異步事件在注冊(cè)中心的插拔,更有利于開發(fā)者的使用體驗(yàn)。
優(yōu)選地,該裝置1還包括提供裝置(未示出),該提供裝置根據(jù)對(duì)所述類或方法的執(zhí)行,獲得對(duì)應(yīng)的所述異步事件的執(zhí)行結(jié)果;將所述執(zhí)行結(jié)果提供給所述客戶端。
具體地,根據(jù)執(zhí)行裝置103對(duì)異步事件所對(duì)應(yīng)的類或方法的執(zhí)行,提供裝置獲得對(duì)應(yīng)的所述異步事件的執(zhí)行結(jié)果,隨后,該提供裝置將該執(zhí)行結(jié)果通過約定的提供方式,如通過JSP、PHP或ASP等動(dòng)態(tài)頁面技術(shù),提供給所述客戶端。
例如,主進(jìn)程中,響應(yīng)裝置101立即基于外勤請(qǐng)求向客戶端反饋外勤發(fā)送成功;同時(shí),在主進(jìn)程之外,申明裝置102異步申明與該請(qǐng)求對(duì)應(yīng)的一個(gè)異步事件“給客戶添加一條跟進(jìn)記錄”,并監(jiān)聽該異步事件;隨后,執(zhí)行裝置103根據(jù)該異步事件“給客戶添加一條跟進(jìn)記錄”,在注冊(cè)中心查找對(duì)應(yīng)的類或方法,如根據(jù)該異步事件在注冊(cè)中心的客戶關(guān)系管理系統(tǒng)中查找到了對(duì)應(yīng)的被注冊(cè)后的方法,該方法如記錄為客戶名下的一條相關(guān)跟進(jìn)記錄,該執(zhí)行裝置103即可以執(zhí)行該方法;接著,提供裝置例如通過約定的提供方式,在該客戶端的結(jié)果頁面中,將該相關(guān)跟進(jìn)記錄提供給客戶端對(duì)應(yīng)的用戶。
圖2示出根據(jù)本發(fā)明另一個(gè)方面的一種執(zhí)行異步事件的方法的流程示意圖。
在步驟S201中,裝置1基于主進(jìn)程中對(duì)應(yīng)的客戶端的請(qǐng)求,立即向所述客戶端返回與所述請(qǐng)求對(duì)應(yīng)的響應(yīng)。
具體地,客戶端請(qǐng)求了某個(gè)事件,則在主進(jìn)程中可立即對(duì)該事件進(jìn)行響應(yīng),在步驟S201中,裝置1在主進(jìn)程中,基于該客戶端的請(qǐng)求,立即向該客戶端返回與該請(qǐng)求對(duì)應(yīng)的響應(yīng),例如,假設(shè)客戶端請(qǐng)求了某個(gè)外勤事件,則在主進(jìn)程中,在步驟S201中,裝置1為該客戶發(fā)了一個(gè)外勤,立即向該客戶端反饋外勤發(fā)送成功,由此,客戶端可以立即獲得響應(yīng),對(duì)于使用該客戶端的用戶獲得較好的用戶使用體驗(yàn)。
在步驟S202中,裝置1在所述主進(jìn)程之外,異步申明與所述請(qǐng)求對(duì)應(yīng)的至少一個(gè)異步事件,并監(jiān)聽所述至少一個(gè)異步事件。
具體地,在主進(jìn)程之外,裝置1可以執(zhí)行與該請(qǐng)求對(duì)應(yīng)的其他異步事件,例如,在步驟S202中,裝置1在該主進(jìn)程之外,異步申明與所述請(qǐng)求對(duì)應(yīng)的至少一個(gè)異步事件,并監(jiān)聽該至少一個(gè)異步事件。如上例中,主進(jìn)程中,在步驟S201中,裝置1立即基于請(qǐng)求向客戶端反饋外勤發(fā)送成功;同時(shí),在主進(jìn)程之外,在步驟S202中,裝置1異步申明與該請(qǐng)求對(duì)應(yīng)的至少一個(gè)異步事件,如異步申明一個(gè)異步事件“給客戶添加一條跟進(jìn)記錄”,其實(shí)際需要游說轉(zhuǎn)化客戶,并監(jiān)聽該異步事件。
在步驟S203中,裝置1根據(jù)所述至少一個(gè)異步事件,在注冊(cè)中心查找對(duì)應(yīng)的類或方法并進(jìn)行執(zhí)行。
具體地,在步驟S203中,裝置1根據(jù)在步驟S202中所申明的至少一個(gè)異步事件,在注冊(cè)中心查找對(duì)應(yīng)的類或方法,并執(zhí)行該類或方法。如上例中,主進(jìn)程中,在步驟S201中,裝置1立即基于請(qǐng)求向客戶端反饋外勤發(fā)送成功;同時(shí),在主進(jìn)程之外,在步驟S202中,裝置1異步申明與該請(qǐng)求對(duì)應(yīng)的至少一個(gè)異步事件,如異步申明一個(gè)異步事件“給客戶添加一條跟進(jìn)記錄”,并監(jiān)聽該異步事件;隨后,在步驟S203中,裝置1根據(jù)該異步事件“給客戶添加一條跟進(jìn)記錄”,在注冊(cè)中心查找對(duì)應(yīng)的類或方法,如根據(jù)該異步事件在注冊(cè)中心的客戶關(guān)系管理系統(tǒng)中查找到了對(duì)應(yīng)的被注冊(cè)后的方法,該方法如記錄為客戶名下的一條相關(guān)跟進(jìn)記錄,該在步驟S203中,裝置1即可以執(zhí)行該方法。
在此,在注冊(cè)中心中查找異步事件對(duì)應(yīng)的類或方法,其是一個(gè)臨時(shí)的線程,不干擾主進(jìn)程的一個(gè)異步過程。
在此,裝置1基于主進(jìn)程中對(duì)應(yīng)的客戶端的請(qǐng)求,立即向該客戶端返回與所述請(qǐng)求對(duì)應(yīng)的響應(yīng),同時(shí),在主進(jìn)程之外,異步申明與該請(qǐng)求對(duì)應(yīng)的至少一個(gè)異步事件,并監(jiān)聽該至少一個(gè)異步事件,從而在注冊(cè)中心查找對(duì)應(yīng)的類或方法并進(jìn)行執(zhí)行,使得在快速、高效地響應(yīng)客戶端請(qǐng)求的同時(shí),異步執(zhí)行相應(yīng)的異步事件,提升客戶端用戶的使用體驗(yàn)。
優(yōu)選地,在步驟S203中,裝置1根據(jù)所述異步事件的事件名及其所在模塊的模塊名,在所述注冊(cè)中心查找對(duì)應(yīng)的類或方法并進(jìn)行執(zhí)行。
具體地,由于不同模塊中異步事件的事件名可能存在相同的情況,如果僅僅根據(jù)事件名去注冊(cè)中心查找,則可能會(huì)基于同一個(gè)事件名而查找到不同模塊對(duì)應(yīng)的類或方法,因此,在步驟S203中,裝置1根據(jù)異步事件的事件名及其所在模塊的模塊名,在所述注冊(cè)中心查找對(duì)應(yīng)的類或方法并進(jìn)行執(zhí)行。
在此,該注冊(cè)中心中存儲(chǔ)了大量異步事件及其對(duì)應(yīng)的類或方法的映射關(guān)系,其可以由異步事件的開發(fā)者進(jìn)行注冊(cè)。
更優(yōu)選地,該方法還包括步驟S204(未示出)。在步驟S204中,裝置1根據(jù)異步事件及其所在模塊所對(duì)應(yīng)的事件名和模塊名,在所述注冊(cè)中心進(jìn)行全局注冊(cè),其中,經(jīng)全局注冊(cè)后的模塊對(duì)外具有統(tǒng)一的集成方式。
具體地,異步服務(wù)的開發(fā)者,完成對(duì)異步事件及其對(duì)應(yīng)的執(zhí)行方法的開發(fā)后,聯(lián)系注冊(cè)中心,例如通過預(yù)定的模板上傳異步事件及其事件名、該異步事件所在模塊所對(duì)應(yīng)的模塊名、該異步事件對(duì)應(yīng)的類或方法等,在步驟S204中,裝置1根據(jù)異步事件及其所在模塊所對(duì)應(yīng)的事件名和模塊名,在注冊(cè)中心進(jìn)行全局注冊(cè)。
例如,若異步服務(wù)的開發(fā)者是主服務(wù)內(nèi)部開發(fā)者,則開發(fā)者完成對(duì)異步事件及其對(duì)應(yīng)的執(zhí)行方法的開發(fā)后,聯(lián)系注冊(cè)中心,隨后,在步驟S204中,裝置1為異步事件指定執(zhí)行方法,此執(zhí)行方法可以是類和方法的實(shí)例。
若異步服務(wù)的開發(fā)者是第三方服務(wù)開發(fā)者,則開發(fā)者完成對(duì)異步事件及其對(duì)應(yīng)的執(zhí)行方法的開發(fā)后,聯(lián)系注冊(cè)中心,在步驟S204中,裝置1還可以檢查異步事件的事件名是否在注冊(cè)中心有重復(fù)注冊(cè)。若該異步事件的事件名有重名情況,則在注冊(cè)前要進(jìn)行事件名矯正,本著對(duì)第三方服務(wù)開發(fā)者便利的原則,在步驟S204中,裝置1會(huì)為每個(gè)第三方服務(wù)生成唯一內(nèi)部編號(hào),該唯一內(nèi)部編號(hào)作為前綴添加進(jìn)異步事件的事件名,完成事件名矯正,此矯正過程對(duì)第三方服務(wù)開發(fā)者無感知影響。這樣,注冊(cè)中心內(nèi)部查找異步事件時(shí)也可采用該唯一內(nèi)部編號(hào)。隨后,在步驟S204中,裝置1為異步事件指定執(zhí)行方法,例如可以通過網(wǎng)絡(luò)接收第三方服務(wù)開發(fā)者所遠(yuǎn)程傳輸和解析的序列化后的數(shù)據(jù)。
在此,重復(fù)注冊(cè)的情況往往出現(xiàn)在第三方服務(wù)向某個(gè)主服務(wù)的集成時(shí),因?yàn)榈谌椒?wù)開發(fā)者所要注冊(cè)的異步事件的事件名是模塊名加事件名,有一定可能與其它第三方服務(wù)開發(fā)者的命名出現(xiàn)重名的情況。而主服務(wù)內(nèi)部開發(fā)者在使用這套全局注冊(cè)機(jī)制時(shí),往往通過代碼校驗(yàn)或者內(nèi)部協(xié)調(diào),已提前規(guī)避此問題。
在此,對(duì)于異步服務(wù)的開發(fā)者是第三方服務(wù)開發(fā)者的情況,注冊(cè)中心可以提供統(tǒng)一的集成機(jī)制,例如提供統(tǒng)一的模板供第三方來填寫具體的異步事件及其對(duì)應(yīng)的類或方法并進(jìn)行提交,該注冊(cè)中心相當(dāng)于主服務(wù)來集成第三方所要提交的服務(wù),即異步事件與對(duì)應(yīng)的類或方法,對(duì)于第三方來講,其只關(guān)注什么樣的異步事件以及該異步事件是否解決,具體的則由注冊(cè)中心處理。
由于現(xiàn)有的異步事件的處理可能背后的代碼各式各樣,或者,對(duì)于多個(gè)異步事件,開發(fā)者分次寫代碼,異步事件多、代碼散亂,而在此,裝置1提供了一種統(tǒng)一的集成機(jī)制,開發(fā)者僅需按照框架模板填寫即可,方便快捷,同時(shí)框架統(tǒng)一,方便集成,采用同樣的協(xié)議和規(guī)范,不管是自己開發(fā),還是對(duì)外開放,都提供了便利,使得數(shù)據(jù)關(guān)聯(lián)性更強(qiáng);此外,由于業(yè)務(wù)系統(tǒng)有很多關(guān)聯(lián)關(guān)系,例如,發(fā)匯報(bào)/發(fā)外勤/日程提醒等都需要與其他模塊打通,在此,裝置1通過全局注冊(cè),使得對(duì)外打通對(duì)接更為便捷,實(shí)現(xiàn)高效地集成現(xiàn)有的資源。
優(yōu)選地,各個(gè)異步事件具有對(duì)應(yīng)的開關(guān),所述開關(guān)定義所述異步事件在注冊(cè)中心的插拔。
具體地,由于異步服務(wù)的開發(fā)者可能想在短期內(nèi)撤掉某個(gè)異步事件在注冊(cè)中心的注冊(cè),但又不想完全注銷該異步事件,這樣,可以為各個(gè)異步事件設(shè)置有對(duì)應(yīng)的開關(guān),所述開關(guān)定義所述異步事件在注冊(cè)中心的插拔。例如,若異步服務(wù)的開發(fā)者想在注冊(cè)中心短期內(nèi)撤掉某個(gè)異步事件,則該異步服務(wù)的開發(fā)者可以利用該異步事件對(duì)應(yīng)的開關(guān),撤掉該異步事件在注冊(cè)中心中與對(duì)應(yīng)的類或方法的映射關(guān)系,等到該異步服務(wù)的開發(fā)者哪天重新需要該異步事件時(shí),其不需要在注冊(cè)中心重新注冊(cè),而僅需要通過該開關(guān),在注冊(cè)中心重新插上該異步事件與其對(duì)應(yīng)的類或方法的映射關(guān)系即可。在此,通過該開關(guān)定義異步事件在注冊(cè)中心的插拔是一個(gè)動(dòng)態(tài)的過程。
在此,裝置1通過開關(guān)來定義異步事件在注冊(cè)中心的插拔,更有利于開發(fā)者的使用體驗(yàn)。
優(yōu)選地,該方法還包括步驟S205(未示出),在步驟S205中,裝置1根據(jù)對(duì)所述類或方法的執(zhí)行,獲得對(duì)應(yīng)的所述異步事件的執(zhí)行結(jié)果;將所述執(zhí)行結(jié)果提供給所述客戶端。
具體地,根據(jù)在步驟S203裝置1對(duì)異步事件所對(duì)應(yīng)的類或方法的執(zhí)行,在步驟S205中,裝置1獲得對(duì)應(yīng)的所述異步事件的執(zhí)行結(jié)果,隨后,在步驟S205中,裝置1將該執(zhí)行結(jié)果通過約定的提供方式,如通過JSP、PHP或ASP等動(dòng)態(tài)頁面技術(shù),提供給所述客戶端。
例如,主進(jìn)程中,在步驟S201中,裝置1立即基于外勤請(qǐng)求向客戶端反饋外勤發(fā)送成功;同時(shí),在主進(jìn)程之外,在步驟S202中,裝置1異步申明與該請(qǐng)求對(duì)應(yīng)的一個(gè)異步事件“給客戶添加一條跟進(jìn)記錄”,并監(jiān)聽該異步事件;隨后,在步驟S203中,裝置1根據(jù)該異步事件“給客戶添加一條跟進(jìn)記錄”,在注冊(cè)中心查找對(duì)應(yīng)的類或方法,如根據(jù)該異步事件在注冊(cè)中心的客戶關(guān)系管理系統(tǒng)中查找到了對(duì)應(yīng)的被注冊(cè)后的方法,該方法如記錄為客戶名下的一條相關(guān)跟進(jìn)記錄,在步驟S203中,裝置1即可以執(zhí)行該方法;接著,在步驟S205中,裝置1例如通過約定的提供方式,在該客戶端的結(jié)果頁面中,將該相關(guān)跟進(jìn)記錄提供給客戶端對(duì)應(yīng)的用戶。
本發(fā)明還提供了一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)存儲(chǔ)有計(jì)算機(jī)代碼,當(dāng)所述計(jì)算機(jī)代碼被執(zhí)行時(shí),如前任一項(xiàng)所述的方法被執(zhí)行。
本發(fā)明還提供了一種計(jì)算機(jī)程序產(chǎn)品,當(dāng)所述計(jì)算機(jī)程序產(chǎn)品被計(jì)算機(jī)設(shè)備執(zhí)行時(shí),如前任一項(xiàng)所述的方法被執(zhí)行。
本發(fā)明還提供了一種計(jì)算機(jī)設(shè)備,所述計(jì)算機(jī)設(shè)備包括:
一個(gè)或多個(gè)處理器;
存儲(chǔ)器,用于存儲(chǔ)一個(gè)或多個(gè)計(jì)算機(jī)程序;
當(dāng)所述一個(gè)或多個(gè)計(jì)算機(jī)程序被所述一個(gè)或多個(gè)處理器執(zhí)行時(shí),使得所述一個(gè)或多個(gè)處理器實(shí)現(xiàn)如前任一項(xiàng)所述的方法。
需要注意的是,本發(fā)明可在軟件和/或軟件與硬件的組合體中被實(shí)施,例如,本發(fā)明的各個(gè)裝置可采用專用集成電路(ASIC)或任何其他類似硬件設(shè)備來實(shí)現(xiàn)。在一個(gè)實(shí)施例中,本發(fā)明的軟件程序可以通過處理器執(zhí)行以實(shí)現(xiàn)上文所述步驟或功能。同樣地,本發(fā)明的軟件程序(包括相關(guān)的數(shù)據(jù)結(jié)構(gòu))可以被存儲(chǔ)到計(jì)算機(jī)可讀記錄介質(zhì)中,例如,RAM存儲(chǔ)器,磁或光驅(qū)動(dòng)器或軟磁盤及類似設(shè)備。另外,本發(fā)明的一些步驟或功能可采用硬件來實(shí)現(xiàn),例如,作為與處理器配合從而執(zhí)行各個(gè)步驟或功能的電路。
對(duì)于本領(lǐng)域技術(shù)人員而言,顯然本發(fā)明不限于上述示范性實(shí)施例的細(xì)節(jié),而且在不背離本發(fā)明的精神或基本特征的情況下,能夠以其他的具體形式實(shí)現(xiàn)本發(fā)明。因此,無論從哪一點(diǎn)來看,均應(yīng)將實(shí)施例看作是示范性的,而且是非限制性的,本發(fā)明的范圍由所附權(quán)利要求而不是上述說明限定,因此旨在將落在權(quán)利要求的等同要件的含義和范圍內(nèi)的所有變化涵括在本發(fā)明內(nèi)。不應(yīng)將權(quán)利要求中的任何附圖標(biāo)記視為限制所涉及的權(quán)利要求。此外,顯然“包括”一詞不排除其他單元或步驟,單數(shù)不排除復(fù)數(shù)。系統(tǒng)權(quán)利要求中陳述的多個(gè)單元或裝置也可以由一個(gè)單元或裝置通過軟件或者硬件來實(shí)現(xiàn)。第一,第二等詞語用來表示名稱,而并不表示任何特定的順序。