本發(fā)明涉及消息處理技術(shù)領(lǐng)域,特別涉及一種消息監(jiān)聽處理方法及系統(tǒng)。
背景技術(shù):
傳統(tǒng)的通信方式主要采用如下方式進(jìn)行通信:客戶端向服務(wù)器發(fā)送信息,提出請(qǐng)求,服務(wù)器接收客戶端發(fā)來的請(qǐng)求,并能發(fā)送數(shù)據(jù)給客戶端以做出回應(yīng)。當(dāng)我們用瀏覽器瀏覽網(wǎng)頁,要查看某個(gè)文件時(shí),我們的電腦會(huì)發(fā)出請(qǐng)求給文件服務(wù)器,文件服務(wù)器收到請(qǐng)求并同意后,將文件數(shù)據(jù)傳送到我們的電腦。此時(shí),電腦充當(dāng)客戶端的角色。電腦要和文件服務(wù)器交流,必須要規(guī)定通信的規(guī)矩,即協(xié)議,傳統(tǒng)的協(xié)議比較復(fù)雜,大大降低了通信的效率,以及通信數(shù)據(jù)信息的準(zhǔn)確性。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題是提供一種消息監(jiān)聽處理方法,該方法通過消息服務(wù)器中存儲(chǔ)的消息處理類,初始化一個(gè)消息處理對(duì)象對(duì)發(fā)送到消息服務(wù)器的服務(wù)器消息進(jìn)行監(jiān)聽,并進(jìn)行處理,最終將處理結(jié)果返回消息服務(wù)器。
本發(fā)明解決上述技術(shù)問題的技術(shù)方案如下:一種消息監(jiān)聽處理方法,包括以下步驟:
s1、根據(jù)預(yù)存儲(chǔ)的服務(wù)器配置列表中配置文件的順序依次連接消息服務(wù)器;
s2、當(dāng)消息服務(wù)器連接成功時(shí),初始化所述消息服務(wù)器中存儲(chǔ)的消息處理類,得到至少一個(gè)消息處理對(duì)象,每個(gè)所述消息處理對(duì)象中包括至少一個(gè)消息監(jiān)聽器和至少一個(gè)消息執(zhí)行器,每個(gè)所述消息監(jiān)聽器實(shí)時(shí)監(jiān)聽所述消息服務(wù)器是否接收到新的服務(wù)器消息;
s3、當(dāng)所述消息服務(wù)器接收到新的服務(wù)器消息時(shí),監(jiān)聽到所述消息服務(wù)器接收到新的服務(wù)器消息的消息監(jiān)聽器根據(jù)接收到的服務(wù)器消息,從所述至少一個(gè)消息執(zhí)行器中找到至少一個(gè)匹配消息執(zhí)行器,通過所述至少一個(gè)匹配消息執(zhí)行器對(duì)所述服務(wù)器消息進(jìn)行處理,得到至少一個(gè)返回消息;
s4、確定所述服務(wù)器消息的消息生產(chǎn)者,通過所述消息生產(chǎn)者對(duì)所述至少一個(gè)返回消息進(jìn)行序列化和壓縮后,發(fā)送給所述消息服務(wù)器。
本發(fā)明的有益效果是:根據(jù)預(yù)存儲(chǔ)的服務(wù)器配置列表依次連接消息服務(wù)器,在連接上消息服務(wù)器后,初始化消息服務(wù)器中存儲(chǔ)的消息處理類,得到至少一個(gè)消息處理對(duì)象,對(duì)消息服務(wù)器是否接收到服務(wù)器消息進(jìn)行監(jiān)聽,并對(duì)接收到的服務(wù)器消息進(jìn)行處理,通過消息生產(chǎn)者將返回消息處理后發(fā)送給消息服務(wù)器,通信效率較高,滿足不同場(chǎng)合的通信需求。
在上述技術(shù)方案的基礎(chǔ)上,本發(fā)明還可以做如下改進(jìn)。
進(jìn)一步,s1中具體包括:
s11、從預(yù)存儲(chǔ)的數(shù)據(jù)庫單元中獲取服務(wù)器配置列表;
s12、通過所述服務(wù)器配置列表中配置文件的順序依次連接消息服務(wù)器,當(dāng)連接消息服務(wù)器失敗時(shí),再次連接所述消息服務(wù)器,當(dāng)連接所述消息服務(wù)器失敗的次數(shù)達(dá)到預(yù)設(shè)次數(shù)后,連接下一個(gè)消息服務(wù)器,當(dāng)所有的消息服務(wù)器均連接失敗的時(shí)候,消息處理服務(wù)啟動(dòng)失?。?/p>
其中所述配置文件包括:消息服務(wù)器的子系統(tǒng)名稱信息、隊(duì)列線程名稱信息、消息服務(wù)器url地址信息、消息服務(wù)器狀態(tài)信息。
采用上述進(jìn)一步方案的有益效果是:通過服務(wù)器配置列表依次連接消息服務(wù)器,并在消息服務(wù)器連接失敗時(shí),嘗試重新連接該消息服務(wù)器,防止網(wǎng)絡(luò)問題導(dǎo)致的連接失敗。
進(jìn)一步,所述服務(wù)器消息包括:消息名稱信息、消息標(biāo)識(shí)信息、指令信息和返回消息獲取時(shí)間間隔信息;s3中具體包括:
s31、所述消息監(jiān)聽器根據(jù)接收到的服務(wù)器消息包括的所述消息名稱信息,從所述至少一個(gè)消息執(zhí)行器中找到至少一個(gè)匹配消息執(zhí)行器;
s32、判斷所述至少一個(gè)匹配消息執(zhí)行器是否都為空,否,則通過所述至少一個(gè)匹配消息執(zhí)行器中不為空的匹配消息執(zhí)行器根據(jù)所述指令信息對(duì)所述服務(wù)器消息進(jìn)行處理,得到至少一個(gè)返回消息;是,則根據(jù)預(yù)存儲(chǔ)的服務(wù)器配置列表中配置文件的順序重新依次連接消息服務(wù)器。
采用上述進(jìn)一步方案的有益效果是:根據(jù)服務(wù)器消息的內(nèi)容判斷消息服務(wù)器需要多少個(gè)消息執(zhí)行器進(jìn)行處理,從消息執(zhí)行器中找到至少一個(gè)匹配消息執(zhí)行器按指令信息對(duì)服務(wù)器消息進(jìn)行處理。
進(jìn)一步,s4中具體包括:
根據(jù)所述消息名稱信息和所述消息標(biāo)識(shí)信息確認(rèn)所述服務(wù)器消息的類型;
當(dāng)所述服務(wù)器消息為同步消息時(shí),將處理所述服務(wù)器消息的業(yè)務(wù)線程設(shè)置為阻塞等待狀態(tài),直到所述至少一個(gè)消息處理對(duì)象返回所述服務(wù)器消息對(duì)應(yīng)的至少一個(gè)返回消息;
初始化一個(gè)數(shù)組對(duì)象,將所述消息標(biāo)識(shí)信息和所述數(shù)組對(duì)象對(duì)應(yīng)存儲(chǔ)在第一字典中,將所述數(shù)組對(duì)象和所述至少一個(gè)返回消息對(duì)應(yīng)存儲(chǔ)在第二字典中;
確定與所述消息名稱信息對(duì)應(yīng)的隊(duì)列線程名稱信息,根據(jù)所述隊(duì)列線程名稱信息確定所述服務(wù)器消息的消息生產(chǎn)者,當(dāng)所述消息生產(chǎn)者為空時(shí),根據(jù)所述隊(duì)列線程名稱信息生成一個(gè)消息生產(chǎn)者;
所述消息生產(chǎn)者根據(jù)所述消息標(biāo)識(shí)信息從所述第一字典中獲取對(duì)應(yīng)的數(shù)組對(duì)象,并根據(jù)所述數(shù)組對(duì)象從所述第二字典中獲取對(duì)應(yīng)的所述至少一個(gè)返回消息;
判斷所述至少一個(gè)返回消息是否都為空,是,則根據(jù)返回消息獲取時(shí)間間隔信息等待指定時(shí)間后,所述消息生產(chǎn)者根據(jù)所述第一字典和第二字典重新獲取所述至少一個(gè)返回消息;否,則通過所述消息生產(chǎn)者將所述至少一個(gè)返回消息中不為空的返回消息進(jìn)行序列化和壓縮后,發(fā)送給所述消息服務(wù)器;
消息服務(wù)器接收反饋的返回消息,將所述返回消息設(shè)置為所述服務(wù)器消息的答復(fù)消息,通知所述業(yè)務(wù)線程結(jié)束阻塞等待狀態(tài)。
采用上述進(jìn)一步方案的有益效果是:利用線程阻塞實(shí)現(xiàn)了異步通信方式下的同步等待,實(shí)現(xiàn)了與服務(wù)端之間的消息交互處理,通信效率較高,實(shí)現(xiàn)了同步與異步相結(jié)合的通信方式,滿足不同場(chǎng)合的通信需求。
進(jìn)一步,還包括s5,對(duì)接收到的所述至少一個(gè)返回消息進(jìn)行解壓和反序列化,還原所述至少一個(gè)返回消息的消息內(nèi)容。
采用上述進(jìn)一步方案的有益效果是:對(duì)接收到的數(shù)據(jù)進(jìn)行解壓和反序列化處理,得到原消息內(nèi)容,保證信息安全性。
本發(fā)明還提供實(shí)現(xiàn)上述方法的一種消息監(jiān)聽處理系統(tǒng),包括:至少一個(gè)消息服務(wù)器和消息服務(wù)器連接模塊;每個(gè)所述消息服務(wù)器包括:消息處理對(duì)象初始化單元、消息處理單元、消息發(fā)送單元和數(shù)據(jù)庫單元;
所述消息服務(wù)器連接模塊,用于根據(jù)預(yù)存儲(chǔ)的服務(wù)器配置列表中配置文件的順序依次連接消息服務(wù)器;
所述消息處理對(duì)象初始化單元,用于當(dāng)消息服務(wù)器連接成功時(shí),初始化所述消息服務(wù)器中存儲(chǔ)的消息處理類,得到至少一個(gè)消息處理對(duì)象,每個(gè)所述消息處理對(duì)象中包括至少一個(gè)消息監(jiān)聽器和至少一個(gè)消息執(zhí)行器,每個(gè)所述消息監(jiān)聽器實(shí)時(shí)監(jiān)聽所述消息服務(wù)器是否接收到新的服務(wù)器消息;
所述消息處理單元,用于當(dāng)所述消息服務(wù)器接收到新的服務(wù)器消息時(shí),監(jiān)聽到所述消息服務(wù)器接收到新的服務(wù)器消息的消息監(jiān)聽器根據(jù)接收到的服務(wù)器消息,從所述至少一個(gè)消息執(zhí)行器中找到至少一個(gè)匹配消息執(zhí)行器,通過所述至少一個(gè)匹配消息執(zhí)行器對(duì)所述服務(wù)器消息進(jìn)行處理,得到至少一個(gè)返回消息;
所述消息發(fā)送單元,用于確定所述服務(wù)器消息的消息生產(chǎn)者,通過所述消息生產(chǎn)者對(duì)所述至少一個(gè)返回消息進(jìn)行序列化和壓縮后,發(fā)送給所述數(shù)據(jù)庫單元。
進(jìn)一步,所述消息服務(wù)器連接模塊,具體用于,
從所述數(shù)據(jù)庫單元中獲取服務(wù)器配置列表;
通過所述服務(wù)器配置列表中配置文件的順序依次連接消息服務(wù)器,當(dāng)連接消息服務(wù)器失敗時(shí),再次連接所述消息服務(wù)器,當(dāng)連接所述消息服務(wù)器失敗的次數(shù)達(dá)到預(yù)設(shè)次數(shù)后,連接下一個(gè)消息服務(wù)器,當(dāng)所有的消息服務(wù)器均連接失敗的時(shí)候,消息處理服務(wù)啟動(dòng)失?。?/p>
其中所述配置文件包括:消息服務(wù)器的子系統(tǒng)名稱信息、隊(duì)列線程名稱信息、消息服務(wù)器url地址信息、消息服務(wù)器狀態(tài)信息。
進(jìn)一步,所述服務(wù)器消息包括:消息名稱信息、消息標(biāo)識(shí)信息、指令信息和返回消息獲取時(shí)間間隔信息;
所述消息處理單元,具體用于,
所述消息監(jiān)聽器根據(jù)接收到的服務(wù)器消息包括的所述消息名稱信息,從所述至少一個(gè)消息執(zhí)行器中找到至少一個(gè)匹配消息執(zhí)行器;
判斷所述至少一個(gè)匹配消息執(zhí)行器是否都為空,否,則通過所述至少一個(gè)匹配消息執(zhí)行器中不為空的匹配消息執(zhí)行器根據(jù)所述指令信息對(duì)所述服務(wù)器消息進(jìn)行處理,得到至少一個(gè)返回消息;是,則根據(jù)預(yù)存儲(chǔ)的服務(wù)器配置列表中配置文件的順序重新依次連接消息服務(wù)器。
進(jìn)一步,所述消息服務(wù)器還包括:判斷單元和接收處理模塊;
所述消息發(fā)送單元,具體用于,
通過判斷單元根據(jù)所述消息名稱信息和所述消息標(biāo)識(shí)信息確認(rèn)所述服務(wù)器消息的類型;
當(dāng)所述服務(wù)器消息為同步消息時(shí),
當(dāng)所述服務(wù)器消息為同步消息時(shí),將處理所述服務(wù)器消息的業(yè)務(wù)線程設(shè)置為阻塞等待狀態(tài),直到所述至少一個(gè)消息處理對(duì)象返回所述服務(wù)器消息對(duì)應(yīng)的至少一個(gè)返回消息;
初始化一個(gè)數(shù)組對(duì)象,將所述消息標(biāo)識(shí)信息和所述數(shù)組對(duì)象對(duì)應(yīng)存儲(chǔ)在第一字典中,將所述數(shù)組對(duì)象和所述至少一個(gè)返回消息對(duì)應(yīng)存儲(chǔ)在第二字典中;
確定與所述消息名稱信息對(duì)應(yīng)的隊(duì)列線程名稱信息,根據(jù)所述隊(duì)列線程名稱信息確定所述服務(wù)器消息的消息生產(chǎn)者,當(dāng)所述消息生產(chǎn)者為空時(shí),根據(jù)所述隊(duì)列線程名稱信息生成一個(gè)消息生產(chǎn)者;
所述消息生產(chǎn)者根據(jù)所述消息標(biāo)識(shí)信息從所述第一字典中獲取對(duì)應(yīng)的數(shù)組對(duì)象,并根據(jù)所述數(shù)組對(duì)象從所述第二字典中獲取對(duì)應(yīng)的所述至少一個(gè)返回消息;
判斷所述至少一個(gè)返回消息是否都為空,是,則根據(jù)返回消息獲取時(shí)間間隔信息等待指定時(shí)間后,所述消息生產(chǎn)者根據(jù)所述第一字典和第二字典重新獲取所述至少一個(gè)返回消息;否,則通過所述消息生產(chǎn)者將所述至少一個(gè)返回消息中不為空的返回消息進(jìn)行序列化和壓縮后,發(fā)送給所述數(shù)據(jù)庫單元;
當(dāng)所述數(shù)據(jù)庫單元接收到所述至少一個(gè)返回消息時(shí),消息服務(wù)器通過所述接收處理單元將所述返回消息設(shè)置為所述服務(wù)器消息的答復(fù)消息,通知所述業(yè)務(wù)線程結(jié)束阻塞等待狀態(tài)。
進(jìn)一步,所述消息處理器還包括:數(shù)據(jù)恢復(fù)單元;用于對(duì)接收到的所述至少一個(gè)返回消息進(jìn)行解壓和反序列化,還原所述至少一個(gè)返回消息的消息內(nèi)容。
附圖說明
圖1為本發(fā)明實(shí)施例提供的一種消息監(jiān)聽處理方法流程示意圖;
圖2為本發(fā)明實(shí)施例提供的一種消息監(jiān)聽處理系統(tǒng)結(jié)構(gòu)示意圖;
圖3為本發(fā)明實(shí)施例提供的一種消息監(jiān)聽處理系統(tǒng)中消息服務(wù)器結(jié)構(gòu)示意圖。
具體實(shí)施方式
以下結(jié)合附圖對(duì)本發(fā)明的原理和特征進(jìn)行描述,所舉實(shí)例只用于解釋本發(fā)明,并非用于限定本發(fā)明的范圍。
如圖1所示,一種消息監(jiān)聽處理方法,包括以下步驟:
s1、根據(jù)預(yù)存儲(chǔ)的服務(wù)器配置列表中配置文件的順序依次連接消息服務(wù)器;
s2、當(dāng)消息服務(wù)器連接成功時(shí),初始化消息服務(wù)器中存儲(chǔ)的消息處理類,得到至少一個(gè)消息處理對(duì)象,每個(gè)消息處理對(duì)象中包括至少一個(gè)消息監(jiān)聽器和至少一個(gè)消息執(zhí)行器,每個(gè)消息監(jiān)聽器實(shí)時(shí)監(jiān)聽消息服務(wù)器是否接收到新的服務(wù)器消息;
s3、當(dāng)消息服務(wù)器接收到新的服務(wù)器消息時(shí),監(jiān)聽到消息服務(wù)器接收到新的服務(wù)器消息的消息監(jiān)聽器根據(jù)接收到的服務(wù)器消息,從至少一個(gè)消息執(zhí)行器中找到至少一個(gè)匹配消息執(zhí)行器,通過至少一個(gè)匹配消息執(zhí)行器對(duì)服務(wù)器消息進(jìn)行處理,得到至少一個(gè)返回消息;
s4、確定服務(wù)器消息的消息生產(chǎn)者,通過消息生產(chǎn)者對(duì)至少一個(gè)返回消息進(jìn)行序列化和壓縮后,發(fā)送給消息服務(wù)器。
上述實(shí)施例中,客戶端根據(jù)預(yù)存儲(chǔ)的服務(wù)器配置列表依次連接消息服務(wù)器,在連接上消息服務(wù)器后,初始化消息服務(wù)器中存儲(chǔ)的消息處理類,得到至少一個(gè)消息處理對(duì)象,對(duì)消息服務(wù)器是否接收到客戶端發(fā)送的服務(wù)器消息進(jìn)行監(jiān)聽,并對(duì)接收到的服務(wù)器消息進(jìn)行處理,通過消息生產(chǎn)者將返回消息處理后發(fā)送給消息服務(wù)器,實(shí)現(xiàn)了客戶端與服務(wù)端之間的消息交互處理,通信效率較高,滿足不同場(chǎng)合的通信需求。
上述實(shí)施例中出現(xiàn)的消息生產(chǎn)者表達(dá)的意思并不是發(fā)送服務(wù)器消息的消息生產(chǎn)者,而是消息處理技術(shù)領(lǐng)域中進(jìn)行消息反饋的對(duì)象的專業(yè)名詞,如上述消息處理對(duì)象,在消息處理技術(shù)領(lǐng)域中代表其功能的專業(yè)名詞為消息消費(fèi)者。
如圖2所示,本發(fā)明還提供實(shí)現(xiàn)上述方法的一種消息監(jiān)聽處理系統(tǒng),包括:至少一個(gè)消息服務(wù)器和消息服務(wù)器連接模塊;如圖3所示,每個(gè)消息服務(wù)器包括:消息處理對(duì)象初始化單元、消息處理單元、消息發(fā)送單元和數(shù)據(jù)庫單元;
消息服務(wù)器連接模塊,用于根據(jù)預(yù)存儲(chǔ)的服務(wù)器配置列表中配置文件的順序依次連接消息服務(wù)器;
消息處理對(duì)象初始化單元,用于當(dāng)消息服務(wù)器連接成功時(shí),將此消息服務(wù)器的active狀態(tài)設(shè)置為true,初始化消息服務(wù)器中存儲(chǔ)的消息處理類,得到至少一個(gè)消息處理對(duì)象,每個(gè)消息處理對(duì)象中包括至少一個(gè)消息監(jiān)聽器和至少一個(gè)消息執(zhí)行器,每個(gè)消息監(jiān)聽器實(shí)時(shí)監(jiān)聽消息服務(wù)器是否接收到新的服務(wù)器消息;
消息處理單元,用于當(dāng)消息服務(wù)器接收到新的服務(wù)器消息時(shí),監(jiān)聽到消息服務(wù)器接收到新的服務(wù)器消息的消息監(jiān)聽器根據(jù)接收到的服務(wù)器消息,從至少一個(gè)消息執(zhí)行器中找到至少一個(gè)匹配消息執(zhí)行器,通過至少一個(gè)匹配消息執(zhí)行器對(duì)服務(wù)器消息進(jìn)行處理,得到至少一個(gè)返回消息;
消息發(fā)送單元,用于確定服務(wù)器消息的消息生產(chǎn)者,通過消息生產(chǎn)者對(duì)至少一個(gè)返回消息進(jìn)行序列化和壓縮后,發(fā)送給數(shù)據(jù)庫單元。
優(yōu)選的,消息服務(wù)器連接模塊,具體用于,
從數(shù)據(jù)庫單元中獲取服務(wù)器配置列表;
通過服務(wù)器配置列表中配置文件的順序依次連接消息服務(wù)器,當(dāng)連接消息服務(wù)器失敗時(shí),再次連接消息服務(wù)器,當(dāng)連接消息服務(wù)器失敗的次數(shù)達(dá)到預(yù)設(shè)次數(shù)后,連接下一個(gè)消息服務(wù)器,當(dāng)所有的消息服務(wù)器均連接失敗的時(shí)候,消息處理服務(wù)啟動(dòng)失敗,連接不成功的原因可能是很多,這里有一個(gè)重試的過程,避免非必要因素導(dǎo)致的消息服務(wù)器連接失敗的情況出現(xiàn),如網(wǎng)絡(luò)連接不通暢的原因?qū)е碌倪B接失敗,通過服務(wù)器消息找到隊(duì)列線程名稱信息,通過隊(duì)列線程名稱信息找到注冊(cè)的消息監(jiān)聽器,如果允許多個(gè)消息監(jiān)聽器,那么實(shí)例化多個(gè)消息監(jiān)聽器給這個(gè)消息;
其中配置文件包括:消息服務(wù)器的子系統(tǒng)名稱信息、隊(duì)列線程名稱信息、消息服務(wù)器url地址信息、消息服務(wù)器狀態(tài)信息。
優(yōu)選的,服務(wù)器消息包括:消息名稱信息、消息標(biāo)識(shí)信息、指令信息和返回消息獲取時(shí)間間隔信息;
消息處理單元,具體用于,
消息監(jiān)聽器根據(jù)接收到的服務(wù)器消息包括的消息名稱信息,從至少一個(gè)消息執(zhí)行器中找到至少一個(gè)匹配消息執(zhí)行器;
判斷至少一個(gè)匹配消息執(zhí)行器是否都為空,否,則通過至少一個(gè)匹配消息執(zhí)行器中不為空的匹配消息執(zhí)行器根據(jù)指令信息對(duì)服務(wù)器消息進(jìn)行處理,得到至少一個(gè)返回消息;是,則根據(jù)預(yù)存儲(chǔ)的服務(wù)器配置列表中配置文件的順序重新依次連接消息服務(wù)器。
優(yōu)選的,消息服務(wù)器還包括:判斷單元和接收處理模塊;
消息發(fā)送單元,具體用于,
通過判斷單元根據(jù)消息名稱信息和消息標(biāo)識(shí)信息確認(rèn)服務(wù)器消息的類型;
當(dāng)服務(wù)器消息為同步消息時(shí),
將處理服務(wù)器消息的業(yè)務(wù)線程設(shè)置為阻塞等待狀態(tài),直到至少一個(gè)消息處理對(duì)象返回服務(wù)器消息對(duì)應(yīng)的至少一個(gè)返回消息;
初始化一個(gè)數(shù)組對(duì)象,將消息標(biāo)識(shí)信息和數(shù)組對(duì)象對(duì)應(yīng)存儲(chǔ)在第一字典中,將數(shù)組對(duì)象和至少一個(gè)返回消息對(duì)應(yīng)存儲(chǔ)在第二字典中;
確定與消息名稱信息對(duì)應(yīng)的隊(duì)列線程名稱信息,根據(jù)隊(duì)列線程名稱信息確定服務(wù)器消息的消息生產(chǎn)者,當(dāng)消息生產(chǎn)者為空時(shí),根據(jù)隊(duì)列線程名稱信息生成一個(gè)消息生產(chǎn)者;
消息生產(chǎn)者根據(jù)消息標(biāo)識(shí)信息從第一字典中獲取對(duì)應(yīng)的數(shù)組對(duì)象,并根據(jù)數(shù)組對(duì)象從第二字典中獲取對(duì)應(yīng)的至少一個(gè)返回消息;
判斷至少一個(gè)返回消息是否都為空,是,則根據(jù)返回消息獲取時(shí)間間隔信息等待指定時(shí)間后,消息生產(chǎn)者根據(jù)第一字典和第二字典重新獲取至少一個(gè)返回消息;否,則通過消息生產(chǎn)者將至少一個(gè)返回消息中不為空的返回消息進(jìn)行序列化和壓縮后,發(fā)送給數(shù)據(jù)庫單元;
具體的,將rpcwaitingthreads變量設(shè)置為多線程同步等待的鎖,需要等待的業(yè)務(wù)線程會(huì)把消息標(biāo)識(shí)和子線程對(duì)象存儲(chǔ)在map中,能取得返回消息的運(yùn)算線程也會(huì)放到該map中;當(dāng)發(fā)送到消息服務(wù)器,需要等待消息服務(wù)器返回信息的時(shí),把這個(gè)業(yè)務(wù)線程的信息記錄下來,map變量名:rpcwaitingthreads,map對(duì)象中將消息標(biāo)識(shí)和子線程對(duì)象對(duì)應(yīng)存儲(chǔ)為鍵值對(duì),map對(duì)象中還將子線程對(duì)象和運(yùn)算線程對(duì)象對(duì)應(yīng)存儲(chǔ)為鍵值對(duì)。
當(dāng)數(shù)據(jù)庫單元接收到至少一個(gè)返回消息時(shí),消息服務(wù)器通過接收處理單元將返回消息設(shè)置為服務(wù)器消息的答復(fù)消息,通知業(yè)務(wù)線程結(jié)束阻塞等待狀態(tài);
具體的,對(duì)獲取到的返回消息的處理,當(dāng)前線程鎖定map變量名:rpcwaitingthreads,通過消息標(biāo)識(shí)獲取到子線程對(duì)象,從子線程對(duì)象獲取運(yùn)算線程對(duì)象,根據(jù)運(yùn)算線程對(duì)象取得返回消息,當(dāng)運(yùn)算線程對(duì)象為空時(shí),根據(jù)返回消息獲取時(shí)間間隔信息等待指定時(shí)間后,再次調(diào)用返回消息的處理,直到取得返回結(jié)果。
優(yōu)選的,線程鎖rpcwaitingthreads處理邏輯還包括:通過消息標(biāo)識(shí)找到子線程對(duì)象,把獲取的返回消息帶的參數(shù)代入map中,關(guān)鍵字返回消息,從子線程對(duì)象中找到阻塞的運(yùn)算線程,并通知其他因阻塞而等待的線程繼續(xù)執(zhí)行,讓與阻塞的運(yùn)算線程無關(guān)的運(yùn)算線程繼續(xù)運(yùn)行。
當(dāng)服務(wù)器消息為異步消息時(shí),
根據(jù)消息名稱信息找到隊(duì)列線程名稱信息,通過隊(duì)列線程名稱信息找到消息生產(chǎn)者,當(dāng)消息生產(chǎn)者為空時(shí),根據(jù)隊(duì)列線程名稱信息生成一個(gè)消息生產(chǎn)者;
通過消息生產(chǎn)者將返回消息序列化和壓縮操作后,反饋給消息服務(wù)器;
消息服務(wù)器通過接收處理單元接收反饋的返回消息,讀取返回消息中的數(shù)據(jù)信息,并將數(shù)據(jù)信息從字節(jié)流轉(zhuǎn)換為消息格式,并調(diào)用socket連接對(duì)象的數(shù)據(jù)處理方法對(duì)消息格式的數(shù)據(jù)信息進(jìn)行處理。
優(yōu)選的,消息處理器還包括:數(shù)據(jù)恢復(fù)單元;用于對(duì)接收到的至少一個(gè)返回消息進(jìn)行解壓和反序列化,還原至少一個(gè)返回消息的消息內(nèi)容。
以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。