專利名稱:用于管理訂閱的發(fā)布/訂閱系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及發(fā)布/訂閱系統(tǒng),例如運行發(fā)布/訂閱消息代理(messagebroker)的數(shù)據(jù)處理系統(tǒng),并且涉及用于在這種系統(tǒng)中管理訂閱和取消訂閱請求的方法。
背景技術(shù):
在“發(fā)布/訂閱”通信系統(tǒng)中的是一類消息傳遞應(yīng)用,其中,借助于中間代理或其它實現(xiàn)訂閱匹配以標(biāo)識特定的訂閱者感興趣的信息的系統(tǒng)部件,信息提供者(發(fā)布者)分離于該信息的用戶(訂閱者)。訂閱可以指定感興趣的主題名稱,或者可以指定感興趣的信息內(nèi)容。通常,在這種基于主題的發(fā)布/訂閱消息傳遞系統(tǒng)中,眾多的發(fā)布者向消息代理發(fā)布關(guān)于特定主題(例如新聞、天氣、運動)的消息。訂閱者通過接收于代理的訂閱請求在這些主題中注冊它們的興趣。舉例來說,訂閱者可以是這樣的應(yīng)用程序或系統(tǒng),即其要求所有的請求接收關(guān)于主題“天氣”所發(fā)布的任何的信息,同時,另一訂閱者可以請求關(guān)于主題“新聞”和“運動”的信息。發(fā)布者并不需要關(guān)心它們的發(fā)布將去往何處,并且訂閱者也不需要知道它們接收的消息來自何處。作為替代,代理根據(jù)代理中所注冊的有效訂閱管理消息的分發(fā)以確定它們到達(dá)正確的目的地。代理還確保以正確的格式分發(fā)消息,并且驗證每個發(fā)布者向已訂閱了包括該消息的特定主題的訂閱者發(fā)布的權(quán)限。
一般來說,發(fā)布者生成它想要發(fā)布的消息并且定義該消息的主題。代理從它的輸入節(jié)點檢索消息并且將其傳遞至用于向所有已注冊感興趣的訂閱者分發(fā)的發(fā)布節(jié)點。向訂閱者分發(fā)消息可以通過從代理的點對點的廣播或者可以通過多播。在后一種情況下,為了減少網(wǎng)絡(luò)業(yè)務(wù),可以將關(guān)于特定主題的消息分發(fā)至中間共享地址,該中間共享地址是為所有已在特定的主題中注冊過感興趣的訂閱者提供的,從而使得它們可以針對最新發(fā)布的信息進(jìn)行收聽。
另一種發(fā)布/訂閱通信的方法使用客戶端訂閱匹配部件。就是說,來自被認(rèn)可的發(fā)布者的所有發(fā)布被傳送至每個運行一個或多個訂閱者應(yīng)用的系統(tǒng),并且與本地訂閱者應(yīng)用相關(guān)聯(lián)的部件確定刪除何種發(fā)布(因為本地訂閱者對它們不感興趣)以及將何種發(fā)布傳遞給本地訂閱者應(yīng)用。
為了便于更確切地標(biāo)識感興趣主題,已開發(fā)了多級的并且允許使用通配符的特定主題語法(syntax)。以這種方式仔細(xì)定義的相關(guān)主題的集合可以由單個訂閱所覆蓋。
在來自國際商業(yè)機(jī)器公司(IBM)的產(chǎn)品WebSphere BusinessIntegration Message Broker V5.0(“WebSphere”是國際商業(yè)機(jī)器公司的商標(biāo))的文獻(xiàn)庫中題為“Publish/Subscribe”(第三版,2005年2月)的文獻(xiàn)中進(jìn)一步描述了這種類型的一種公知的發(fā)布/訂閱系統(tǒng)。
在該文獻(xiàn)中,說明了“主題”可以是描述在發(fā)布/訂閱系統(tǒng)中所發(fā)布的數(shù)據(jù)特性的任意字符串。主題是成功投遞消息的關(guān)鍵。作為對在每個消息中包括指定目的地址的替代,發(fā)布者將主題指派給消息。代理將主題與已訂閱該主題的客戶(訂閱者)的列表相匹配并且將消息投遞至那些客戶中的每一個??梢杂上到y(tǒng)管理員預(yù)先定義主題,然而也可以在發(fā)布中第一次被指定的時候定義主題。
每個定義的主題成為主題樹中的元素或者節(jié)點。得到的樹通常是具有一個或多個根主題的分層(多級)結(jié)構(gòu)。通過名稱來標(biāo)識節(jié)點并且通過指定層次的連續(xù)級別上的節(jié)點的名稱可結(jié)合節(jié)點來定義更窄的主題。級別可以通過斜杠“/”符號來分隔。
在一些IBM產(chǎn)品所使用的語法中,發(fā)布/訂閱主題便是由以斜桿來分隔的任意字符串這樣標(biāo)識的。除了斜桿“/”以外,特殊的意義也應(yīng)用于加號“+”和井號“#”(在美國也稱作磅字符),其表示不同類型的通配符?,F(xiàn)在將使用例子更為詳細(xì)的討論這些特殊的字符。
斜桿符號(“/”)表示在樹中被解釋為級別的主題名稱內(nèi)的分區(qū),如上面所說明的。舉例來說,“雇員/雇用/開發(fā)”是僅指示有關(guān)開發(fā)函數(shù)內(nèi)雇用的雇員的信息的具有三級的主題名稱。斜桿用于定義主題名稱區(qū)中的層次。不存在對主題樹中的級別數(shù)目的限制并且可以有任意數(shù)目的根節(jié)點(即任意數(shù)目的主題樹)。
為了更好的適應(yīng)性,定義井號字符(“#”)為可以與任意數(shù)目的分區(qū)相匹配的通配符。盡管一些實現(xiàn)僅允許在主題的開始或結(jié)束使用井號字符,然而這一規(guī)則卻不可以在其它情況下應(yīng)用。因此訂閱“雇員/#”會收到所有具有主題名“雇員/雇用”和“雇員/雇用/開發(fā)”的消息。為此,井號通配符被稱為多級通配符。由于#通配符的語義學(xué)是它可以與零個或更多的分區(qū)相匹配,“雇員/#”還可以與僅僅是“雇員”的相匹配(但這種情況下,由于沒有分區(qū)分隔,斜桿是沒有意義的)。通常,多級通配符用于與未知深度的子樹相匹配。通過在“雇員”前使用“#/”,即“#/雇員”,其它諸如“開發(fā)/雇員”的恰好含有底級關(guān)于“雇員”的多級主題串將會匹配。
第二種類型的通配符是加號“+”。由于它僅會與單個分區(qū)相匹配,因此它被稱作單級通配符。舉例來說,“雇員/+”會與“雇員/雇用”相匹配而不會與“雇員/雇用/開發(fā)”相匹配。由于主題中必須存在第二級名稱,因此它也不會與單獨的“雇員”相匹配。
在上述語義學(xué)中,可以僅通過使用一個或多個任一類型的通配符來定義主題的集合。在沒有通配符的情況下,不同的主題是特定的并且是不重疊的,從而使得,使用上面的例子,主題“雇員”不包括主題“雇員/雇用”并且僅含有具有關(guān)于“雇員”的單個頂級的項目。類似地,第二級主題“雇員/雇用”區(qū)別于第三級主題“雇員/雇用/開發(fā)”。主題不重疊并且因此不互為子集或超集。
在主題定義中使用通配符限于訂閱者。發(fā)布者只可以發(fā)布關(guān)于離散主題的信息(“發(fā)布”),該離散主題必須在還含有發(fā)布本身的發(fā)布命令中向代理標(biāo)識。相反,訂閱者可以使用借助于通配符而定義的主題集向代理發(fā)送訂閱請求。如此后所用的,術(shù)語“主題集”將指的是離散主題和其它主題集的任何混合的超集。
訂閱者可用的另一可選的部件是篩選器。篩選器是也可以包含通配符的表達(dá)式,其應(yīng)用于發(fā)布消息的內(nèi)容(相對于主題定義)以確定該內(nèi)容是否與訂閱相匹配。當(dāng)利用代理注冊訂閱的時候,除了指定主題和目的地以外,還可以指定篩選器以根據(jù)其內(nèi)容進(jìn)一步細(xì)化發(fā)布的選擇。通過在主題域中單獨指定#(等效于“所有主題”),甚至有可能僅使用篩選器來選擇發(fā)布。然而,由于所有消息均到達(dá)代理,這也許會導(dǎo)致過量的網(wǎng)絡(luò)業(yè)務(wù)。
發(fā)布/訂閱的另一方面是訂閱者必須自行改變它們的訂閱并且因此提供了注銷或“取消訂閱”請求功能。通常,僅在取消訂閱主題與列表中的一個主題一樣的時候允許從訂閱者的訂閱列表中移除主題。這樣使列表保持為完全肯定的感興趣主題的列表,其可以易于與隨后申請的發(fā)布主題進(jìn)行匹配測試。如果取消訂閱請求與針對該客戶所列出的主題不一樣,則忽略它。訂閱列表可能變得相當(dāng)長并且查詢功能(即使提供)需要涉及大量的運算符。出于這些原因,管理列表以確保只訂閱了當(dāng)前感興趣的信息則可能成為問題。
在感興趣主題集是具有許多可能的子主題(例如可以使用通配符、特別是多級通配符來定義)的高級別的感興趣主題集的情形下,這種情況尤其是問題。這是因為試圖取消訂閱小于完整主題集的任何主題都會失敗。由于其可能需要訂閱者重新訂閱大量非標(biāo)準(zhǔn)定義的更低級別的主題,這種適應(yīng)性的缺乏是對有效地并且有目的地使用發(fā)布/訂閱技術(shù)的阻礙。盡管篩選器的使用允許訂閱者進(jìn)一步地限制接收的消息,然而這只有通過將結(jié)構(gòu)化查詢應(yīng)用于實際的消息內(nèi)容(涉及額外的計算)才能實現(xiàn)。在附加的查詢過程中再次需要涉及大量的運算符。此外,正如已經(jīng)指出的,通配符的廣泛使用以及對篩選器的依賴仍然可能導(dǎo)致過量的網(wǎng)絡(luò)業(yè)務(wù)。
發(fā)布/訂閱通信已得到很好的證實適合面向消息的中間件產(chǎn)品以及在其中訂閱匹配器部件確定應(yīng)當(dāng)將何種發(fā)布消息傳遞給特定的訂閱者的消息傳遞環(huán)境。如上所述,對于每個訂閱者,訂閱匹配器可以是本地的,或者可以是位于發(fā)布者與訂閱者之間的中間節(jié)點或網(wǎng)絡(luò)中的節(jié)點集合的消息代理或代理網(wǎng)絡(luò)。發(fā)布/訂閱解決方案還為Web服務(wù)(Web Service)通知實現(xiàn)了增加的接收。
本發(fā)明的發(fā)明人已經(jīng)認(rèn)識到,在訂閱/取消訂閱階段,能夠有效地排除一部分概括定義的主題集而不移除概括定義本身是值得期望的。除了概括主題集定義這個特別的問題以外,任意取消訂閱和真正訂閱附加主題應(yīng)當(dāng)更有效的工作,這也是普遍值得期望的。
發(fā)明內(nèi)容
本發(fā)明的第一方面提供了一種在發(fā)布/訂閱系統(tǒng)中用于管理訂閱主題和主題集的方法,在所述發(fā)布/訂閱系統(tǒng)中,訂閱指示訂閱者感興趣的信息主題并且用于標(biāo)識應(yīng)當(dāng)傳遞給訂閱者的發(fā)布信息。所述方法包括響應(yīng)于標(biāo)識第一主題或主題集的訂閱者的訂閱請求,將第一主題或主題集的標(biāo)識符存儲為肯定訂閱;響應(yīng)于針對訂閱者的取消訂閱請求,所述取消訂閱請求標(biāo)識構(gòu)成肯定訂閱的已標(biāo)識主題或主題集的部分重疊的第二主題或主題集,將第二主題或主題集的標(biāo)識符存儲為否定訂閱;以及將接收的發(fā)布的主題與存儲的肯定和否定訂閱二者的主題和主題集的標(biāo)識符進(jìn)行比較,從而確定應(yīng)當(dāng)將何種發(fā)布傳遞給訂閱者。
在一個實施例中,比較步驟確定存儲的肯定和否定訂閱的先后順序,從而使得較近存儲的標(biāo)識符優(yōu)先于次近存儲的標(biāo)識符。第二主題集可以是完全包含于第一主題集的子集、或者超集、或者可以是部分重疊的主題集。在一個實施例中,如果第二主題或主題集是第一主題或主題集的超集、子集和部分重疊的集合中的任何一個,則將第二主題或主題集的標(biāo)識符存儲為否定訂閱;并且如果第二主題或主題集對于第一主題或主題集完全匹配,則刪除第一和第二主題或主題集的標(biāo)識符。
在一個實施例中,比較步驟以存儲主題和主題集定義的順序的逆序?qū)l(fā)布與存儲的主題和主題集定義進(jìn)行比較。對于這樣的發(fā)布信息,即最后存儲的主題或主題集定義對應(yīng)于取消訂閱請求,將其標(biāo)識為不傳遞給訂閱者的信息,而對于這樣的發(fā)布信息,即最后存儲的主題或主題集定義對應(yīng)于訂閱請求,則將其標(biāo)識為傳遞給訂閱者的信息。
本發(fā)明的一種實現(xiàn)提供了一種在發(fā)布/訂閱系統(tǒng)中代理發(fā)布信息和訂閱者請求的方法,所述系統(tǒng)包括多個訂閱者,每個訂閱者能夠請求訂閱一個或多個它希望接收關(guān)于其信息的主題和主題集,并且能夠取消訂閱它不希望接收關(guān)于其信息的主題和主題集;多個發(fā)布者,用于提供關(guān)于主題范圍的信息;以及代理,用于將來自發(fā)布者的信息依照與各個訂閱者關(guān)聯(lián)的主題和主題集的訂閱列表分發(fā)給訂閱者。所述方法包括以下步驟從每個訂閱者的訂閱和取消訂閱請求生成包括請求的主題和主題集定義的訂閱列表并且存儲該列表;將來自每個發(fā)布者的信息項目與每個訂閱者的訂閱列表中的主題和主題集定義進(jìn)行匹配;以及將來自每個發(fā)布者的匹配的信息項目發(fā)布給適當(dāng)?shù)挠嗛喺?。如果訂閱列表中的請求主題和主題集定義對應(yīng)于訂閱請求,則將它們存儲為帶肯定標(biāo)記的主題項,并且如果它們對應(yīng)于取消訂閱請求,則將它們存儲為帶否定標(biāo)記的項,并且匹配步驟從最近添加的主題項開始,以逆序?qū)碜悦總€發(fā)布者的信息項目與列表中的主題項進(jìn)行比較。不發(fā)布與否定主題項匹配的項目并且僅發(fā)布與肯定主題項匹配的項目。
本發(fā)明還提供了一種包括指令的計算機(jī)程序,當(dāng)形成發(fā)布/訂閱系統(tǒng)的一部分的計算機(jī)執(zhí)行所述計算機(jī)程序的時候,該程序使得所述計算機(jī)實現(xiàn)如上所述的管理訂閱或代理發(fā)布信息和訂閱者請求的方法。
從另一方面,本發(fā)明還提供了一種在發(fā)布/訂閱系統(tǒng)中用于代理發(fā)布的信息和訂閱者請求的消息代理,該系統(tǒng)包括多個訂閱者,所述多個訂閱者每個都能夠請求訂閱一個或多個它希望接收關(guān)于其信息的主題和主題集,并且能夠取消訂閱它不希望接收關(guān)于其信息的主題和主題集,以及多個用于提供關(guān)于主題范圍的信息的發(fā)布者。所述消息代理包括
(a)用于執(zhí)行訂閱管理步驟的裝置,所述步驟包括(i)響應(yīng)于標(biāo)識第一主題或主題集的訂閱者的訂閱請求,將第一主題或主題集的標(biāo)識符存儲為肯定訂閱;以及(ii)響應(yīng)于針對訂閱者的取消訂閱請求,所述取消訂閱請求標(biāo)識構(gòu)成肯定訂閱的已標(biāo)識主題或主題集的部分重疊的第二主題或主題集,將第二主題或主題集的標(biāo)識符存儲為否定訂閱;以及(b)用于比較的裝置,所述用于比較的裝置將接收的發(fā)布的主題與存儲的肯定和否定訂閱二者的主題和主題集的標(biāo)識符進(jìn)行比較,從而確定應(yīng)當(dāng)將何種發(fā)布傳遞給訂閱者;以及(c)用于傳遞的裝置,響應(yīng)于用于比較的裝置確定應(yīng)當(dāng)將發(fā)布傳遞給訂閱者,所述用于傳遞的裝置將發(fā)布傳遞給訂閱者。
一種代理實現(xiàn)包括用于從每個訂閱者的訂閱和取消訂閱請求生成包括請求的主題和主題集定義的訂閱列表并且存儲該列表的裝置;用于將來自每個發(fā)布者的信息項目與每個訂閱者的訂閱列表中的主題和主題集定義進(jìn)行匹配的裝置;以及用于將來自每個發(fā)布者的匹配的信息項目依照與各個訂閱者關(guān)聯(lián)的主題和主題集的訂閱列表分發(fā)給適當(dāng)?shù)挠嗛喺叩难b置。如果訂閱列表中的請求主題和主題集定義對應(yīng)于訂閱請求,則可以將它們存儲為帶肯定標(biāo)記的主題項,并且如果它們對應(yīng)于取消訂閱請求,則可以將它們存儲為帶否定標(biāo)記的項。從最近添加的主題項開始,用于匹配的裝置以逆序?qū)碜悦總€發(fā)布者的信息項目與所述列表中的主題項進(jìn)行比較,由此不發(fā)布與否定主題項匹配的項目并且僅發(fā)布與肯定主題項匹配的項目。
在訂閱列表中允許訂閱和取消訂閱主題或主題集定義二者的共存(例如肯定和否定項),連同以逆序評估用于匹配的列表,使得比訂閱主題集更窄范圍的取消訂閱主題和主題集能夠被接納而不會有問題。這在一個或多個訂閱主題集是使用多級通配符的高級別主題的情況下有特別的價值,而在使用單級通配符的時候也是有益的。沒有必要重建更為冗長的訂閱列表?;诒景l(fā)明的解決方案可以提供較之公知的基于主題的發(fā)布/訂閱解決方案的效率改進(jìn)。
應(yīng)當(dāng)認(rèn)識到,什么是肯定的以及什么是否定的是常規(guī)的問題,并且即使顛倒了代數(shù)符號或者除了“+”或“-”標(biāo)記之外使用一些微分算子來區(qū)分列表中的訂閱和取消訂閱主題項定義,本發(fā)明仍會起作用。
優(yōu)選地,生成步驟包括這樣的步驟,即響應(yīng)于來自訂閱者的取消訂閱主題或主題集的請求,確定當(dāng)前訂閱列表中的任何主題項是否包含于最新的取消訂閱主題集中,并且如果這樣,則將該主題項從所述列表中移除。生成步驟優(yōu)選地還包括另一步驟,即如果任何其它的肯定主題項重疊于取消訂閱主題或主題集,則將對應(yīng)于取消訂閱主題或主題集的否定主題項添加到所述列表的末尾。生成步驟優(yōu)選地還包括另一步驟,即從所述列表的起始移除任何的否定主題項。
這樣避免了列表中的冗余并且為匹配步驟對它進(jìn)行了優(yōu)化。
借助于生成步驟,可以將該技術(shù)有利地擴(kuò)展到新的訂閱,所述生成步驟包括這樣的步驟,即響應(yīng)于來自訂閱者的訂閱主題或主題集的請求,確定當(dāng)前訂閱列表中的任何主題項是否包含于最新的訂閱主題集中,并且如果這樣,則將該主題項從所述列表中移除;以及另一步驟,即如果對應(yīng)于最新的訂閱主題或主題集的肯定主題項不包含于所述列表中的任何其它的肯定主題項中或者如果對應(yīng)于最新的訂閱主題或主題集的肯定主題項重疊于所述列表中的任何否定主題項,則將它添加到所述列表末端。還可以跟隨附加的步驟,即為了優(yōu)化而將當(dāng)前位于訂閱列表起始的任何否定主題項移除。
本發(fā)明在使用多級主題定義以及通過使用選定級別中的通配符定義主題集的情況下尤其適用。多級和單級通配符都可以使用。盡管在優(yōu)選的語法中,通配符對于定義主題集是必要的,然而在其它語法中,更高級別的主題名稱可以包括以相同的更高級別的名稱開始的更低級別的主題。
確定一個主題集被另一個所包含相對簡單并且只需要一級一級地檢驗級別名稱是否與更寬的集合的通配符級別一樣或落入了更寬的集合的通配符級別。
這樣優(yōu)選地實現(xiàn)了重疊的確定,即通過從關(guān)于其它集合的第一主題集構(gòu)造例子主題,并且然后將所述例子與其它集合進(jìn)行比較以確定它是否是成員并且因此重疊于第一集合。
應(yīng)當(dāng)指出,發(fā)布者和訂閱者還可以與代理網(wǎng)絡(luò)進(jìn)行交互,所述代理網(wǎng)絡(luò)中的每一個向該網(wǎng)絡(luò)內(nèi)的其它代理傳播訂閱并且轉(zhuǎn)寄發(fā)布。因而,當(dāng)文中使用術(shù)語“代理”的時候,應(yīng)當(dāng)將它視為包括單個代理或者作為提供代理服務(wù)的網(wǎng)絡(luò)而一起工作的多個代理。
還應(yīng)當(dāng)指出,發(fā)布/訂閱不僅在純粹的消息傳遞系統(tǒng)中使用,而且舉例來說,還可以在事務(wù)處理系統(tǒng)的事件處理部件中使用。然而,在目前的情況下最感興趣的是系統(tǒng)的消息傳遞類型,在該系統(tǒng)中訂閱者是由人類用戶所操作的客戶計算機(jī)或終端。
下面根據(jù)如附圖中所描述的優(yōu)選實施例,僅通過例子對本發(fā)明進(jìn)行更為詳細(xì)地描述,其中圖1是包括諸如可以實現(xiàn)本發(fā)明的代理的常規(guī)的發(fā)布/訂閱系統(tǒng)的概略圖;圖2示出了出自本發(fā)明的方法的實現(xiàn)中所使用的函數(shù)topiclncludes(x,y)的結(jié)果的例子;圖3示出了出自本發(fā)明的方法的實現(xiàn)中所使用的函數(shù)topicOverlaps(x,y)的結(jié)果的例子;圖4是示出了以根據(jù)本發(fā)明的代理方法生成和管理訂閱列表的流程圖;圖5至圖7示出了操作圖4的方法的例子;以及圖8是示出了根據(jù)圖4的方法所生成的訂閱列表使用圖1的系統(tǒng)中的主題處理發(fā)布的流程圖。
具體實施例方式
在圖1中示出了包括消息代理10的發(fā)布/訂閱系統(tǒng)的框圖。該說明對常規(guī)消息代理和根據(jù)本發(fā)明的消息代理來說都是通用的并且可適用的。下面的討論中將假定為后者。
還描述了多個發(fā)布者12,所述發(fā)布者是諸如基于計算機(jī)的商用數(shù)據(jù)庫的數(shù)據(jù)源。這些向代理10提供通常稱為“發(fā)布”的信息項目。發(fā)布不僅包括信息內(nèi)容而且包括在代理可識別的語法中的發(fā)布主題的名稱。發(fā)布者隨機(jī)地向代理有效地提供發(fā)布。
如以上所討論的,通過使用分隔符可以細(xì)化主題定義并且使其更為明確,從而產(chǎn)生可以視為主題樹的節(jié)點的多級主題。
還連接到代理10的是多個訂閱者14,所述訂閱者是諸如終端或因特網(wǎng)連接的個人計算機(jī)的客戶計算機(jī),通過所述客戶計算機(jī),人類操作者提交將由關(guān)于代理所選擇的主題的發(fā)布來滿足的請求。盡管有一個重要的區(qū)別,訂閱者還是使用與發(fā)布者相同的語法來定義感興趣的主題。區(qū)別在于訂閱者可以在它們的訂閱請求中包含通配符。在本例中,假定如上所述的多級井號通配符“#”和單級通配符“+”可用。這些通配符的使用使得訂閱者能夠請求關(guān)于主題集的而不僅僅是關(guān)于離散主題的信息。當(dāng)然,為了同時在多個離散主題或其它主題集中注冊感興趣,訂閱者可以進(jìn)行超過一個的訂閱請求。
訂閱者14經(jīng)由邏輯連接15向代理10提供它們感興趣的主題或主題集名稱,并且代理中的列表生成軟件16將來自每個訂閱者的請求匯編成存儲在該代理中的訂閱列表17。匹配軟件18將來自發(fā)布者12的每個新的發(fā)布消息與為每個訂閱者存儲的訂閱列表17進(jìn)行比較,并且如果它們匹配,則使分發(fā)軟件19經(jīng)由邏輯連接20向那些已請求該發(fā)布的主題的訂閱者分發(fā)匹配的發(fā)布。
對于與訂閱列表中的訂閱請求匹配的發(fā)布,它必須與離散的訂閱主題一樣或者包含于訂閱列表中如舉例來說通過使用通配符定義的主題集中。下面將給出這種例子。
應(yīng)當(dāng)認(rèn)識到,圖1示出了簡化的系統(tǒng),為了易于說明,假定與訂閱者以點對點通信的單代理,但該系統(tǒng)同樣可以是網(wǎng)絡(luò)中代理的集結(jié),例如通過多播分發(fā)發(fā)布而不是簡單的廣播。
如以上已經(jīng)說明的,伴隨常規(guī)系統(tǒng)的一個問題一直是用于訂閱者取消訂閱(注銷)現(xiàn)有訂閱的功能的相對有限。只有取消訂閱請求確切地指定主題或命名的主題集,才可以從訂閱列表移除它們。否則,忽略該請求。到目前為止還不可能部分地取消訂閱訂閱列表中的離散訂閱。
現(xiàn)在將描述一種允許在圖1的系統(tǒng)中部分取消訂閱的方法。然而,為了這樣做,首先有必要描述兩個函數(shù)在本發(fā)明的方法中所使用的topiclncludes(x,y)和topicOverlaps(x,y)。
根據(jù)y是否等于x或是x的子集,函數(shù)topiclncludes(x,y)簡單產(chǎn)生真或假的輸出。圖2示出了一些主要是主題集的例子,主題或主題集名稱位于用維恩圖圓或橢圓表示的它們的中心。將y主題和主題集以陰影示出從而將它們與x主題集區(qū)分開來。盡管兩個離散的主題可以相等,然而在以上所描述的語法中,對于“x”來說,如果它包含通配符,則它只可能超集。因此,在例子(i)到(v)中,x主題是集合“a/#”,即所有以“a”為第一級的主題。該集合顯然包含例子(i)中的子集“a/+”并且包含(實際上等于)例子(ii)中的它本身“a/#”,因此所述二者均為“真”。然而集合“a/#”不包含例子(iii)中沒有交集的離散主題“b”或者例子(iv)中重疊的但不包含的集合“#/a”。它也不包含所有主題的集合“#”,所述集合“#”是超集而不是子集。
函數(shù)topicOverlaps(x,y)確定x和y的交集是否非空。圖3中示出了一些例子,其中,主題和集合名稱再次位于它們各自的維恩圖圓或橢圓的中心。在所示的例子中,假定x主題始終是主題集“a/+”。在例子(i)中,可以看出這與集合“+/a”重疊,重疊的主題“a/a”由陰影區(qū)域表示,因此函數(shù)的輸出是“真”。在例子(ii)中,離散主題“a/b”完全包含于集合“a/+”中,因此輸出再次為“真”。在例子(iii)中,集合“a/+”本身完全包含于超集“a/#”中,因此這個輸出也是真。只有在集合“a/+”和“b/#”沒有交集的例子(iv)中輸出為假??梢宰⒁獾剑鄬τ诎缘牟糠种丿B只有在x和y都是主題集,并且都不是離散主題的時候才會發(fā)生。
為了評估函數(shù)topicOverlaps(x,y),對于任意兩個特定的主題集,在兩個主題模式之外構(gòu)造有代表性的例子。如果該例子與兩個主題集均匹配,那么它們重疊。應(yīng)用函數(shù)topiclncludes(x,y)以確定匹配。用于構(gòu)造所述例子的算法如下1)針對參數(shù)主題1和主題2,為主題2構(gòu)造一般的例子;2)針對主題2中的每個級別如果當(dāng)前級別是“+”如果我們在主題1中有相應(yīng)的級別并且它不是通配符(+或#)則將主題1級別添加到所述例子,否則使用任意匹配串(“xxx”);否則如果當(dāng)前級別不是“#”則將當(dāng)前主題2級別添加到所述例子;如果當(dāng)前主題列表中的第一級別是“+”或者與當(dāng)前主題2級別相同,則將主題列表中的第一級別移除;3)使用既定的匹配程序topiclncludes(x,y)將生成的例子與主題1進(jìn)行比較,從而指出主題1與主題2是否重疊如果所述例子與主題1匹配,則返回輸出“真”;否則返回輸出“假”。
現(xiàn)在轉(zhuǎn)向根據(jù)本發(fā)明的方法的實現(xiàn),圖4和圖8的流程圖中對其進(jìn)行了描述,而圖5、圖6和圖7中示出了該結(jié)果的例子。盡管本發(fā)明的焦點和主要好處在于部分取消訂閱功能,然而本發(fā)明在訂閱處理上也提供了一些改進(jìn)。在兩種情況下,本發(fā)明均減少了訂閱列表中的冗余,從而改進(jìn)了處理兩種請求類型的效率。出于這個原因,圖4中對訂閱和取消訂閱操作均進(jìn)行了描述。
處于本發(fā)明核心的是一種新型的訂閱列表的思想,所述訂閱列表可以含有對應(yīng)于主題訂閱的帶肯定標(biāo)記的項,以及對應(yīng)于取消訂閱的否定項。隨著描述的進(jìn)行,這樣的使用及其意義會變得更為明顯,但在理解圖4的時候只需要承認(rèn)兩種類型均可以存在于訂閱列表中。
在圖4的方法中,起始點是生成軟件16(圖1)對來自客戶的請求的接收。步驟40中進(jìn)行關(guān)于這是訂閱還是取消訂閱主題或主題集的請求的確定。如果該請求是訂閱,則在步驟41中對它進(jìn)行確定,即如果該主題是集合,那么它是否包含當(dāng)前訂閱中任何現(xiàn)有的主題項(注意主題項既可以是肯定的也可以是否定的)。如果是,則在步驟42中將現(xiàn)有的主題項從列表中移除。如果該主題不是集合或者是不包含任何現(xiàn)有主題項的集合,則接下來在步驟43中確定將要被訂閱(被添加)的主題或主題集是否其自身包含于任何的肯定主題項中。如果不是,在步驟44中將新的主題或集合作為肯定項添加到訂閱列表的末尾。如果在步驟43中確定主題或主題集包含于任何的肯定主題項中,但在步驟45中又確定其重疊于任何的否定主題項(借助于函數(shù)topicOverlaps(x,y)),那么還是將它作為肯定項添加到列表末尾。以這種方式,即當(dāng)添加新訂閱的時候,移除訂閱列表中的冗余,導(dǎo)致了更有效的處理。
總的來說,將新主題或集合添加到當(dāng)前訂閱的訂閱動作的結(jié)果是首先,移除當(dāng)前訂閱中包含于將要添加的主題集中的任何主題項,并且其次,如果將要添加的主題集沒有包含于任何的肯定主題項中,或者,如果它包含于任何的肯定主題項中卻重疊于任何的否定主題項,則將其添加到主題列表的末尾。
現(xiàn)在轉(zhuǎn)向圖4的右手邊,如果客戶請求是取消訂閱主題或主題集,如步驟40中所確定的,在步驟46中首先確定該主題或主題集是否包含當(dāng)前訂閱列表中任何現(xiàn)有的項(肯定的或否定的)。如果答案是“是”,那么在步驟47中移除包含的主題項。步驟46和步驟47在作用上與步驟41和步驟42相同并且可以在實際的程序代碼中對其進(jìn)行結(jié)合,但為了易于說明這里將其分別示出。
然而,如果檢驗46結(jié)果是否定的,即取消訂閱是針對離散主題或針對不包含任何現(xiàn)有主題項的主題集,則在步驟48中進(jìn)行關(guān)于將要移除的主題,如果是集合的話,是否重疊于訂閱列表中剩余的任何肯定主題項的確定。如果不是,則程序結(jié)束而不會有進(jìn)一步的動作,但如果是的話,則在步驟49中將新的取消訂閱主題集作為否定項添加到列表末尾。如果將要移除的主題是離散主題,則它不能重疊于任何剩余的肯定主題項并且在步驟48中的確定再次是否定的。這不會產(chǎn)生動作,由于在第一的位置添加有關(guān)非任何肯定訂閱的主題名的離散主題取消訂閱的否定項是沒用的,因此這是正確的結(jié)果。
總的來說,將主題或主題集從當(dāng)前訂閱移除的取消訂閱動作的結(jié)果是首先,移除包含于將要移除的主題集中的每一個主題項,并且其次,如果任何剩余的肯定主題項重疊于將要移除的主題或主題集,則將新的主題或主題集添加到主題列表的末尾。
圖5、圖6和圖7示出了由生成軟件16根據(jù)圖4的方法所實現(xiàn)的各種訂閱和取消訂閱操作的累積結(jié)果的三個例子。中間列出了訂閱和取消訂閱動作,而左邊以維恩圖示出了主題和主題集并且在右邊示出了存儲表達(dá)式的結(jié)果(訂閱列表)。
在圖5中,在第(i)行中,進(jìn)行了對主題集a/#的初始訂閱。在第(ii)行中,訂閱了集合#/a并將其添加到列表。在第(iii)行中進(jìn)行了對主題a/b的訂閱,但由于這包含于a/#中,因此將其舍棄并且不添加到列表。最后,在第(iv)行中,進(jìn)行了對#(所有主題)的訂閱。這導(dǎo)致所有先前列出的項都被舍棄。因此,任何發(fā)布都會立即被與所有的主題通配符進(jìn)行匹配并且被分發(fā)給訂閱者。
在圖6中,在第(i)行中初始訂閱的是集合a/+,其成為列表中的第一主題。在第(ii)行中接下來的動作是取消訂閱是a/+的子集的主題a/b。將“-a/b”項添加到列表。在第(iii)行中取消訂閱主題c。由于它不包含于或者重疊于當(dāng)前訂閱,現(xiàn)有訂閱無論如何也不會與主題“c”的發(fā)布匹配,因此將其舍棄。
最后,在第(iv)行,取消訂閱集合a/#。由于這包含所有當(dāng)前列出的項,因此訂閱者有效地取消訂閱了所有項目并且“a/+”項和“-a/b”項被從列表移除而使其為空。在這種情況下,根本沒有發(fā)布會被分發(fā)給該訂閱列表的訂閱者。
在圖7的最后的例子中,列出的第一訂閱還是集合“a/#”,如第(i)行中所示。在第(ii)行中,取消訂閱主題集“a/b/#”。由于這完全包含于“a/#”中,因此將其作為否定項添加到列表。在第(iii)行中,進(jìn)行了對主題“a/c”的訂閱,但由于它完全處于已經(jīng)訂閱的集合“a/#”之中并且不重疊于取消訂閱集合“a/b/#”,因此可以將其舍棄。這是因為,如果發(fā)布主題“a/c”,其會與列出的主題集“a/#”匹配并且無論如何會被分發(fā)給訂閱者。最后,在第(iv)行中,進(jìn)行了對集合“a/+/c”的訂閱。盡管這完全處于訂閱集合“a/#”之中,然而由于它重疊于取消訂閱集合“a/b/#”而不可以被忽略。因此將其作為肯定項添加到列表的末尾,正如現(xiàn)在將會說明的,其越過了取消訂閱。
圖8描述了由匹配軟件18在代理10中實現(xiàn)的方法。起始點是代理在步驟50中對來自發(fā)布者之一的發(fā)布的接收,所述發(fā)布含有根據(jù)既定的語法的主題的定義以及實際的信息。發(fā)布者具有向每一個訂閱者(客戶)發(fā)布的權(quán)限,在步驟51中為所述每一個訂閱者(客戶)提取相關(guān)的訂閱列表,并且取得訂閱列表中最后的(最近錄入的)主題項。
在步驟52中,確定接收的主題是否包含于從列表取得的最后的主題項中。如果是,則在步驟53中確定取得的主題項是否是肯定的,即它代表請求訂閱。如果是,則存在匹配并且在步驟54中向訂閱者發(fā)布主題發(fā)布而不必再費周折?,F(xiàn)在可以結(jié)束匹配程序。如果取得的主題項是否定的,如步驟53中所確定的,則已經(jīng)取消訂閱了發(fā)布的主題并且結(jié)束程序而不向訂閱者發(fā)布。
在步驟52中,如果確定接收的主題沒有包含于訂閱列表中的最后的主題項中,則有必要繼續(xù)與列表中的其它項(如果有的話)的比較。如果沒有其它項,如步驟55中所確定的,則程序簡單結(jié)束而不發(fā)生任何發(fā)布。如果列表中存在更多的項,則在步驟56中取得倒數(shù)第二項并且在步驟57中將其與接收的主題進(jìn)行比較。如果接收的主題沒有包含于最近取得的項中,那么程序返回到步驟55,其結(jié)果是提取項并且以逆序?qū)ζ溥M(jìn)行比較。然而,如果最近的項包含接收的主題,則實現(xiàn)步驟53和步驟54以確定接收的主題是否與肯定項匹配并且應(yīng)當(dāng)因此而被發(fā)布或不發(fā)布。
可以看到,通過以逆序檢查與肯定和否定主題項二者的匹配,與否定項的匹配有效地防止了發(fā)布并且越過或者繞過了與較早添加到訂閱列表的更寬的肯定項可能的匹配的結(jié)果。列表中最近添加的項具有最高的優(yōu)先級并且最先起作用以確定是發(fā)布還是不發(fā)布接收的主題。圖7中可以看到這樣的例子,其中最后的訂閱“+a/+/c”優(yōu)先于取消訂閱“-a/b/#”,所述取消訂閱“-a/b/#”本身優(yōu)先于訂閱“a/#”(隱含正號)。
因此,圖1、圖4和圖8的方法和系統(tǒng)允許從先前的訂閱主題集部分取消訂閱,并且當(dāng)新的訂閱和取消訂閱二者均被請求的時候進(jìn)一步優(yōu)化訂閱列表。
權(quán)利要求
1.一種用于在發(fā)布/訂閱系統(tǒng)中管理訂閱主題和主題集的方法,其中訂閱指示訂閱者感興趣的信息主題并且用于標(biāo)識應(yīng)當(dāng)傳遞給訂閱者的發(fā)布信息,所述方法包括響應(yīng)于標(biāo)識第一主題或主題集的訂閱者的訂閱請求,將所述第一主題或主題集的標(biāo)識符存儲為肯定訂閱;響應(yīng)于針對訂閱者的取消訂閱請求,所述取消訂閱請求標(biāo)識構(gòu)成所述肯定訂閱的已標(biāo)識主題或主題集的部分重疊的第二主題或主題集,將所述第二主題或主題集的標(biāo)識符存儲為否定訂閱;以及將接收的發(fā)布的主題與存儲的所述肯定和否定訂閱二者的主題或主題集的標(biāo)識符進(jìn)行比較,從而確定應(yīng)當(dāng)將何種發(fā)布傳遞給所述訂閱者。
2.根據(jù)權(quán)利要求1的方法,其中,如果所述第二主題或主題集是所述第一主題或主題集的超集、子集和部分重疊的集合中的任何一個,則將所述第二主題或主題集的標(biāo)識符存儲為否定訂閱;并且其中,如果所述第二主題或主題集對于所述第一主題或主題集完全匹配,則刪除所述第一和第二主題或主題集的標(biāo)識符。
3.根據(jù)權(quán)利要求1或2的方法,其中,所述比較步驟確定所述存儲的肯定和否定訂閱的先后順序,從而使得較近存儲的標(biāo)識符優(yōu)先于次近存儲的標(biāo)識符。
4.根據(jù)權(quán)利要求3的方法,其中,以接收所述訂閱和取消訂閱請求的次序存儲所述主題和主題集的標(biāo)識符,并且所述比較步驟以存儲所述主題和主題集的標(biāo)識符的順序的逆序?qū)邮盏陌l(fā)布的主題與存儲的主題和主題集的標(biāo)識符進(jìn)行比較,并且忽略標(biāo)識于由較近存儲的否定訂閱所取消的肯定訂閱之內(nèi)的任何主題。
5.根據(jù)任何前述權(quán)利要求的方法,其進(jìn)一步包括以下步驟響應(yīng)于針對所述訂閱者的取消訂閱請求,確定是否任何肯定訂閱的主題或主題集包含于最新的取消訂閱主題集中,并且如果是的話,將相應(yīng)的主題標(biāo)識符從存儲的主題標(biāo)識符移除;以及其中,只有在所述第二主題集構(gòu)成肯定訂閱的已標(biāo)識主題集的子集的時候才執(zhí)行所述將所述第二主題集的標(biāo)識符存儲為否定訂閱的步驟。
6.根據(jù)任何前述權(quán)利要求的方法,其進(jìn)一步包括以下步驟響應(yīng)于來自訂閱者的訂閱主題集的請求,確定是否任何存儲的當(dāng)前肯定訂閱的主題標(biāo)識符包含于最新的訂閱主題集中,并且如果是的話,以所述主題集標(biāo)識符替換所述存儲的主題標(biāo)識符。
7.根據(jù)任何前述權(quán)利要求的方法,其進(jìn)一步包括以下步驟響應(yīng)于來自訂閱者的訂閱主題或主題集的請求,如果存儲的肯定訂閱中還沒有標(biāo)識所述主題或主題集,或者如果所述請求的主題或主題集重疊于存儲的否定訂閱的主題或主題集,則將所述主題或主題集的標(biāo)識符添加到所述存儲的肯定訂閱。
8.根據(jù)任何前述權(quán)利要求的方法,其中,主題標(biāo)識符是多級的并且通過使用選擇的級別中的通配符來定義主題集。
9.根據(jù)權(quán)利要求8的方法,其中,存儲的主題集的標(biāo)識符既可以包含單級又可以包含多級通配符,確定存儲的訂閱的主題集與新的主題集之間的重疊包括以下步驟從關(guān)于其它集合的第一主題集構(gòu)造例子主題,并且然后將所述例子與所述其它集合進(jìn)行比較以確定其是否是成員并且因此重疊于所述第一集合。
10.根據(jù)前述權(quán)利要求中任何一項的方法,其中,所述發(fā)布信息包括Web服務(wù)通知。
11.一種用于在發(fā)布/訂閱系統(tǒng)中代理發(fā)布信息和訂閱者請求的消息代理,所述系統(tǒng)包括多個訂閱者,所述訂閱者每個都能夠請求訂閱一個或多個它希望接收關(guān)于其信息的主題和主題集,并且能夠取消訂閱它不希望接收關(guān)于其信息的主題和主題集,以及用于提供關(guān)于主題范圍的信息的多個發(fā)布者,所述消息代理包括(a)用于執(zhí)行訂閱管理步驟的裝置,所述步驟包括(i)響應(yīng)于標(biāo)識第一主題或主題集的訂閱者的訂閱請求,將所述第一主題或主題集的標(biāo)識符存儲為肯定訂閱;以及(ii)響應(yīng)于針對所述訂閱者的取消訂閱請求,所述取消訂閱請求標(biāo)識構(gòu)成所述肯定訂閱的已標(biāo)識主題或主題集的部分重疊的第二主題或主題集,將所述第二主題或主題集的標(biāo)識符存儲為否定訂閱;以及(b)用于比較的裝置,所述用于比較的裝置將接收的發(fā)布的主題與存儲的所述肯定和否定訂閱二者的主題和主題集的標(biāo)識符進(jìn)行比較,從而確定應(yīng)當(dāng)將何種發(fā)布傳遞給所述訂閱者;以及(c)用于傳遞的裝置,響應(yīng)于用于比較的裝置確定應(yīng)當(dāng)將發(fā)布傳遞給所述訂閱者,所述用于傳遞的裝置將發(fā)布傳遞給訂閱者。
全文摘要
本發(fā)明描述的是一種用于管理訂閱的方法、一種發(fā)布/訂閱系統(tǒng)以及一種消息代理。在所述發(fā)布/訂閱系統(tǒng)中,多個發(fā)布者提供關(guān)于主題范圍的信息并且多個訂閱者訂閱一個或多個它們希望接收關(guān)于其信息的主題和主題集。訂閱者還可以取消訂閱它們不希望接收關(guān)于其信息的主題和主題集。諸如消息代理的訂閱匹配器用于從每個訂閱者的訂閱和取消訂閱請求二者生成主題和主題集標(biāo)識符的訂閱列表。所述訂閱匹配器然后將來自每個發(fā)布者的信息項目與每個訂閱者的訂閱列表中的主題和主題集定義進(jìn)行匹配,并且依照訂閱列表分發(fā)匹配的信息項目。所述訂閱匹配器基于主題和主題集的存儲順序來確定任何重疊的訂閱和取消訂閱主題和主題集之間的先后順序。
文檔編號G06Q10/00GK1953426SQ20061013553
公開日2007年4月25日 申請日期2006年10月18日 優(yōu)先權(quán)日2005年10月19日
發(fā)明者I·G·克拉格斯 申請人:國際商業(yè)機(jī)器公司