一種消息傳遞方法和系統及消息中間件的制作方法
【技術領域】
[0001]本申請涉及數據通信技術領域,特別涉及一種消息傳遞方法和系統及消息中間件。
【背景技術】
[0002]在數據通信技術領域,尤其是互聯網數據通信中,基于中間件的交互通信方式在各大行業中有著廣泛的應用。中間件是一種獨立的系統軟件或服務程序,位于網絡、數據庫或操作系統上層、應用程序的下層,它為不同的應用程序提供了公用的通信手段,并且獨立于網絡、數據庫和操作系統。中間件為開發者提供了公用于所有環境的應用程序接口,當應用程序中嵌入其函數調用,它便可利用其運行的特定操作系統和網絡環境的功能,為應用程序執行通信功能。
[0003]目前中間件的種類很多,按照其目的和實現機制的不同,主要有遠程過程調用中間件(Remote-Procedure-CalI, RPC)> 對象請求代理中間件(Object-Request-Brokers,ORB )、消息的中間件(Message-Oriented-Middleware, MOM,也稱面向消息的中間件)。其中,消息中間件(MOM)簡化了應用程序之間數據的傳輸,屏蔽底層異構操作系統和網絡平臺,提供一致的通訊標準和應用開發,確保分布式計算網絡環境下可靠的、跨平臺的信息傳輸和數據交換。它基于消息隊列的存儲-轉發機制,并提供特有的異步傳輸機制,能夠基于消息傳輸和異步事務處理實現應用整合與數據交換。
[0004]在消息中間件中,不同的應用程序進程之間傳遞交換的信息統稱為消息,它是數據交換的基本單位。消息中間件技術,提供了以松散耦合的靈活方式進行消息傳遞的一種中間件機制。圖1是一種利用消息中間件技術進行消息傳遞的過程示意圖。如圖1所示,在消息發送方,消息生產者Server_A、Server_B可以各自調用發送消息的API函數,將需要發送的消息MSG_A、MSG_B通過消息發送隊列服務發送到消息中間件(MOM)中;消息中間件(MOM)進行消息的傳遞和管理;在消息接收方,消息接收隊列服務從消息中間件(MOM)中獲得相應的消息,消息消費者(:1^社_4、(:1^1^_8調用接收消息的API函數,將各自需要的消息從消息接收隊列服務中取出,完成消息的傳遞。
[0005]通常,消息中間件(MOM)要考慮所傳遞的消息是否正確送達到消息消費者,即消息傳輸的正確性。此外,消息中間件有時還要考慮消息傳輸的有序性和穩定性。消息中間件(MOM)的有序性是指對同一消息消費者而言,其所接收到消息的順序是按既定規則(通常是指與消息生產者的消息發送順序相對應)接收的。消息中間件(MOM)的穩定性主要是指消息中間件傳遞消息時消息的阻塞情況,它直接反應了消息中間件對消息的處理效率。
[0006]目前,消息中間件(MOM)消息傳遞機制主要有以下幾個方案:
[0007]推送機制:消息生產者以推送的方式將消息發送給消息消費者,不需要消息消費者反饋處理結果。這種消息推送機制能高效的處理大量的消息,但由于該機制只負責將消息發送出去,沒有消息消費者反饋的處理結果,不能保證消息是否正確送達,即不能保證消息的正確性。
[0008]應答機制:消息生產者發送消息給消息消費者,消息消費者接收到消息并處理正確后向消息生產者發送一個確認消息;若消息生產者沒有收到當前發送消息的確認消息,將會不斷地發送當前的消息給消息消費者,直到收到當前發送消息的確認消息后才會發送下一條消息;若消息生產者收到的是當前發送消息的處理錯誤消息,同樣會不斷的發送當前的消息給消費者,直到收到當前發送消息的確認消息后才會發送下一條消息。該應答機制只有在消息生產者收到消息消費者的確認消息后,才會發送下一條消息,保證了消息的正確性。但是,該機制在消息處理過程中,若某一條消息處理錯誤,消息生產者會不斷地重復發送這條消息,導致該處理錯誤的消息之后的其他消息阻塞,降低了消息中間件的穩定性。
[0009]為降低消息阻塞的影響面,采用此方案的消息中間件通常會對不同的業務系統(如訂單系統、支付系統、發票系統等)配置不同的消息隊列。當某一業務系統發生消息阻塞時,不會影響其他業務系統,但該機制仍然不能解決系統內的消息阻塞問題。該機制在發送消息阻塞時會影響整個系統業務系統,影響面仍然很大,消息處理效率低,穩定性差。
[0010]消息確認機制:消息生產者不間斷地向各個消息消費者發送消息,同時接收各個消息消費者的反饋消息;若某一消息消費者的某一條消息處理錯誤時,消息生產者則需要重新發送該條被處理錯誤的消息,但并不影響其他消息的發送。該消息確認機制在消息處理錯誤時不影響其他消息的發送,可以解決很好的消息阻塞問題,但對于同一消息消費者而言,在先發送的消息由于處理錯誤而需要重發,在該被處理錯誤消息重發之前,若在后產生的消息已經被發送出去,并在此之后發送所述需要重發的錯誤消息至消息消費者,則對于消息消費者而言其接收到的消息是失序的,即該消息確認機制不能保證消息的有序性。
[0011]上述幾種消息中間件(MOM)的消息傳輸機制,在部分僅要求消息傳輸的正確性或有序性的情況下可以適用。但現有技術應用中往往要求在保證消息傳輸正確性的前提下,保證消息傳輸的有序性,同時還得要求消息傳輸具有良好的穩定性。現有技術中消息中間件(MOM)的消息傳輸機制難以保證在消息傳輸正確性的前提下,還能保證消息傳輸的有序性和良好的穩定性。
【發明內容】
[0012]本申請提供一種消息傳遞方法和系統及消息中間件,在保證消息傳輸正確性的前提下,還保證消息傳輸的有序性,同時還解決業務系統的消息阻塞問題,提高消息傳輸的穩定性。
[0013]為解決上述問題,本申請提供的消息傳遞方法和系統及消息中間件的實現方案如下:
[0014]一種消息傳遞方法,包括以下處理步驟:
[0015]消息中間件接收消息發送者發布的消息,并提取該消息在指定屬性上的屬性信息;
[0016]消息中間件比較所述提取的屬性信息與錯誤信息表中保存的預置屬性信息是否相同;如果不相同,則將所述的接收的消息傳遞至消息消費者;如果相同,則持久化該接收的消息;
[0017]消息中間件將所述持久化的消息按照預定順序發送。
[0018]—種消息傳遞系統,包括:
[0019]消息發送者,包括至少一個消息生產者,所述消息生產者用于發布不同屬性的消息;
[0020]消息中間件,用于接收所述發布的消息,并提取該消息在指定屬性上的屬性信息;還用于比較所述提取的屬性信息與錯誤信息表中保存的預置屬性信息是否相同;當比較結果為不相同時,將所述的接收的消息傳遞至消息消費者;當比較結果為相同時,持久化該接收的消息;還用于將所述持久化的消息按照預定的順序發送;
[0021]消息消費者,用于接收消息中間件發來的消息。
[0022]一種消息中間件,包括:
[0023]消息接收單元,用于接收消息發送者發布的消息;
[0024]屬性提取單元,用于從消息接收單元接收的消息中提取該消息在指定屬性上的屬性信息;
[0025]錯誤信息表,用于保存預置的屬性信息;
[0026]比較單元,用于比較所述提取的屬性信息與錯誤信息表中保存的預置屬性信息是否相同;
[0027]第一發送單元,用于當比較單元比較結果為不相同時,將所述的接收的消息傳遞至消息消費者;
[0028]持久化單元,用于當比較單元比較結果為相同時,持久化所述屬性信息相同的消息;
[0029]第二發送單元,用于將所述持久化的消息按照預定的順序發送所述持久化單元中的消息。
[0030]本申請提供的一種消息傳遞方法和系統及消息中間件,即使在某些主體的消息傳輸不成功的情況下,也不會影響其他消息正常傳輸。對于具有較大量的消息需要利用消息中間件在消息發送者和消息接收者之間傳輸的情況,可以保證消息傳輸的穩定性。此外,消息中間件將所述持久化的消息按照預定的順序發送,可以使消息消費者按照正確的順序接收這些消息,從而可以包括消息傳輸的有序性。由于可以加入消息反饋機制,因此還可以保證消息傳輸的正確性。
【附圖說明】
[0031]圖1是現有技術中利用消息中間件技術進行消息傳遞的過程示意圖;
[0032]圖2是本申請一消息傳遞方法實施例的流程圖;
[0033]圖3是本申請一消息傳遞方法實施例的實施場景示意圖;
[0034]圖4是本申請一消息傳遞系統的模塊圖;
[0035]圖5是本申請一消息中間件的模塊圖;
[0036]圖6是本申請一消息中間件實施例的模塊圖;
[0037]圖7是本申請一消息中間件實施例的模塊圖;
[0038]圖8是本申請一消息中間件實施例的模塊圖;
[0039]圖9是本申請一消息傳遞方法實施例的實施場景示意圖。
【具體實施方式】
[0040]為了使本技術領域的人員更好地理解本申請中的技術方案,下面將結合本申請實施例中的附圖,對本申請實施例中的技術方案進行清楚、完整地描述。顯然,所描述的實施例僅僅是本申請一部分實施例,而不是全部的實施例。基于本申請中的實施例,本領域普