国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      用于軟件系統(tǒng)的多進(jìn)程通訊方法及系統(tǒng)的制作方法

      文檔序號(hào):6523403閱讀:174來(lái)源:國(guó)知局
      用于軟件系統(tǒng)的多進(jìn)程通訊方法及系統(tǒng)的制作方法
      【專利摘要】本發(fā)明公開了一種用于軟件系統(tǒng)的多進(jìn)程通訊方法及系統(tǒng)。其中,該方法包括:生成進(jìn)程消息;將進(jìn)程消息發(fā)送至消息隊(duì)列服務(wù)器;從消息隊(duì)列服務(wù)器提取進(jìn)程消息;對(duì)進(jìn)程消息進(jìn)行數(shù)據(jù)加工處理生成處理結(jié)果。通過(guò)本發(fā)明,解決了現(xiàn)有技術(shù)中采用統(tǒng)一的消息格式進(jìn)行各組件進(jìn)程之間的會(huì)話,耗費(fèi)大量資源且會(huì)產(chǎn)生通信阻塞,導(dǎo)致系統(tǒng)的穩(wěn)定性差的問(wèn)題,通過(guò)消息隊(duì)列服務(wù)器實(shí)現(xiàn)了進(jìn)程之間的會(huì)話,降低了各個(gè)進(jìn)程之間的耦合性,節(jié)省系統(tǒng)資源,增加了系統(tǒng)的穩(wěn)定性。
      【專利說(shuō)明】用于軟件系統(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)一通信的通用消息總線的實(shí)現(xiàn)方法,只要是設(shè)置各組件進(jìn)程間的通信都必須采用的統(tǒng)一、規(guī)范的通用消息的格式,且以SESSION形式交互消息;同時(shí),還要求各組件進(jìn)程間通信的通用消息按照設(shè)定的路由算法進(jìn)行分發(fā)。這樣做具有如下兩個(gè)主要缺點(diǎn):通信必須采用統(tǒng)一規(guī)范的通用消息格式,如果軟件升級(jí)擴(kuò)展原有消息格式不再適用,則所有組件即便理論上未受到新格式影響都需要升級(jí);以SESSION形式交互消息,這樣消息發(fā)送方和接收方需要建立會(huì)話,在消息處理過(guò)程中雙方具有強(qiáng)耦合的關(guān)系,這樣整個(gè)系統(tǒng)的性能被降低到性能最低的組件進(jìn)程的性能水平上,對(duì)于并發(fā)計(jì)算量巨大的軟件系統(tǒng),這會(huì)導(dǎo)致空耗大量操作系統(tǒng)連接資源并可能對(duì)新的通信產(chǎn)生阻塞,影響系統(tǒng)的整體處理能力。
      [0003]針對(duì)現(xiàn)有技術(shù)中采用統(tǒng)一的消息格式進(jìn)行各組件進(jìn)程之間的會(huì)話,耗費(fèi)大量資源且會(huì)產(chǎn)生通信阻塞,導(dǎo)致系統(tǒng)的穩(wěn)定性差的問(wèn)題,目前尚未提出有效的解決方案。

      【發(fā)明內(nèi)容】

      [0004]針對(duì)相關(guān)技術(shù)中采用統(tǒng)一的消息格式進(jìn)行各組件進(jìn)程之間的會(huì)話,耗費(fèi)大量資源且會(huì)產(chǎn)生通信阻塞,導(dǎo)致系統(tǒng)的穩(wěn)定性用于軟件系統(tǒng)的多進(jìn)程通訊方法及系統(tǒng),以解決上述問(wèn)題。
      [0005]為了實(shí)現(xiàn)上述目的,根據(jù)本發(fā)明的一個(gè)方面,提供了一種用于軟件系統(tǒng)的多進(jìn)程通訊方法,該方法包括:生成進(jìn)程消息;將進(jìn)程消息發(fā)送至消息隊(duì)列服務(wù)器;從消息隊(duì)列服務(wù)器提取進(jìn)程消息;對(duì)進(jìn)程消息進(jìn)行數(shù)據(jù)加工處理生成處理結(jié)果。
      [0006]進(jìn)一步地,進(jìn)程消息包括消息標(biāo)識(shí),消息隊(duì)列服務(wù)器包括一個(gè)或多個(gè)消息隊(duì)列,其中,將進(jìn)程消息發(fā)送至消息隊(duì)列服務(wù)器的步驟包括:獲取與消息標(biāo)識(shí)對(duì)應(yīng)的消息隊(duì)列;將進(jìn)程消息發(fā)送至消息隊(duì)列。
      [0007]進(jìn)一步地,在對(duì)進(jìn)程消息進(jìn)行數(shù)據(jù)加工處理生成處理結(jié)果之后,方法還包括:將處理結(jié)果保存進(jìn)鍵值存儲(chǔ)數(shù)據(jù)庫(kù)。
      [0008]進(jìn)一步地,對(duì)進(jìn)程消息進(jìn)行數(shù)據(jù)加工處理生成處理結(jié)果的步驟包括:判斷對(duì)進(jìn)程消息的處理是否成功;在對(duì)進(jìn)程消息的處理成功的情況下,獲取第一處理結(jié)果,其中,第一處理結(jié)果為處理成功的處理結(jié)果;在對(duì)進(jìn)程消息的處理不成功的情況下,獲取第二處理結(jié)果,其中,第二處理結(jié)果為處理不成功的處理結(jié)果。
      [0009]進(jìn)一步地,在將處理結(jié)果保存進(jìn)鍵值存儲(chǔ)數(shù)據(jù)庫(kù)之后,方法還包括:檢測(cè)鍵值存儲(chǔ)數(shù)據(jù)庫(kù)中是否存在與進(jìn)程消息對(duì)應(yīng)的處理結(jié)果;在鍵值存儲(chǔ)數(shù)據(jù)庫(kù)中存在與進(jìn)程消息對(duì)應(yīng)的處理結(jié)果的情況下,判斷對(duì)進(jìn)程消息的處理是否成功;在確認(rèn)對(duì)進(jìn)程消息處理成功的情況下,記錄處理結(jié)果;在確認(rèn)對(duì)進(jìn)程消息處理不成功的情況下,判斷是否重新發(fā)送進(jìn)程消息;在確認(rèn)重新發(fā)送進(jìn)程消息的情況下,重新發(fā)送進(jìn)程消息;在確認(rèn)不重新發(fā)送進(jìn)程消息的情況下,將處理結(jié)果記為錯(cuò)誤結(jié)果;在鍵值存儲(chǔ)數(shù)據(jù)庫(kù)中不存在與進(jìn)程消息對(duì)應(yīng)的處理結(jié)果的情況下,檢測(cè)是否需要等待處理結(jié)果;在需要等待處理結(jié)果的情況下,將對(duì)進(jìn)程消息的處理結(jié)果記作超時(shí)結(jié)果。
      [0010]進(jìn)一步地,判斷對(duì)進(jìn)程消息的處理是否成功的步驟包括:判斷處理結(jié)果是第一處理結(jié)果或者第二處理結(jié)果;在處理結(jié)果是第一處理結(jié)果的情況下,確認(rèn)對(duì)進(jìn)程消息處理成功;在處理結(jié)果是第二處理結(jié)果的情況下,確認(rèn)對(duì)進(jìn)程消息處理不成功。
      [0011]為了實(shí)現(xiàn)上述目的,根據(jù)本發(fā)明的另一方面,提供了一種用于軟件系統(tǒng)的多進(jìn)程通訊系統(tǒng),該系統(tǒng)包括:發(fā)送方進(jìn)程,用于生成進(jìn)程消息,將進(jìn)程消息發(fā)送至消息隊(duì)列服務(wù)器;消息隊(duì)列服務(wù)器,與發(fā)送方進(jìn)程連接,用于存儲(chǔ)進(jìn)程消息;接收方進(jìn)程,與消息隊(duì)列服務(wù)器連接,用于從消息隊(duì)列服務(wù)器中提取進(jìn)程消息,并對(duì)進(jìn)程消息進(jìn)行數(shù)據(jù)加工處理生成處理結(jié)果。
      [0012]進(jìn)一步地,進(jìn)程消息包括消息標(biāo)識(shí),消息隊(duì)列服務(wù)器包括一個(gè)或多個(gè)消息隊(duì)列,發(fā)送方進(jìn)程在獲取與消息標(biāo)識(shí)對(duì)應(yīng)的消息隊(duì)列之后,將進(jìn)程消息發(fā)送至消息隊(duì)列。
      [0013]進(jìn)一步地,系統(tǒng)還包括:鍵值存儲(chǔ)數(shù)據(jù)庫(kù),與接收方進(jìn)程連接,用于存儲(chǔ)處理結(jié)果。
      [0014]進(jìn)一步地,鍵值存儲(chǔ)數(shù)據(jù)庫(kù)還與發(fā)送方進(jìn)程連接,發(fā)送方從鍵值存儲(chǔ)數(shù)據(jù)庫(kù)中調(diào)取處理結(jié)果。
      [0015]通過(guò)本發(fā)明,在發(fā)送方進(jìn)程生成進(jìn)程消息之后,將進(jìn)程消息發(fā)送至消息隊(duì)列服務(wù)器,接收方進(jìn)程從該消息隊(duì)列服務(wù)器提取進(jìn)程消息,并對(duì)該進(jìn)程消息進(jìn)行處理以獲取處理結(jié)果。消息發(fā)送方進(jìn)程不需要與消息接受方進(jìn)程建立通信鏈路上的連接,發(fā)送方不關(guān)心是否有接收方或具體由哪個(gè)或哪些接收方接收消息,接收方進(jìn)程也不關(guān)心是哪個(gè)或哪些發(fā)送方進(jìn)程發(fā)送的進(jìn)程消息,這樣降低了復(fù)雜的網(wǎng)絡(luò)業(yè)務(wù)系統(tǒng)各部分的耦合性,提升整個(gè)系統(tǒng)的可用性和穩(wěn)定性,解決了現(xiàn)有技術(shù)中采用統(tǒng)一的消息格式進(jìn)行各組件進(jìn)程之間的會(huì)話,耗費(fèi)大量資源且會(huì)產(chǎn)生通信阻塞,導(dǎo)致系統(tǒng)的穩(wěn)定性差的問(wèn)題,通過(guò)消息隊(duì)列服務(wù)器實(shí)現(xiàn)了進(jìn)程之間的會(huì)話,降低了各個(gè)進(jìn)程之間的耦合性,節(jié)省系統(tǒng)資源,增加了系統(tǒng)的穩(wěn)定性。
      【專利附圖】

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