一種消息傳遞的方法、系統(tǒng)和裝置的制造方法
【專利摘要】本申請實施例公開了一種消息傳遞的方法、系統(tǒng)和裝置。該方法包括:發(fā)布方向消息中間件服務器發(fā)送需要傳遞的消息;消息中間件服務器將所述需要傳遞的消息存儲于數(shù)據(jù)庫和本地緩存;消息中間件服務器查詢本地緩存是否有所述需要傳遞的信息;若是,消息中間件服務器從本地緩存獲取所述需要傳遞的消息;消息中間件服務器根據(jù)訂閱關系將所述消息投遞給相應的訂閱方。利用本申請實施例提供的技術方案可以減少網(wǎng)絡、數(shù)據(jù)庫磁盤等開銷,提高消息中間件的性能。
【專利說明】
一種消息傳遞的方法、系統(tǒng)和裝置
技術領域
[0001]本申請涉及數(shù)據(jù)通信技術領域,特別涉及一種消息傳遞的方法、系統(tǒng)和裝置。
【背景技術】
[0002]在數(shù)據(jù)通信技術領域中,對象之間往往利用消息進行交互作用和通信。消息通信的基本方式包括同步方式和異步方式。同步方式中,兩個通信的對象之間必須要進行同步。這就意味著每個對象的服務必須都是正常運行的。這樣,發(fā)送對象中的發(fā)送程序(一種服務)和接收對象中的接收程序(同樣是一種服務)都一直處于運行狀態(tài),并且隨時做好相互通信的準備。發(fā)送程序向接收程序發(fā)起一個消息后,發(fā)送程序就會堵塞發(fā)送對象當前的進程。因此,發(fā)送對象不能與其它應用(也稱為應用程序)進行任何的通信以及交互,只能等待接收程序的響應。發(fā)送對象得到接收程序返回的消息之后,發(fā)送對象才會繼續(xù)向下運行,進行下一步的業(yè)務處理。在異步方式中,兩個通信的對象之間可以不用同時在線等待,任何一方只需處理自己的業(yè)務。例如發(fā)送對象發(fā)送消息之后不必僅等待接收方的響應,而是還可以接著處理其他的任務。消息的接收方也不用立即對接收到的消息進行處理。
[0003]隨著技術的發(fā)展,一些大型的系統(tǒng),由于用戶量龐大,業(yè)務復雜等原因,基于同步通信技術的方式已經(jīng)無法滿足交易系統(tǒng)對可擴展性、可維護、高性能的需求。所以會采用異步通信技術的方式。作為異步通信技術的一種,中間件(Middleware)技術提供系統(tǒng)軟件和應用軟件之間連接的軟件,以便于軟件各部件之間的溝通,特別是應用軟件對于系統(tǒng)軟件的集中的邏輯,是一種獨立的系統(tǒng)軟件或服務程序,分布式應用軟件借助這種軟件在不同的技術之間共享資源。
[0004]消息中間件(Message Oriented Middleware,MOM,也稱為面向消息的中間件)技術,提供了以松散耦合的靈活方式進行消息傳遞的一種中間件機制。MOM能夠?qū)崿F(xiàn)在不同平臺之間的通信,它常被用來屏蔽掉各種平臺及協(xié)議之間的特性,實現(xiàn)應用程序之間的協(xié)同。目前主流的消息中間件產(chǎn)品包括國際商業(yè)機器公司(Internat1nal Business MachinesCorporat1n, IBM)的 MQ Series,東亞銀行(Bank of East Asia, BEA)的 MessageQ 和太陽公司(Sun)的 Java 消息服務(Java Message Service, JMS)等。
[0005]MOM包括基于存儲和轉(zhuǎn)發(fā)的應用之間的異步消息傳遞或同步消息傳遞。在異步消息傳遞中,應用之間彼此不直接通信,而是與作為中介的MOM服務器通信。異步中間件技術又包括廣播方式和發(fā)布-訂閱方式兩類。
[0006]現(xiàn)有技術中一種利用MOM發(fā)布-訂閱方式進行消息傳遞的流程圖如圖1所示。如圖1中,具體過程包括:SI,發(fā)送應用程序(以下稱為發(fā)布方)向MOM服務器發(fā)送需要發(fā)布的消息;S2,MOM服務器將所述需要發(fā)布的消息存儲在數(shù)據(jù)庫(Μ0Μ的一個組件)中;S3,MOM服務器通過網(wǎng)絡從數(shù)據(jù)庫中獲取所述需要發(fā)布的消息;S4,MOM服務器根據(jù)訂閱關系將所述消息投遞給相應的訂閱該消息的應用程序(以下稱為訂閱方)。
[0007]在實現(xiàn)本申請過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術中至少存在如下問題:
[0008]發(fā)布-訂閱模型的MOM實際應用中,MOM服務器每次投遞消息都要通過網(wǎng)絡查詢數(shù)據(jù)庫獲得需要傳遞的消息,這樣就會帶來一定的網(wǎng)絡、數(shù)據(jù)庫磁盤等開銷,同時也會影響MOM的性能。
【發(fā)明內(nèi)容】
[0009]本申請實施例的目的是提供一種消息傳遞的方法、系統(tǒng)和裝置,以減少網(wǎng)絡、數(shù)據(jù)庫磁盤等開銷,提高消息中間件的性能。
[0010]為解決上述技術問題,本申請實施例提供一種消息傳遞的方法、系統(tǒng)和裝置是這樣實現(xiàn)的:
[0011 ] 一種消息傳遞的方法,包括:
[0012]發(fā)布方向消息中間件服務器發(fā)送需要傳遞的消息;
[0013]消息中間件服務器將所述需要傳遞的消息存儲于數(shù)據(jù)庫和本地緩存;
[0014]消息中間件服務器查詢本地緩存是否有所述需要傳遞的信息;
[0015]若是,消息中間件服務器從本地緩存獲取所述需要傳遞的消息;
[0016]消息中間件服務器根據(jù)訂閱關系將所述消息投遞給相應的訂閱方。
[0017]一種消息傳遞的方法,包括:
[0018]接收發(fā)布方發(fā)送的需要傳遞的消息;
[0019]將所述需要傳遞的消息存儲于數(shù)據(jù)庫和本地緩存;
[0020]查詢本地緩存是否有所述需要傳遞的信息;
[0021]若是,從本地緩存獲取所述需要傳遞的消息;
[0022]根據(jù)訂閱關系將所述消息投遞給相應的訂閱方。
[0023]—種消息傳遞的系統(tǒng),包括:
[0024]發(fā)布方,用于向消息中間件服務器發(fā)送需要傳遞的消息;
[0025]消息中間件服務器,所述消息中間件設置有本地緩存,所述本地緩存用于存儲所述需要傳遞的消息;所述消息中間件服務器用于將所述需要傳遞的消息存儲于數(shù)據(jù)庫和本地緩存;查詢本地緩存是否有所述需要傳遞的信息;若是,從本地緩存獲取所述需要傳遞的消息,并根據(jù)訂閱關系將所述消息投遞給相應的訂閱方;
[0026]數(shù)據(jù)庫,用于存儲所述需要傳遞的消息;
[0027]訂閱方,用于接收所述需要傳遞的消息。
[0028]—種消息傳遞的裝置,包括:
[0029]消息接收單元,用于接收發(fā)布方發(fā)送的需要傳遞的消息;
[0030]第一消息存儲單元,用于將所述需要傳遞的消息存儲于數(shù)據(jù)庫和本地緩存;
[0031]查詢單元,用于查詢本地緩存是否有所述需要傳遞的信息;
[0032]第一消息獲取單元,用于當查詢單元查詢到本地緩存中有所述需要傳遞的信息時,從本地緩存獲取所述需要傳遞的消息;
[0033]第一消息投遞單元,用于根據(jù)訂閱關系將所述消息投遞給相應的訂閱方。
[0034]由以上本申請實施例提供的技術方案可見,本申請實施例中,發(fā)布方將需要傳遞的消息發(fā)送給MOM服務器后,MOM服務器將所述需要傳遞的消息存儲于數(shù)據(jù)庫,同時也將所述消息存儲于本地緩存。在向訂閱方投遞需要傳遞的消息時,無需通過網(wǎng)絡從數(shù)據(jù)庫中獲得所述消息,可直接從本地緩存獲取所述消息,完成消息的傳遞。與現(xiàn)有技術相比,在利用消息中間件完成消息傳遞的同時大大減少了網(wǎng)絡、數(shù)據(jù)庫磁盤等開銷,提高了消息中間件的性能。
【附圖說明】
[0035]為了更清楚地說明本申請實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請中記載的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0036]圖1是現(xiàn)有技術中一種利用MOM發(fā)布-訂閱方式進行消息傳遞的流程圖;
[0037]圖2是本申請一種消息傳遞的方法的第一個實施例的流程圖;
[0038]圖3是本申請一種消息傳遞的方法的第二個實施例的流程圖;
[0039]圖4是本申請一種消息傳遞的方法的第三個實施例的流程圖;
[0040]圖5是本申請一種消息傳遞的方法的第四個實施例的流程圖;
[0041]圖6是本申請一種消息傳遞的系統(tǒng)的第一個實施例的流程圖;
[0042]圖7是本申請一種消息傳遞的方法的第一個實施例的流程圖。
【具體實施方式】
[0043]本申請實施例提供一種消息傳遞的方法、系統(tǒng)和裝置。
[0044]為了使本技術領域的人員更好地理解本申請中的技術方案,下面將結(jié)合本申請實施例中的附圖,對本申請實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本申請一部分實施例,而不是全部的實施例?;诒旧暾堉械膶嵤├?,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都應當屬于本申請保護的范圍。
[0045]以下以幾個具體的例子詳細說明本申請實施例的具體實現(xiàn)。
[0046]以下首先介紹本申請一種消息傳遞的方法的第一實施例。結(jié)合附圖2,該實施例包括:
[0047]S210:發(fā)布方向MOM服務器發(fā)送需要傳遞的消息。
[0048]在實際應用中,一般采用消息中間件的都是一些大型的系統(tǒng),因此,這里的發(fā)布方一般是多個發(fā)布方,也可以是一個發(fā)布方,也即同時可能會有一個或多個發(fā)布方向MOM服務器發(fā)送消息。
[0049]進一步的,發(fā)布方通常會通過所采用的MOM對應的MOM客戶端向MOM服務器發(fā)送消息,比如天貓系統(tǒng)采用的消息中間件產(chǎn)品為稱為“Notify”的消息中間件,會有一個對應的Notify Client供發(fā)布方向Notify Server發(fā)送消息。
[0050]S220:Μ0Μ服務器將所述需要傳遞的消息存儲于數(shù)據(jù)庫和本地緩存。
[0051]在實際應用中,為了保證消息不丟失,MOM服務器可以將當前還沒有發(fā)送給訂閱方的消息存儲在數(shù)據(jù)庫中。MOM服務器可以在將消息成功發(fā)送至訂閱方后才將消息從數(shù)據(jù)庫中刪除。
[0052]這里的數(shù)據(jù)庫可以是MySQL。MySQL是一個開放源碼的關系型數(shù)據(jù)庫管理系統(tǒng)。此夕卜,本申請實施例所述的數(shù)據(jù)庫不僅限于MySQL,在實際中還可以是其他形式,例如非關系型的數(shù)據(jù)庫(Not Only SQL, NoSQL)等,本申請實施例并不以此為限。
[0053]MOM服務器除了將所述需要傳遞的消息存儲于數(shù)據(jù)庫,還可以將所述需要傳遞的消息存儲于本地緩存。
[0054]進一步的,這里可以通過近期最少使用算法(Least Recently Used, LRU)或先進先出隊列(First Input First Output, FIFO)對本地緩存進行管理,以保證存儲在本地緩存的消息在本地緩存的存儲容量范圍內(nèi)。
[0055]此外,本申請實施例實現(xiàn)本地緩存的管理不僅限于近期最少使用算法或先進先出隊列,在實際中還可以是其他形式,本申請實施例并不以此為限。
[0056]S230:Μ0Μ服務器查詢本地緩存是否有所述需要傳遞的信息。
[0057]本申請實施例中,當MOM服務器將所述需要傳遞的消息存儲到數(shù)據(jù)庫和本地緩存后,MOM服務器將所述消息投遞給相應的訂閱方之前,需要從本地緩存獲取所述消息。一般地,MOM服務器將所述消息存儲于本地緩存到MOM服務器從本地緩存獲取所述消息之間,往往有一段執(zhí)行的時間。在這段時間中,可能有多個發(fā)布方向MOM服務器發(fā)送需要傳遞的消息,導致所述本地緩存中存儲內(nèi)容的更新;根據(jù)本地緩存管理策略,當前需要傳遞的消息可能已經(jīng)不在本地緩存中,故需要先查詢所述消息是否還在本地緩存中。
[0058]若步驟S230的查詢結(jié)果為是,進入步驟S240。
[0059]S240:Μ0Μ服務器從本地緩存獲取所述需要傳遞的消息。
[0060]S250:Μ0Μ服務器根據(jù)訂閱關系將所述消息投遞給相應的訂閱方。
[0061]這里的訂閱關系是在訂閱啟動的時候就會發(fā)送給MOM服務器,也即在發(fā)布方向MOM服務器發(fā)送消息之前,訂閱方需要向MOM服務器發(fā)送訂閱請求和訂閱關系。然后MOM服務器將所述訂閱關系保存起來。
[0062]步驟S240中,MOM服務器可以從本地緩存獲取所述需要傳遞的消息。本步驟中,MOM服務器可以根據(jù)訂閱關系將所述消息投遞給相應的訂閱方。
[0063]由此可見,本申請實施例提供的技術方案中發(fā)布方將需要傳遞的消息發(fā)送給MOM服務器后,MOM服務器將所述需要傳遞的消息存儲于數(shù)據(jù)庫,同時也將所述消息存儲于本地緩存。在向訂閱方投遞需要傳遞的消息時,無需通過網(wǎng)絡從數(shù)據(jù)庫中獲得所述消息,可直接從本地緩存獲取所述消息,完成消息的傳遞。與現(xiàn)有技術相比,在利用消息中間件完成消息傳遞的同時大大減少了網(wǎng)絡、數(shù)據(jù)庫磁盤等開銷,提高了消息中間件的性能。
[0064]由于MOM服務器將所述需要傳遞的消息存儲于本地緩存到MOM服務器從本地緩存獲取所述消息之間,往往有一段執(zhí)行的時間。在這段執(zhí)行的時間中,可能會有多個發(fā)布方向MOM服務器發(fā)送需要傳遞的信息,導致所述本地緩存中存儲內(nèi)容的更新;因此,根據(jù)本地緩存管理策略,當前需要傳遞的消息可能已經(jīng)不在本地緩存中。
[0065]在本申請第一方法實施例的基礎上,結(jié)合附圖3,本申請第二方法實施例具體包括:
[0066]S310:發(fā)布方向MOM服務器發(fā)送需要傳遞的消息。
[0067]在實際應用中,一般采用消息中間件的都是一些大型的系統(tǒng),因此,這里的發(fā)布方一般是多個發(fā)布方,也可以是一個發(fā)布方,也即同時可能會有一個或多個發(fā)布方向MOM服務器發(fā)送消息。
[0068]進一步的,發(fā)布方通常會通過所采用的MOM對應的MOM客戶端向MOM服務器發(fā)送消息,比如天貓系統(tǒng)采用的消息中間件產(chǎn)品為稱為“Notify”的消息中間件,會有一個對應的Notify Client供發(fā)布方向Notify Server發(fā)送消息。
[0069]S320:Μ0Μ服務器將所述需要傳遞的消息存儲于數(shù)據(jù)庫和本地緩存。
[0070]在實際應用中,為了保證消息不丟失,MOM服務器可以將當前還沒有發(fā)送給訂閱方的消息存儲在數(shù)據(jù)庫中。MOM服務器可以在將消息成功發(fā)送至訂閱方后才將消息從數(shù)據(jù)庫中刪除。
[0071]S330:Μ0Μ服務器查詢本地緩存是否有所述需要傳遞的消息。
[0072]本申請實施例中,當MOM服務器將所述需要傳遞的消息存儲到數(shù)據(jù)庫和本地緩存后,MOM服務器將所述消息投遞給相應的訂閱方之前,需要從本地緩存獲取所述消息。一般地,MOM服務器將所述消息存儲于本地緩存到MOM服務器從本地緩存獲取所述消息之間,往往有一段執(zhí)行的時間。在這段時間中,可能有多個發(fā)布方向MOM服務器發(fā)送消息,導致所述本地緩存中存儲內(nèi)容的更新,根據(jù)本地緩存管理策略,當前需要傳遞的消息可能已經(jīng)不在本地緩存中,故需要先查詢所述消息是否還在本地緩存中。
[0073]如果MOM服務器查詢到本地緩存有所述需要傳遞的信息時,進入步驟S341 ;如果MOM服務器查詢到本地緩存沒有所述需要傳遞的信息時,進入步驟S342。
[0074]S341:Μ0Μ服務器從本地緩存獲取所述需要傳遞的消息;
[0075]當MOM服務器從本地緩存獲取所述需要傳遞的消息后,進入步驟S350。
[0076]S342:Μ0Μ服務器從數(shù)據(jù)庫獲取所述需要傳遞的消息,并將所述需要傳遞的消息存儲于本地緩存。
[0077]由于數(shù)據(jù)庫中會存儲有當前還沒有發(fā)送完的消息,因此當無法從本地緩存獲取所述需要傳遞的消息時,可以通過網(wǎng)絡查詢數(shù)據(jù)庫,從數(shù)據(jù)庫中獲取所述消息,并將所述消息存儲于本地緩存,以便后續(xù)使用,并進入步驟S350。
[0078]S350:Μ0Μ服務器根據(jù)訂閱關系將所述消息投遞給相應的訂閱方。
[0079]這里的訂閱關系是在訂閱啟動的時候就會發(fā)送給MOM服務器,也即在發(fā)布方向MOM服務器發(fā)送消息之前,訂閱方就會向MOM服務器發(fā)送訂閱請求和訂閱關系發(fā)送給MOM服務器。然后MOM服務器將所述訂閱關系保存起來。
[0080]當MOM服務器從本地緩存或數(shù)據(jù)庫獲取所述需要傳遞的消息后,可以根據(jù)訂閱關系將所述消息投遞給相應的訂閱方。
[0081]由此可見,本申請實施例提供的技術方案中,當發(fā)布方將需要傳遞的消息發(fā)送給MOM服務器后,MOM服務器將所述需要傳遞的消息存儲于數(shù)據(jù)庫,同時也將所述消息存儲于本地緩存。在向訂閱方投遞需要傳遞的消息時,無需每次投遞消息前都查詢數(shù)據(jù)庫,可直接從本地緩存獲取所述消息。只有當本地緩存中沒有所述消息時,MOM服務器才通過網(wǎng)絡從數(shù)據(jù)庫中獲得所述消息,并完成消息的傳遞。與現(xiàn)有技術相比,在利用消息中間件完成消息傳遞的同時大大減少了網(wǎng)絡、數(shù)據(jù)庫磁盤等開銷,提高了消息中間件的性能。
[0082]上述第一方法實施例,考慮MOM服務器為主的步驟,可以演化為第三方法實施例,結(jié)合附圖4,具體包括:
[0083]S410:接收發(fā)布方發(fā)送的需要傳遞的消息。
[0084]S420:將所述需要傳遞的消息存儲于數(shù)據(jù)庫和本地緩存。
[0085]S430:查詢本地緩存是否有所述需要傳遞的信息。
[0086]當查詢到本地緩存有所述需要傳遞的信息,進入步驟S440。
[0087]S440:從本地緩存獲取所述需要傳遞的消息。
[0088]S450:根據(jù)訂閱關系將所述消息投遞給相應的訂閱方。
[0089]由此可見,本申請實施例提供的技術方案中MOM服務器通過將發(fā)布方發(fā)送的需要傳遞的消息存儲于數(shù)據(jù)庫,同時也將所述消息存儲于本地緩存。在向訂閱方投遞需要傳遞的消息時,無需通過網(wǎng)絡從數(shù)據(jù)庫中獲得所述消息,可直接從本地緩存獲取所述消息,并完成消息的傳遞。與現(xiàn)有技術相比,在利用消息中間件完成消息傳遞的同時大大減少了網(wǎng)絡、數(shù)據(jù)庫磁盤等開銷,提高了消息中間件的性能。
[0090]上述第二方法實施例,考慮MOM服務器為主的步驟,可以演化為第四方法實施例,結(jié)合附圖5,具體包括:
[0091]S510:接收發(fā)布方發(fā)送的需要傳遞的消息。
[0092]S520:將所述需要傳遞的消息存儲于數(shù)據(jù)庫和本地緩存。
[0093]S530:查詢本地緩存是否有所述需要傳遞的信息。
[0094]如果查詢到本地緩存有所述需要傳遞的信息,進入步驟S541 ;如果查詢到本地緩存沒有所述需要傳遞的信息,進入步驟S542。
[0095]S541:從本地緩存獲取所述需要傳遞的消息。
[0096]當MOM服務器從本地緩存獲取所述需要傳遞的消息后,進入步驟S550。
[0097]S542:從數(shù)據(jù)庫獲取所述需要傳遞的消息,并將所述需要傳遞的消息存儲于本地緩存。
[0098]由于數(shù)據(jù)庫中會存儲有當前還沒有發(fā)送至訂閱方的消息,因此,當無法從本地緩存獲取所述需要傳遞的消息時,MOM服務器可以通過網(wǎng)絡查詢數(shù)據(jù)庫,從數(shù)據(jù)庫中獲取所述消息,并將所述消息存儲于本地緩存,以便后續(xù)使用,并進入步驟S550。
[0099]S550:根據(jù)訂閱關系將所述消息投遞給相應的訂閱方。
[0100]由此可見,本申請實施例提供的技術方案中MOM服務器通過將發(fā)布方發(fā)送的需要傳遞的消息存儲于數(shù)據(jù)庫,同時也將所述消息存儲于本地緩存。在向訂閱方投遞需要傳遞的消息時,無需每次投遞消息前都查詢數(shù)據(jù)庫,可直接從本地緩存獲取所述消息。只有當本地緩存中沒有所述消息時,MOM服務器才通過網(wǎng)絡從數(shù)據(jù)庫中獲得所述消息,并完成消息的傳遞。與現(xiàn)有技術相比,在利用消息中間件完成消息傳遞的同時大大減少了網(wǎng)絡、數(shù)據(jù)庫磁盤等開銷,提高了消息中間件的性能。
[0101]上述第一方法實施例,對應的消息傳遞系統(tǒng)第一實施例可以如圖6所示,該系統(tǒng)600包括:
[0102]發(fā)布方610,用于向MOM服務器發(fā)送需要傳遞的消。
[0103]MOM服務器620,所述消息中間件設置有本地緩存,所述本地緩存用于存儲所述需要傳遞的消息;所述消息中間件服務器用于將所述需要傳遞的消息存儲于數(shù)據(jù)庫和本地緩存;查詢本地緩存是否有所述需要傳遞的信息;若是,從本地緩存獲取所述需要傳遞的消息,并根據(jù)訂閱關系將所述消息投遞給相應的訂閱方。
[0104]數(shù)據(jù)庫630,用于存儲所述需要傳遞的消息。
[0105]訂閱方640,用于接收所述需要傳遞的消息。
[0106]上述第一方法實施例,對應的消息傳遞裝置第一實施例可以如圖7所示,該裝置700包括:
[0107]消息接收單元710,用于接收發(fā)布方發(fā)送的需要傳遞的消息。
[0108]第一消息存儲單元720,用于將所述需要傳遞的消息存儲于數(shù)據(jù)庫和本地緩存。
[0109]查詢單元730,用于查詢本地緩存是否有所述需要傳遞的信息。
[0110]第一消息獲取單元740,用于當查詢單元查詢到本地緩存中有所述需要傳遞的信息時,從本地緩存獲取所述需要傳遞的消息。
[0111]第一消息投遞單元750,用于根據(jù)訂閱關系將所述消息投遞給相應的訂閱方。
[0112]進一步的,該裝置還包括:第二消息獲取單元,用于當查詢單元查詢到本地緩存中沒有所述需要傳遞的信息時,從數(shù)據(jù)庫獲取所述需要傳遞的消息。
[0113]第二消息存儲單元,用于將所述需要傳遞的消息存儲于本地緩存。
[0114]第二消息投遞單元,用于根據(jù)訂閱關系將所述消息投遞給相應的訂閱方。
[0115]由此可見,本申請實施例提供的一種消息傳遞的方法、系統(tǒng)和裝置,當發(fā)布方將需要傳遞的消息發(fā)送給MOM服務器后,MOM服務器將所述需要傳遞的消息存儲于數(shù)據(jù)庫,同時也將所述消息存儲于本地緩存。在向訂閱方投遞需要傳遞的消息時,無需每次投遞消息前都查詢數(shù)據(jù)庫,可直接從本地緩存獲取所述消息。只有當本地緩存中沒有所述消息時,MOM服務器才通過網(wǎng)絡從數(shù)據(jù)庫中獲得所述消息,并完成消息的傳遞。與現(xiàn)有技術相比,在利用消息中間件完成消息傳遞的同時大大減少了網(wǎng)絡、數(shù)據(jù)庫磁盤等開銷,提高了消息中間件的性能。
[0116]在20世紀90年代,對于一個技術的改進可以很明顯地區(qū)分是硬件上的改進(例如,對二極管、晶體管、開關等電路結(jié)構(gòu)的改進)還是軟件上的改進(對于方法流程的改進)。然而,隨著技術的發(fā)展,當今的很多方法流程的改進已經(jīng)可以視為硬件電路結(jié)構(gòu)的直接改進。設計人員幾乎都通過將改進的方法流程編程到硬件電路中來得到相應的硬件電路結(jié)構(gòu)。因此,不能說一個方法流程的改進就不能用硬件實體模塊來實現(xiàn)。例如,可編程邏輯器件(Programmable Logic Device, PLD)(例如現(xiàn)場可編程門陣列(Field ProgrammableGate Array,F(xiàn)PGA))就是這樣一種集成電路,其邏輯功能由用戶對器件編程來確定。由設計人員自行編程來把一個數(shù)字系統(tǒng)“集成”在一片PLD上,而不需要請芯片制造廠商來設計和制作專用的集成電路芯片2。而且,如今,取代手工地制作集成電路芯片,這種編程也多半改用“邏輯編譯器(logic compiler)”軟件來實現(xiàn),它與程序開發(fā)撰寫時所用的軟件編譯器相類似,而要編譯之前的原始代碼也得用特定的編程語言來撰寫,此稱之為硬件描述語言(Hardware Descript1n Language,HDL),而HDL也并非僅有一種,而是有許多種,如 ABEL(Advanced Boolean Express1n Language)、AHDL(Altera Hardware Descript1nLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Descript1n Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Descript1n Language)等,目前最普遍使用的是 VHDL(Very-High_SpeedIntegrated Circuit Hardware Descript1n Language)與 Verilog2。本令頁域技術人員也應該清楚,只需要將方法流程用上述幾種硬件描述語言稍作邏輯編程并編程到集成電路中,就可以很容易得到實現(xiàn)該邏輯方法流程的硬件電路。
[0117]控制器可以按任何適當?shù)姆绞綄崿F(xiàn),例如,控制器可以采取例如微處理器或處理器以及存儲可由該(微)處理器執(zhí)行的計算機可讀程序代碼(例如軟件或固件)的計算機可讀介質(zhì)、邏輯門、開關、專用集成電路(Applicat1n Specific Integrated Circuit,ASIC)、可編程邏輯控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20 以及 Silicone Labs C8051F320,存儲器控制器還可以被實現(xiàn)為存儲器的控制邏輯的一部分。
[0118]本領域技術人員也知道,除了以純計算機可讀程序代碼方式實現(xiàn)控制器以外,完全可以通過將方法步驟進行邏輯編程來使得控制器以邏輯門、開關、專用集成電路、可編程邏輯控制器和嵌入微控制器等的形式來實現(xiàn)相同功能。因此這種控制器可以被認為是一種硬件部件,而對其內(nèi)包括的用于實現(xiàn)各種功能的裝置也可以視為硬件部件內(nèi)的結(jié)構(gòu)?;蛘呱踔粒梢詫⒂糜趯崿F(xiàn)各種功能的裝置視為既可以是實現(xiàn)方法的軟件模塊又可以是硬件部件內(nèi)的結(jié)構(gòu)。
[0119]上述實施例闡明的系統(tǒng)、裝置、模塊或單元,具體可以由計算機芯片或?qū)嶓w實現(xiàn),或者由具有某種功能的產(chǎn)品來實現(xiàn)。
[0120]為了描述的方便,描述以上裝置時以功能分為各種單元分別描述。當然,在實施本申請時可以把各單元的功能在同一個或多個軟件和/或硬件中實現(xiàn)。
[0121]通過以上的實施方式的描述可知,本領域的技術人員可以清楚地了解到本申請可借助軟件加必需的通用硬件平臺的方式來實現(xiàn)?;谶@樣的理解,本申請的技術方案本質(zhì)上或者說對現(xiàn)有技術做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,在一個典型的配置中,計算設備包括一個或多個處理器(CPU)、輸入/輸出接口、網(wǎng)絡接口和內(nèi)存。該計算機軟件產(chǎn)品可以包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網(wǎng)絡設備等)執(zhí)行本申請各個實施例或者實施例的某些部分所述的方法。該計算機軟件產(chǎn)品可以存儲在內(nèi)存中,內(nèi)存可能包括計算機可讀介質(zhì)中的非永久性存儲器,隨機存取存儲器(RAM)和/或非易失性內(nèi)存等形式,如只讀存儲器(ROM)或閃存(flash RAM)。內(nèi)存是計算機可讀介質(zhì)的示例。計算機可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術來實現(xiàn)信息存儲。信息可以是計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計算機的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(PRAM)、靜態(tài)隨機存取存儲器(SRAM)、動態(tài)隨機存取存儲器(DRAM)、其他類型的隨機存取存儲器(RAM)、只讀存儲器(R0M)、電可擦除可編程只讀存儲器(EEPROM)、快閃記憶體或其他內(nèi)存技術、只讀光盤只讀存儲器(CD-R0M)、數(shù)字多功能光盤(DVD)或其他光學存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設備訪問的信息。按照本文中的界定,計算機可讀介質(zhì)不包括短暫電腦可讀媒體(transitory media),如調(diào)制的數(shù)據(jù)信號和載波。
[0122]本說明書中的各個實施例均采用遞進的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。尤其,對于系統(tǒng)實施例而言,由于其基本相似于方法實施例,所以描述的比較簡單,相關之處參見方法實施例的部分說明即可。
[0123]本申請可用于眾多通用或?qū)S玫挠嬎銠C系統(tǒng)環(huán)境或配置中。例如:個人計算機、月艮務器計算機、手持設備或便攜式設備、平板型設備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、置頂盒、可編程的消費電子設備、網(wǎng)絡PC、小型計算機、大型計算機、包括以上任何系統(tǒng)或設備的分布式計算環(huán)境等等。
[0124]本申請可以在由計算機執(zhí)行的計算機可執(zhí)行指令的一般上下文中描述,例如程序模塊。一般地,程序模塊包括執(zhí)行特定任務或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等等。也可以在分布式計算環(huán)境中實踐本申請,在這些分布式計算環(huán)境中,由通過通信網(wǎng)絡而被連接的遠程處理設備來執(zhí)行任務。在分布式計算環(huán)境中,程序模塊可以位于包括存儲設備在內(nèi)的本地和遠程計算機存儲介質(zhì)中。
[0125]雖然通過實施例描繪了本申請,本領域普通技術人員知道,本申請有許多變形和變化而不脫離本申請的精神,希望所附的權(quán)利要求包括這些變形和變化而不脫離本申請的精神。
【主權(quán)項】
1.一種消息傳遞的方法,其特征在于,包括: 發(fā)布方向消息中間件服務器發(fā)送需要傳遞的消息; 消息中間件服務器將所述需要傳遞的消息存儲于數(shù)據(jù)庫和本地緩存; 消息中間件服務器查詢本地緩存是否有所述需要傳遞的信息; 若是,消息中間件服務器從本地緩存獲取所述需要傳遞的消息; 消息中間件服務器根據(jù)訂閱關系將所述消息投遞給相應的訂閱方。2.根據(jù)權(quán)利要求1所述的消息傳遞的方法,其特征在于,該方法還包括: 當所述消息中間件服務器查詢到本地緩存沒有所述需要傳遞的信息時,消息中間件服務器從數(shù)據(jù)庫獲取所述需要傳遞的消息,并將所述需要傳遞的消息存儲于本地緩存; 消息中間件服務器根據(jù)訂閱關系將所述消息投遞給相應的訂閱方。3.根據(jù)權(quán)利要求1或2所述的消息傳遞的方法,其特征在于,所述發(fā)布方向消息中間件服務器發(fā)送需要傳遞的消息包括: 發(fā)布方通過消息中間件客戶端向消息中間件服務器發(fā)送需要傳遞的消息。4.根據(jù)權(quán)利要求1或2所述的消息傳遞的方法,其特征在于,所述本地緩存的管理方法包括:近期最少使用算法或先進先出隊列。5.一種消息傳遞的方法,其特征在于,包括: 接收發(fā)布方發(fā)送的需要傳遞的消息; 將所述需要傳遞的消息存儲于數(shù)據(jù)庫和本地緩存; 查詢本地緩存是否有所述需要傳遞的信息; 若是,從本地緩存獲取所述需要傳遞的消息; 根據(jù)訂閱關系將所述消息投遞給相應的訂閱方。6.根據(jù)權(quán)利要求5所述的消息傳遞的方法,其特征在于,該方法還包括: 當查詢到本地緩存沒有所述需要傳遞的信息時,從數(shù)據(jù)庫獲取所述需要傳遞的消息,并將所述需要傳遞的消息存儲于本地緩存; 根據(jù)訂閱關系將所述消息投遞給相應的訂閱方。7.根據(jù)權(quán)利要求5或6所述的消息傳遞的方法,其特征在于,所述本地緩存的管理方法包括:近期最少使用算法或先進先出隊列。8.一種消息傳遞的系統(tǒng),其特征在于,包括: 發(fā)布方,用于向消息中間件服務器發(fā)送需要傳遞的消息; 消息中間件服務器,所述消息中間件設置有本地緩存,所述本地緩存用于存儲所述需要傳遞的消息;所述消息中間件服務器用于將所述需要傳遞的消息存儲于數(shù)據(jù)庫和本地緩存;查詢本地緩存是否有所述需要傳遞的信息;若是,從本地緩存獲取所述需要傳遞的消息,并根據(jù)訂閱關系將所述消息投遞給相應的訂閱方; 數(shù)據(jù)庫,用于存儲所述需要傳遞的消息; 訂閱方,用于接收所述需要傳遞的消息。9.根據(jù)權(quán)利要求8所述的消息傳遞的系統(tǒng),其特征在于,若查詢到本地緩存沒有所述需要傳遞的信息時,所述消息中間件服務器還用于從數(shù)據(jù)庫獲取所述需要傳遞的消息,并將所述需要傳遞的消息存儲于本地緩存,再根據(jù)訂閱關系將所述消息投遞給相應的訂閱方。10.根據(jù)權(quán)利要求8或9所述的消息傳遞的系統(tǒng),其特征在于,所述向消息中間件服務器發(fā)送需要傳遞的消息包括: 通過消息中間件客戶端向消息中間件服務器發(fā)送需要傳遞的消息。11.根據(jù)權(quán)利要求8或9所述的消息傳遞的系統(tǒng),其特征在于,所述本地緩存的管理方法包括:近期最少使用算法或先進先出隊列。12.一種消息傳遞的裝置,其特征在于,包括: 消息接收單元,用于接收發(fā)布方發(fā)送的需要傳遞的消息; 第一消息存儲單元,用于將所述需要傳遞的消息存儲于數(shù)據(jù)庫和本地緩存; 查詢單元,用于查詢本地緩存是否有所述需要傳遞的信息; 第一消息獲取單元,用于當查詢單元查詢到本地緩存中有所述需要傳遞的信息時,從本地緩存獲取所述需要傳遞的消息; 第一消息投遞單元,用于根據(jù)訂閱關系將所述消息投遞給相應的訂閱方。13.根據(jù)權(quán)利要求12所述的消息傳遞的裝置,其特征在于,該裝置還包括: 第二消息獲取單元,用于當查詢單元查詢到本地緩存中沒有所述需要傳遞的信息時,從數(shù)據(jù)庫獲取所述需要傳遞的消息; 第二消息存儲單元,用于將所述需要傳遞的消息存儲于本地緩存; 第二消息投遞單元,用于根據(jù)訂閱關系將所述消息投遞給相應的訂閱方。14.根據(jù)權(quán)利要求12或13所述的消息傳遞的裝置,其特征在于,所述本地緩存的管理方法包括:近期最少使用算法或先進先出隊列。
【文檔編號】H04L29/08GK105871959SQ201510032833
【公開日】2016年8月17日
【申請日】2015年1月22日
【發(fā)明人】傅玉寶
【申請人】阿里巴巴集團控股有限公司