用于軟件系統(tǒng)的多進(jìn)程通訊方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種用于軟件系統(tǒng)的多進(jìn)程通訊方法及系統(tǒng)。其中,該方法包括:生成進(jìn)程消息;將進(jìn)程消息發(fā)送至消息隊列服務(wù)器;從消息隊列服務(wù)器提取進(jìn)程消息;對進(jìn)程消息進(jìn)行數(shù)據(jù)加工處理生成處理結(jié)果。通過本發(fā)明,解決了現(xiàn)有技術(shù)中采用統(tǒng)一的消息格式進(jìn)行各組件進(jìn)程之間的會話,耗費(fèi)大量資源且會產(chǎn)生通信阻塞,導(dǎo)致系統(tǒng)的穩(wěn)定性差的問題,通過消息隊列服務(wù)器實現(xiàn)了進(jìn)程之間的會話,降低了各個進(jìn)程之間的耦合性,節(jié)省系統(tǒng)資源,增加了系統(tǒng)的穩(wěn)定性。
【專利說明】用于軟件系統(tǒng)的多進(jìn)程通訊方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及通訊領(lǐng)域,具體而言,涉及一種用于軟件系統(tǒng)的多進(jìn)程通訊方法及系統(tǒng)。
【背景技術(shù)】
[0002]現(xiàn)有技術(shù)中在大型軟件系統(tǒng)的各組件進(jìn)程之間統(tǒng)一通信的通用消息總線的實現(xiàn)方法,只要是設(shè)置各組件進(jìn)程間的通信都必須采用的統(tǒng)一、規(guī)范的通用消息的格式,且以SESSION形式交互消息;同時,還要求各組件進(jìn)程間通信的通用消息按照設(shè)定的路由算法進(jìn)行分發(fā)。這樣做具有如下兩個主要缺點:通信必須采用統(tǒng)一規(guī)范的通用消息格式,如果軟件升級擴(kuò)展原有消息格式不再適用,則所有組件即便理論上未受到新格式影響都需要升級;以SESSION形式交互消息,這樣消息發(fā)送方和接收方需要建立會話,在消息處理過程中雙方具有強(qiáng)耦合的關(guān)系,這樣整個系統(tǒng)的性能被降低到性能最低的組件進(jìn)程的性能水平上,對于并發(fā)計算量巨大的軟件系統(tǒng),這會導(dǎo)致空耗大量操作系統(tǒng)連接資源并可能對新的通信產(chǎn)生阻塞,影響系統(tǒng)的整體處理能力。
[0003]針對現(xiàn)有技術(shù)中采用統(tǒng)一的消息格式進(jìn)行各組件進(jìn)程之間的會話,耗費(fèi)大量資源且會產(chǎn)生通信阻塞,導(dǎo)致系統(tǒng)的穩(wěn)定性差的問題,目前尚未提出有效的解決方案。
【發(fā)明內(nèi)容】
[0004]針對相關(guān)技術(shù)中采用統(tǒng)一的消息格式進(jìn)行各組件進(jìn)程之間的會話,耗費(fèi)大量資源且會產(chǎn)生通信阻塞,導(dǎo)致系統(tǒng)的穩(wěn)定性用于軟件系統(tǒng)的多進(jìn)程通訊方法及系統(tǒng),以解決上述問題。
[0005]為了實現(xiàn)上述目的,根據(jù)本發(fā)明的一個方面,提供了一種用于軟件系統(tǒng)的多進(jìn)程通訊方法,該方法包括:生成進(jìn)程消息;將進(jìn)程消息發(fā)送至消息隊列服務(wù)器;從消息隊列服務(wù)器提取進(jìn)程消息;對進(jìn)程消息進(jìn)行數(shù)據(jù)加工處理生成處理結(jié)果。
[0006]進(jìn)一步地,進(jìn)程消息包括消息標(biāo)識,消息隊列服務(wù)器包括一個或多個消息隊列,其中,將進(jìn)程消息發(fā)送至消息隊列服務(wù)器的步驟包括:獲取與消息標(biāo)識對應(yīng)的消息隊列;將進(jìn)程消息發(fā)送至消息隊列。
[0007]進(jìn)一步地,在對進(jìn)程消息進(jìn)行數(shù)據(jù)加工處理生成處理結(jié)果之后,方法還包括:將處理結(jié)果保存進(jìn)鍵值存儲數(shù)據(jù)庫。
[0008]進(jìn)一步地,對進(jìn)程消息進(jìn)行數(shù)據(jù)加工處理生成處理結(jié)果的步驟包括:判斷對進(jìn)程消息的處理是否成功;在對進(jìn)程消息的處理成功的情況下,獲取第一處理結(jié)果,其中,第一處理結(jié)果為處理成功的處理結(jié)果;在對進(jìn)程消息的處理不成功的情況下,獲取第二處理結(jié)果,其中,第二處理結(jié)果為處理不成功的處理結(jié)果。
[0009]進(jìn)一步地,在將處理結(jié)果保存進(jìn)鍵值存儲數(shù)據(jù)庫之后,方法還包括:檢測鍵值存儲數(shù)據(jù)庫中是否存在與進(jìn)程消息對應(yīng)的處理結(jié)果;在鍵值存儲數(shù)據(jù)庫中存在與進(jìn)程消息對應(yīng)的處理結(jié)果的情況下,判斷對進(jìn)程消息的處理是否成功;在確認(rèn)對進(jìn)程消息處理成功的情況下,記錄處理結(jié)果;在確認(rèn)對進(jìn)程消息處理不成功的情況下,判斷是否重新發(fā)送進(jìn)程消息;在確認(rèn)重新發(fā)送進(jìn)程消息的情況下,重新發(fā)送進(jìn)程消息;在確認(rèn)不重新發(fā)送進(jìn)程消息的情況下,將處理結(jié)果記為錯誤結(jié)果;在鍵值存儲數(shù)據(jù)庫中不存在與進(jìn)程消息對應(yīng)的處理結(jié)果的情況下,檢測是否需要等待處理結(jié)果;在需要等待處理結(jié)果的情況下,將對進(jìn)程消息的處理結(jié)果記作超時結(jié)果。
[0010]進(jìn)一步地,判斷對進(jìn)程消息的處理是否成功的步驟包括:判斷處理結(jié)果是第一處理結(jié)果或者第二處理結(jié)果;在處理結(jié)果是第一處理結(jié)果的情況下,確認(rèn)對進(jìn)程消息處理成功;在處理結(jié)果是第二處理結(jié)果的情況下,確認(rèn)對進(jìn)程消息處理不成功。
[0011]為了實現(xiàn)上述目的,根據(jù)本發(fā)明的另一方面,提供了一種用于軟件系統(tǒng)的多進(jìn)程通訊系統(tǒng),該系統(tǒng)包括:發(fā)送方進(jìn)程,用于生成進(jìn)程消息,將進(jìn)程消息發(fā)送至消息隊列服務(wù)器;消息隊列服務(wù)器,與發(fā)送方進(jìn)程連接,用于存儲進(jìn)程消息;接收方進(jìn)程,與消息隊列服務(wù)器連接,用于從消息隊列服務(wù)器中提取進(jìn)程消息,并對進(jìn)程消息進(jìn)行數(shù)據(jù)加工處理生成處理結(jié)果。
[0012]進(jìn)一步地,進(jìn)程消息包括消息標(biāo)識,消息隊列服務(wù)器包括一個或多個消息隊列,發(fā)送方進(jìn)程在獲取與消息標(biāo)識對應(yīng)的消息隊列之后,將進(jìn)程消息發(fā)送至消息隊列。
[0013]進(jìn)一步地,系統(tǒng)還包括:鍵值存儲數(shù)據(jù)庫,與接收方進(jìn)程連接,用于存儲處理結(jié)果。
[0014]進(jìn)一步地,鍵值存儲數(shù)據(jù)庫還與發(fā)送方進(jìn)程連接,發(fā)送方從鍵值存儲數(shù)據(jù)庫中調(diào)取處理結(jié)果。
[0015]通過本發(fā)明,在發(fā)送方進(jìn)程生成進(jìn)程消息之后,將進(jìn)程消息發(fā)送至消息隊列服務(wù)器,接收方進(jìn)程從該消息隊列服務(wù)器提取進(jìn)程消息,并對該進(jìn)程消息進(jìn)行處理以獲取處理結(jié)果。消息發(fā)送方進(jìn)程不需要與消息接受方進(jìn)程建立通信鏈路上的連接,發(fā)送方不關(guān)心是否有接收方或具體由哪個或哪些接收方接收消息,接收方進(jìn)程也不關(guān)心是哪個或哪些發(fā)送方進(jìn)程發(fā)送的進(jìn)程消息,這樣降低了復(fù)雜的網(wǎng)絡(luò)業(yè)務(wù)系統(tǒng)各部分的耦合性,提升整個系統(tǒng)的可用性和穩(wěn)定性,解決了現(xiàn)有技術(shù)中采用統(tǒng)一的消息格式進(jìn)行各組件進(jìn)程之間的會話,耗費(fèi)大量資源且會產(chǎn)生通信阻塞,導(dǎo)致系統(tǒng)的穩(wěn)定性差的問題,通過消息隊列服務(wù)器實現(xiàn)了進(jìn)程之間的會話,降低了各個進(jìn)程之間的耦合性,節(jié)省系統(tǒng)資源,增加了系統(tǒng)的穩(wěn)定性。
【專利附圖】
【附圖說明】
[0016]此處所說明的附圖用來提供對本發(fā)明的進(jìn)一步理解,構(gòu)成本申請的一部分,本發(fā)明的示意性實施例及其說明用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的不當(dāng)限定。在附圖中:
[0017]圖1是根據(jù)本發(fā)明實施例的用于軟件系統(tǒng)的多進(jìn)程通訊系統(tǒng)的結(jié)構(gòu)示意圖;
[0018]圖2是根據(jù)圖1所示實施例的進(jìn)程消息的數(shù)據(jù)結(jié)構(gòu)圖;
[0019]圖3是根據(jù)圖1所示實施例的用于軟件系統(tǒng)的多進(jìn)程通訊系統(tǒng)的組織關(guān)系圖;
[0020]圖4是根據(jù)本發(fā)明實施例的用于軟件系統(tǒng)的多進(jìn)程通訊方法的流程圖;
[0021]圖5是根據(jù)圖4所示實施例的發(fā)送方進(jìn)程發(fā)送進(jìn)程消息的流程圖;
[0022]圖6是根據(jù)圖4所示實施例的接收方進(jìn)程接收進(jìn)程消息的流程圖;以及
[0023]圖7是根據(jù)圖4所示實施例的發(fā)送方進(jìn)程獲取處理結(jié)果的處理流程圖。
【具體實施方式】[0024]需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互組合。下面將參考附圖并結(jié)合實施例來詳細(xì)說明本發(fā)明。
[0025]圖1是根據(jù)本發(fā)明實施例的用于軟件系統(tǒng)的多進(jìn)程通訊系統(tǒng)的結(jié)構(gòu)示意圖。如圖1所示,該系統(tǒng)可以包括:發(fā)送方進(jìn)程10,用于生成進(jìn)程消息,將進(jìn)程消息發(fā)送至消息隊列服務(wù)器;消息隊列服務(wù)器30,與發(fā)送方進(jìn)程連接,用于存儲進(jìn)程消息;接收方進(jìn)程50,與消息隊列服務(wù)器連接,用于從消息隊列服務(wù)器中提取進(jìn)程消息,并對進(jìn)程消息進(jìn)行數(shù)據(jù)加工處理生成處理結(jié)果。
[0026]采用本發(fā)明,在發(fā)送方進(jìn)程生成進(jìn)程消息之后,將進(jìn)程消息發(fā)送至消息隊列服務(wù)器,接收方進(jìn)程從該消息隊列服務(wù)器提取進(jìn)程消息,并對該進(jìn)程消息進(jìn)行處理以獲取處理結(jié)果。消息發(fā)送方進(jìn)程不需要與消息接收方進(jìn)程建立通信鏈路上的連接,發(fā)送方不關(guān)心是否有接收方或具體由哪個或哪些接收方接收消息,接收方進(jìn)程也不關(guān)心是哪個或哪些發(fā)送方進(jìn)程發(fā)送的進(jìn)程消息,這樣降低了復(fù)雜的網(wǎng)絡(luò)業(yè)務(wù)系統(tǒng)各部分的耦合性,提升整個系統(tǒng)的可用性和穩(wěn)定性,解決了現(xiàn)有技術(shù)中采用統(tǒng)一的消息格式進(jìn)行各組件進(jìn)程之間的會話,耗費(fèi)大量資源且會產(chǎn)生通信阻塞,導(dǎo)致系統(tǒng)的穩(wěn)定性差的問題,通過消息隊列服務(wù)器實現(xiàn)了進(jìn)程之間的會話,降低了各個進(jìn)程之間的耦合性,節(jié)省系統(tǒng)資源,增加了系統(tǒng)的穩(wěn)定性。
[0027]在上述實施例中,工作進(jìn)程從所屬消息隊列服務(wù)器提取所述進(jìn)程消息后,根據(jù)實際軟件系統(tǒng)功能需求和業(yè)務(wù)需要,執(zhí)行對應(yīng)的數(shù)據(jù)加工操作,其中,數(shù)據(jù)加工包括:對數(shù)據(jù)的讀取、截取、存儲、使用消息數(shù)據(jù)觸發(fā)程序內(nèi)部函數(shù)或調(diào)用外部系統(tǒng)執(zhí)行的操作等等,并最終根據(jù)數(shù)據(jù)加工的處理過程的實際情況,生成處理結(jié)果。
[0028]如圖2所示,進(jìn)程消息的消息頭可以包括消息標(biāo)識,消息隊列服務(wù)器包括一個或多個消息隊列,發(fā)送方進(jìn)程在獲取與消息標(biāo)識對應(yīng)的消息隊列之后,將進(jìn)程消息發(fā)送至消息隊列。
[0029]在本發(fā)明的上述實施例中,系統(tǒng)還可以包括:鍵值存儲數(shù)據(jù)庫,與接收方進(jìn)程連接,用于存儲處理結(jié)果。
[0030]如圖3所示,鍵值存儲數(shù)據(jù)庫還與發(fā)送方進(jìn)程連接,發(fā)送方從鍵值存儲數(shù)據(jù)庫中調(diào)取處理結(jié)果。
[0031]具體地,如圖3所示,該系統(tǒng)可以包括多個消息發(fā)送方進(jìn)程和多個消息接收方進(jìn)程,各自與消息隊列服務(wù)器和鍵值存儲數(shù)據(jù)庫建立一個連接,節(jié)約的鏈路層連接資源。
[0032]具體地,系統(tǒng)可以包括多個發(fā)送方進(jìn)程,發(fā)送方將特定類型的消息(即上述實施例中的進(jìn)程消息)發(fā)送至消息隊列服務(wù)器對應(yīng)的消息隊列中,一種類型的消息對應(yīng)一個隊列,具體地,可以通過進(jìn)程消息的消息標(biāo)識確定進(jìn)程消息屬于消息隊列服務(wù)器中的消息隊列,進(jìn)程消息的消息標(biāo)識可以首先確認(rèn)該進(jìn)程消息的消息類型,在確定進(jìn)程消息的消息類型之后獲取與該消息類型對應(yīng)的消息隊列;并且發(fā)送方進(jìn)程發(fā)送完成后發(fā)送方不關(guān)心消息是否被接受,何時被接受,被哪個接收方進(jìn)程接受,可以執(zhí)行后續(xù)操作,包括繼續(xù)發(fā)送新的相同或不同類型的進(jìn)程消息。
[0033]如圖3所示,每個接收方進(jìn)程可以處理一種或多種類型的進(jìn)程消息,每次從對應(yīng)的消息隊列中取出其可以處理的消息進(jìn)行處理,處理完畢后,將處理結(jié)果寫入鍵值存儲數(shù)據(jù)庫,隨后再次從消息隊列中取出其可以處理的消息進(jìn)行處理。
[0034]圖4是根據(jù)本發(fā)明實施例的用于軟件系統(tǒng)的多進(jìn)程通訊方法的流程圖,如圖4所示該方法包括如下步驟:
[0035]步驟S102,生成進(jìn)程消息。
[0036]步驟S104,將進(jìn)程消息發(fā)送至消息隊列服務(wù)器。
[0037]步驟S106,從消息隊列服務(wù)器提取進(jìn)程消息。
[0038]步驟S108,對進(jìn)程消息進(jìn)行數(shù)據(jù)加工處理以獲取處理結(jié)果。
[0039]采用本發(fā)明,在發(fā)送方進(jìn)程生成進(jìn)程消息之后,將進(jìn)程消息發(fā)送至消息隊列服務(wù)器,接收方進(jìn)程從該消息隊列服務(wù)器提取進(jìn)程消息,并對該進(jìn)程消息進(jìn)行處理以獲取處理結(jié)果。消息發(fā)送方進(jìn)程不需要與消息接受方進(jìn)程建立通信鏈路上的連接,發(fā)送方不關(guān)心是否有接收方或具體由哪個或哪些接收方接收消息,接收方進(jìn)程也不關(guān)心是哪個或哪些發(fā)送方進(jìn)程發(fā)送的進(jìn)程消息,這樣降低了復(fù)雜的網(wǎng)絡(luò)業(yè)務(wù)系統(tǒng)各部分的耦合性,提升整個系統(tǒng)的可用性和穩(wěn)定性,解決了現(xiàn)有技術(shù)中采用統(tǒng)一的消息格式進(jìn)行各組件進(jìn)程之間的會話,耗費(fèi)大量資源且會產(chǎn)生通信阻塞,導(dǎo)致系統(tǒng)的穩(wěn)定性差的問題,通過消息隊列服務(wù)器實現(xiàn)了進(jìn)程之間的會話,降低了各個進(jìn)程之間的耦合性,節(jié)省系統(tǒng)資源,增加了系統(tǒng)的穩(wěn)定性。
[0040]在上述實施例中,工作進(jìn)程從所屬消息隊列服務(wù)器提取所述進(jìn)程消息后,根據(jù)實際軟件系統(tǒng)功能需求和業(yè)務(wù)需要,執(zhí)行對應(yīng)的數(shù)據(jù)加工操作,其中,數(shù)據(jù)加工包括:對數(shù)據(jù)的讀取、截取、存儲、使用消息數(shù)據(jù)觸發(fā)程序內(nèi)部函數(shù)或調(diào)用外部系統(tǒng)執(zhí)行的操作等等,并最終根據(jù)數(shù)據(jù)加工的處理過程的實際情況,生成處理結(jié)果。
[0041]采用本發(fā)明的上述通訊方式的軟件系統(tǒng)易于升級擴(kuò)展且特別適用于承擔(dān)大的并發(fā)運(yùn)算任務(wù)。
[0042]具體地,如圖5所示,當(dāng)需要發(fā)送消息給接收方處理時,發(fā)送方生成消息,送到對應(yīng)的消息隊列中,就可以進(jìn)行后續(xù)的處理,無需等待該消息處理完畢再進(jìn)行后續(xù)工作。具體地:
[0043]步驟S202:啟動發(fā)送方進(jìn)程發(fā)送進(jìn)程消息。
[0044]然后執(zhí)行步驟S102:發(fā)送方進(jìn)程生成進(jìn)程消息。
[0045]步驟S104:將進(jìn)程消息發(fā)送至消息隊列服務(wù)器。
[0046]根據(jù)本發(fā)明的上述實施例,如圖2所示,進(jìn)程消息可以包括消息標(biāo)識,消息隊列服務(wù)器包括一個或多個消息隊列,其中,將進(jìn)程消息發(fā)送至消息隊列服務(wù)器的步驟包括:獲取與消息標(biāo)識對應(yīng)的消息隊列;將進(jìn)程消息發(fā)送至消息隊列。
[0047]圖2所示的進(jìn)程消息的數(shù)據(jù)結(jié)構(gòu)還可以包括消息正文,該消息正文主要是包括需要處理的消息數(shù)據(jù)。具體地,消息體中的消息正文的格式可以是任意格式的,該進(jìn)程消息的消息頭中可以包含消息標(biāo)識和消息類型標(biāo)識,消息正文可以是任何接收方進(jìn)程可以處理的格式。
[0048]根據(jù)本發(fā)明的上述實施例,在對進(jìn)程消息進(jìn)行數(shù)據(jù)加工處理以獲取處理結(jié)果之后,方法還包括:將處理結(jié)果保存進(jìn)鍵值存儲數(shù)據(jù)庫。具體地,處理結(jié)果可以基于鍵值的存儲機(jī)制保存進(jìn)存儲數(shù)據(jù)庫。
[0049]在本發(fā)明的上述實施例中,對進(jìn)程消息進(jìn)行數(shù)據(jù)加工處理以獲取處理結(jié)果的步驟可以包括:判斷對進(jìn)程消息的處理是否成功;在對進(jìn)程消息的處理成功的情況下,獲取第一處理結(jié)果,其中,第一處理結(jié)果為處理成功的處理結(jié)果;在對進(jìn)程消息的處理不成功的情況下,獲取第二處理結(jié)果,其中,第二處理結(jié)果為處理不成功的處理結(jié)果。[0050]具體地,在發(fā)送方進(jìn)程接收消息結(jié)果反饋時,可以從鍵值存儲數(shù)據(jù)庫中根據(jù)消息標(biāo)識提取處理結(jié)果,具體也可以是基于鍵值的存儲機(jī)制來獲取處理結(jié)果。當(dāng)有多個接收方都提供了反饋(即處理結(jié)果)時,可以接收任意一個或多個接收方進(jìn)程提供的處理結(jié)果,也即接收哪一個接收方進(jìn)程反饋的行為是未定義的。
[0051]如圖6所示,從消息隊列獲取自身能夠處理的消息,加以處理,處理完成(包括成功或失敗)后,將結(jié)果寫入鍵值存儲數(shù)據(jù)庫,隨后再取出一條自身能夠處理的消息進(jìn)行處理。具體地可以通過如下步驟實現(xiàn):
[0052]步驟S302:啟動接收方進(jìn)程接收過程消息。
[0053]步驟S106:接收方進(jìn)程從消息隊列服務(wù)器提取進(jìn)程消息。
[0054]其中,具體地,接收方進(jìn)程從消息隊列服務(wù)器對應(yīng)的消息隊列中讀取或提取一條進(jìn)程消息。每個接收方進(jìn)程可以處理的進(jìn)程消息的消息類型可以是預(yù)先設(shè)定的,可以通過預(yù)先設(shè)定的消息類型獲取對應(yīng)的消息隊列中的進(jìn)程消息。
[0055]步驟S304:對提取到的進(jìn)程消息進(jìn)行相應(yīng)的處理。此處相應(yīng)的處理是在進(jìn)程消息的消息正文里攜帶的內(nèi)容確定的,該處理可以是讀取數(shù)據(jù)、修改數(shù)據(jù)或者計算數(shù)據(jù)。
[0056]步驟S306:判斷對進(jìn)程消息的處理是否成功。其中,在處理成功的情況下,執(zhí)行步驟S308 ;在處理不成功的情況下,執(zhí)行步驟S310。
[0057]具體地,對進(jìn)程消息的處理不成功有兩大類:一是來自接收方進(jìn)程依存的軟件和硬件系統(tǒng)本身的系統(tǒng)層面的錯誤或限制導(dǎo)致無法成功處理的情況,例如存儲設(shè)備用盡、對必要接口的訪問超時等錯誤,我們稱為系統(tǒng)錯誤;另一類是根據(jù)實際軟件系統(tǒng)功能需求和業(yè)務(wù)需要認(rèn)定的錯誤,例如支付處理過程發(fā)現(xiàn)余額不足等業(yè)務(wù)層面的問題,我們稱之為業(yè)務(wù)錯誤。系統(tǒng)錯誤一般由捕獲系統(tǒng)層面的異常信號獲取,業(yè)務(wù)錯誤則由接收方程序根據(jù)業(yè)務(wù)需要進(jìn)行判斷。
[0058]步驟S308:向鍵值數(shù)據(jù)庫寫入第一處理結(jié)果。該第一處理結(jié)果中攜帶著對進(jìn)程消息處理成功的信息。
[0059]步驟S310:向鍵值數(shù)據(jù)庫寫入第二處理結(jié)果。該第二處理結(jié)果中攜帶著對進(jìn)程消息處理不成功的信息。
[0060]如圖5所示,在本發(fā)明的上述實施例中,在將處理結(jié)果保存進(jìn)鍵值存儲數(shù)據(jù)庫之后,方法還可以包括:檢測鍵值存儲數(shù)據(jù)庫中是否存在與進(jìn)程消息對應(yīng)的處理結(jié)果;在鍵值存儲數(shù)據(jù)庫中存在與進(jìn)程消息對應(yīng)的處理結(jié)果的情況下,判斷對進(jìn)程消息的處理是否成功;在確認(rèn)對進(jìn)程消息處理成功的情況下,記錄處理結(jié)果;在確認(rèn)對進(jìn)程消息處理不成功的情況下,判斷是否重新發(fā)送進(jìn)程消息;在確認(rèn)重新發(fā)送進(jìn)程消息的情況下,重新發(fā)送進(jìn)程消息;在確認(rèn)不重新發(fā)送進(jìn)程消息的情況下,將處理結(jié)果記為錯誤結(jié)果;在鍵值存儲數(shù)據(jù)庫中不存在與進(jìn)程消息對應(yīng)的處理結(jié)果的情況下,檢測是否需要等待處理結(jié)果;在需要等待處理結(jié)果的情況下,將對進(jìn)程消息的處理結(jié)果記作超時結(jié)果。
[0061]根據(jù)本發(fā)明的上述實施例,判斷對進(jìn)程消息的處理是否成功的步驟可以包括:判斷處理結(jié)果是第一處理結(jié)果或者第二處理結(jié)果;在處理結(jié)果是第一處理結(jié)果的情況下,確認(rèn)對進(jìn)程消息處理成功;在處理結(jié)果是第二處理結(jié)果的情況下,確認(rèn)對進(jìn)程消息處理不成功。
[0062]具體地,如圖7所示,當(dāng)需要了解消息處理結(jié)果時,這可以由發(fā)送方進(jìn)程內(nèi)部的時序處理機(jī)制或外部的信號機(jī)制觸發(fā),發(fā)送方進(jìn)程訪問鍵值存儲數(shù)據(jù)庫以了解消息是否處理完畢以及是否成功處理。并根據(jù)業(yè)務(wù)需要對處理結(jié)果進(jìn)行相應(yīng)的操作。具體地可以通過如下方法實現(xiàn):
[0063]步驟S401:從鍵值數(shù)據(jù)庫中獲取處理結(jié)果。
[0064]步驟S402:檢測鍵值存儲數(shù)據(jù)庫中是否存在與進(jìn)程消息對應(yīng)的處理結(jié)果。如果存在執(zhí)行步驟S403,如果不存在執(zhí)行步驟S404。
[0065]步驟S403:判斷對進(jìn)程消息的處理是否成功。在對進(jìn)程消息成功的情況下,執(zhí)行步驟S405,在對進(jìn)程消息處理不成功的情況下,執(zhí)行步驟S406。
[0066]步驟S404:檢測是否需要等待處理結(jié)果。在需要等待處理結(jié)果的情況下,執(zhí)行步驟S409 ;在不需要等待處理結(jié)果的情況下,執(zhí)行步驟S410。
[0067]具體地,發(fā)送方進(jìn)程在最初發(fā)出消息時,根據(jù)消息內(nèi)容的性質(zhì),對需要多長時間能夠得到結(jié)果即存在預(yù)期,也即發(fā)送方進(jìn)程發(fā)送進(jìn)程消息時攜帶了響應(yīng)時間,該響應(yīng)時間即為上述實施例中提及的期冀得到處理結(jié)果的時間,該允許的等待時間(即響應(yīng)時間)根據(jù)實際情況可能從數(shù)百毫秒到數(shù)小時或更長,更具體地,發(fā)送方進(jìn)程可根據(jù)實際情況自行保存響應(yīng)時間的配置。
[0068]步驟S405:記錄處理結(jié)果。
[0069]步驟S406:判斷是否重新發(fā)送進(jìn)程消息。其中,在是的情況下,執(zhí)行步驟S407 ;在否的情況下,執(zhí)行步驟S408。
[0070]具體地,根據(jù)消息處理不成功的具體情況以及實際軟件系統(tǒng)功能需求和業(yè)務(wù)需要,消息發(fā)送方可以決定是否需要重新發(fā)送進(jìn)程消息,或者是根據(jù)業(yè)務(wù)需要完成額外的步驟(例如發(fā)送其它消息)來滿足成功處理的條件后再次發(fā)送之前的進(jìn)程消息。
[0071]步驟S407:重新發(fā)送進(jìn)程消息。
[0072]步驟S408:將處理結(jié)果記為錯誤結(jié)果。
[0073]步驟S409:將對進(jìn)程消息的處理結(jié)果記作超時結(jié)果。
[0074]步驟S410:不做處理等下次再次進(jìn)入獲取消息處理結(jié)果的過程。
[0075]發(fā)送方在適當(dāng)?shù)臅r候從鍵值存儲數(shù)據(jù)庫根據(jù)最初的消息標(biāo)識獲取消息的處理結(jié)果。如果該結(jié)果不存在,可以根據(jù)業(yè)務(wù)需要決定延遲適當(dāng)?shù)臅r間再次獲取,或者認(rèn)為處理超時。如果結(jié)果是一個錯誤信息,可以根據(jù)業(yè)務(wù)需要決定重新發(fā)送消息,或者接受該結(jié)果作為處理異常。
[0076]在本發(fā)明的上述實施例中,在系統(tǒng)中設(shè)置基于AMQP協(xié)議的消息隊列服務(wù)器以及鍵值存儲數(shù)據(jù)庫;一個進(jìn)程(發(fā)送方進(jìn)程或接收方進(jìn)程)只需要與消息隊列服務(wù)器和鍵值存儲數(shù)據(jù)庫建立唯一的一個鏈路層連接。采用上述方法,降低的組件進(jìn)程之間的耦合程度,如果軟件系統(tǒng)需要升級擴(kuò)展,只有受影響的進(jìn)程需要升級,其它未受影響的進(jìn)程無需進(jìn)行任何調(diào)整。同時,發(fā)送方進(jìn)程與接收方進(jìn)程不存在一一對應(yīng)的強(qiáng)連接關(guān)系,對于性能較高的組件可以布署較少的進(jìn)程,對于性能較低的組件可以布署較多的進(jìn)程,有效利用物理資源。并且,在本發(fā)明的上述實施例中,不對消息的格式進(jìn)行統(tǒng)一規(guī)范,通過消息隊列服務(wù)器特定類型的消息總是被能夠處理該消息的接收方進(jìn)程接收,特別適合業(yè)務(wù)需求不斷更新的軟件系統(tǒng)。同時,不使用SESSION而是使用鍵值存儲數(shù)據(jù)庫異步接收處理結(jié)果,允許通過按需布署不同的進(jìn)程提升整體系統(tǒng)的并發(fā)處理能力。[0077]更具體地,使用AMQP發(fā)布消息,發(fā)布消息時可以指定接收反饋的鍵,可以通過鍵值存儲設(shè)備(即鍵值數(shù)據(jù)庫)獲取O個或I個反饋(即處理結(jié)果)。
[0078]需要說明的是,在附圖的流程圖示出的步驟可以在諸如一組計算機(jī)可執(zhí)行指令的計算機(jī)系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。
[0079]從以上的描述中,可以看出,本發(fā)明實現(xiàn)了如下技術(shù)效果:采用本發(fā)明,在發(fā)送方進(jìn)程生成進(jìn)程消息之后,將進(jìn)程消息發(fā)送至消息隊列服務(wù)器,接收方進(jìn)程從該消息隊列服務(wù)器提取進(jìn)程消息,并對該進(jìn)程消息進(jìn)行處理以獲取處理結(jié)果。消息發(fā)送方進(jìn)程不需要與消息接受方進(jìn)程建立通信鏈路上的連接,發(fā)送方不關(guān)心是否有接收方或具體由哪個或哪些接收方接收消息,接收方進(jìn)程也不關(guān)心是哪個或哪些發(fā)送方進(jìn)程發(fā)送的進(jìn)程消息,這樣降低了復(fù)雜的網(wǎng)絡(luò)業(yè)務(wù)系統(tǒng)各部分的耦合性,提升整個系統(tǒng)的可用性和穩(wěn)定性,解決了現(xiàn)有技術(shù)中采用統(tǒng)一的消息格式進(jìn)行各組件進(jìn)程之間的會話,耗費(fèi)大量資源且會產(chǎn)生通信阻塞,導(dǎo)致系統(tǒng)的穩(wěn)定性差的問題,通過消息隊列服務(wù)器實現(xiàn)了進(jìn)程之間的會話,降低了各個進(jìn)程之間的耦合性,節(jié)省系統(tǒng)資源,增加了系統(tǒng)的穩(wěn)定性。
[0080]顯然,本領(lǐng)域的技術(shù)人員應(yīng)該明白,上述的本發(fā)明的各模塊或各步驟可以用通用的計算裝置來實現(xiàn),它們可以集中在單個的計算裝置上,或者分布在多個計算裝置所組成的網(wǎng)絡(luò)上,可選地,它們可以用計算裝置可執(zhí)行的程序代碼來實現(xiàn),從而,可以將它們存儲在存儲裝置中由計算裝置來執(zhí)行,或者將它們分別制作成各個集成電路模塊,或者將它們中的多個模塊或步驟制作成單個集成電路模塊來實現(xiàn)。這樣,本發(fā)明不限制于任何特定的硬件和軟件結(jié)合。
[0081]以上所述僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種用于軟件系統(tǒng)的多進(jìn)程通訊方法,其特征在于,包括: 生成進(jìn)程消息; 將所述進(jìn)程消息發(fā)送至消息隊列服務(wù)器; 從所述消息隊列服務(wù)器提取所述進(jìn)程消息; 對所述進(jìn)程消息進(jìn)行數(shù)據(jù)加工處理生成處理結(jié)果。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述進(jìn)程消息包括消息標(biāo)識,所述消息隊列服務(wù)器包括一個或多個消息隊列,其中,將所述進(jìn)程消息發(fā)送至消息隊列服務(wù)器的步驟包括: 獲取與所述消息標(biāo)識對應(yīng)的消息隊列; 將所述進(jìn)程消息發(fā)送至所述消息隊列。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,在對所述進(jìn)程消息進(jìn)行數(shù)據(jù)加工處理生成處理結(jié)果之后,所述方法還包括: 將所述處理結(jié)果保存進(jìn)鍵值存儲數(shù)據(jù)庫。
4.根據(jù)權(quán)利要求3所 述的方法,其特征在于,對所述進(jìn)程消息進(jìn)行數(shù)據(jù)加工處理生成處理結(jié)果的步驟包括: 判斷對所述進(jìn)程消息的處理是否成功; 在對所述進(jìn)程消息的處理成功的情況下,獲取第一處理結(jié)果,其中,所述第一處理結(jié)果為處理成功的處理結(jié)果; 在對所述進(jìn)程消息的處理不成功的情況下,獲取第二處理結(jié)果,其中,所述第二處理結(jié)果為處理不成功的處理結(jié)果。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,在將所述處理結(jié)果保存進(jìn)鍵值存儲數(shù)據(jù)庫之后,所述方法還包括: 檢測所述鍵值存儲數(shù)據(jù)庫中是否存在與所述進(jìn)程消息對應(yīng)的所述處理結(jié)果; 在所述鍵值存儲數(shù)據(jù)庫中存在與所述進(jìn)程消息對應(yīng)的所述處理結(jié)果的情況下,判斷對所述進(jìn)程消息的處理是否成功; 在確認(rèn)對所述進(jìn)程消息處理成功的情況下,記錄所述處理結(jié)果; 在確認(rèn)對所述進(jìn)程消息處理不成功的情況下,判斷是否重新發(fā)送所述進(jìn)程消息; 在確認(rèn)重新發(fā)送所述進(jìn)程消息的情況下,重新發(fā)送所述進(jìn)程消息; 在確認(rèn)不重新發(fā)送所述進(jìn)程消息的情況下,將所述處理結(jié)果記為錯誤結(jié)果; 在所述鍵值存儲數(shù)據(jù)庫中不存在與所述進(jìn)程消息對應(yīng)的所述處理結(jié)果的情況下,檢測是否需要等待所述處理結(jié)果; 在需要等待所述處理結(jié)果的情況下,將對所述進(jìn)程消息的處理結(jié)果記作超時結(jié)果。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,判斷對所述進(jìn)程消息的處理是否成功的步驟包括: 判斷所述處理結(jié)果是所述第一處理結(jié)果或者所述第二處理結(jié)果; 在所述處理結(jié)果是所述第一處理結(jié)果的情況下,確認(rèn)對所述進(jìn)程消息處理成功; 在所述處理結(jié)果是所述第二處理結(jié)果的情況下,確認(rèn)對所述進(jìn)程消息處理不成功。
7.一種用于軟件系統(tǒng)的多進(jìn)程通訊系統(tǒng),其特征在于,包括: 發(fā)送方進(jìn)程,用于生成進(jìn)程消息,將所述進(jìn)程消息發(fā)送至消息隊列服務(wù)器;所述消息隊列服務(wù)器,與所述發(fā)送方進(jìn)程連接,用于存儲所述進(jìn)程消息; 接收方進(jìn)程,與所述消息隊列服務(wù)器連接,用于從所述消息隊列服務(wù)器中提取所述進(jìn)程消息,并對所述進(jìn)程消息進(jìn)行數(shù)據(jù)加工處理生成處理結(jié)果。
8.根據(jù)權(quán)利要求7所述的系統(tǒng),其特征在于,所述進(jìn)程消息包括消息標(biāo)識,所述消息隊列服務(wù)器包括一個或多個消息隊列,所述發(fā)送方進(jìn)程在獲取與所述消息標(biāo)識對應(yīng)的消息隊列之后,將所述進(jìn)程消息發(fā)送至所述消息隊列。
9.根據(jù)權(quán)利要求7所述的系統(tǒng),其特征在于,所述系統(tǒng)還包括: 鍵值存儲數(shù)據(jù)庫,與所述接收方進(jìn)程連接,用于存儲所述處理結(jié)果。
10.根據(jù)權(quán)利要求9所述的系統(tǒng),其特征在于,所述鍵值存儲數(shù)據(jù)庫還與所述發(fā)送方進(jìn)程連接,所述發(fā)送方從所述鍵值存儲數(shù)據(jù)庫中調(diào)取所述處理結(jié)果。
【文檔編號】G06F9/48GK103677988SQ201310676662
【公開日】2014年3月26日 申請日期:2013年12月11日 優(yōu)先權(quán)日:2013年12月11日
【發(fā)明者】強(qiáng)葉鋒, 薛粲 申請人:北京愛唯光石信息技術(shù)有限公司