專利名稱:用于管理訂閱匹配的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及l(fā)t據(jù)處理網(wǎng)絡(luò)內(nèi)的通信,更具體地涉及實(shí)施發(fā)布/訂閱通信范
例(paradigm)的設(shè)備、方法和計(jì)算才幾程序。
背景技術(shù):
在消息網(wǎng)絡(luò)內(nèi),可將消息經(jīng)由一個(gè)或多個(gè)"消息代理(message broker)" 從一個(gè)數(shù)據(jù)處理系統(tǒng)傳遞到另一個(gè),所述"消息代理"提供路由以及(在許多 情況下)格式化和其它服務(wù)。代理一般位于網(wǎng)絡(luò)內(nèi)的通信集線器處,盡管可 在分布式代理網(wǎng)絡(luò)內(nèi)的各個(gè)點(diǎn)處實(shí)施代理功能。
許多消息代理支持發(fā)布/訂閱通信范例。此涉及發(fā)送者發(fā)送可由一組訂閱 者接收的通信,而一般無需發(fā)布應(yīng)用得知哪些訂閱者感興趣,所述一組訂閱 者已在接收該類型的通信時(shí)注冊了他們的興趣。發(fā)布/訂閱允許訂閱者接收感 興趣的領(lǐng)域(例如,股票價(jià)格、或者諸如新聞速遞或商店降價(jià)之類的事件) 中的最新信息,而不需要向每個(gè)發(fā)布者提前并重復(fù)請求該信息。
典型的發(fā)布/訂閱環(huán)境具有經(jīng)由代理通過網(wǎng)絡(luò)向位于遠(yuǎn)程計(jì)算機(jī)上的潛 在的大量訂閱者應(yīng)用發(fā)送消息的許多發(fā)布者應(yīng)用。訂閱者向代理注冊,并標(biāo) 識他們希望接收的消息類型,將此信息存儲(chǔ)于代理處,在許多發(fā)布/訂閱實(shí)施 中,訂閱者指定代表他們希望接收的消息類型的一個(gè)或多個(gè)主題名稱。當(dāng)發(fā) 布者將他們的消息發(fā)送到代理時(shí),發(fā)布者將主題名稱分配給消息,代理使用 匹配引擎以將所接收的消息的主題與其所存儲(chǔ)的注冊的訂閱者的訂閱信息進(jìn) 行比較。此比較確定應(yīng)將消息送往哪些訂閱者。經(jīng)常分級地指定主題,例如 使用字符串格式"root/topicLevell/topicLevel2,,以使得能夠使用迭代地分步處 理主題層級(hierarchy)的匹配算法來將所接收的消息內(nèi)指定的主題與訂閱進(jìn) 行比較。
另 一 已知的發(fā)布/訂閱環(huán)境將同 一數(shù)據(jù)處理系統(tǒng)上的發(fā)布/訂閱匹配引擎 實(shí)施為訂閱者應(yīng)用。發(fā)布者向此系統(tǒng)發(fā)送發(fā)布物(publication),發(fā)布/訂閱匹 配引擎確定本地訂閱者應(yīng)用對于哪些發(fā)布物感興趣。在本發(fā)明的語境下,術(shù)
語"發(fā)布/訂閱代理"意在包括在發(fā)布者和訂閱者之間的中間網(wǎng)絡(luò)節(jié)點(diǎn)處實(shí)施的 發(fā)布/訂閱匹配引擎,但所述術(shù)語也意在包括在訂閱者的數(shù)據(jù)處理系統(tǒng)上實(shí)施 的發(fā)布/訂閱匹配引擎。
一些發(fā)布/訂閱環(huán)境包括代理本地的訂閱者和距代理較遠(yuǎn)的訂閱者的結(jié)合。
雖然訂閱匹配經(jīng)常涉及檢查消息首部內(nèi)的主題字段,但匹配可附加地或 可替換地涉及檢查其它的消息首部字段,或者檢查消息內(nèi)容以及基于附加信
息過濾消息。例如,實(shí)施Java 消息H務(wù)(Java Message Service, JMS )的消 息代理一般允許基于消息屬性(而不是基于作為消息內(nèi)容或"有效負(fù)荷"的應(yīng) 用數(shù)據(jù))進(jìn)行過濾。消息代理可執(zhí)行諸如在將所接收的消息送往訂閱者之前 對所述消息進(jìn)行格式化或者進(jìn)行其它處理之類的附加功能。(Java以及所有 基于Java的商標(biāo)為Sun微系統(tǒng)公司(Sun Microsystem, Inc.)的商標(biāo)。)
支持發(fā)布/訂閱范例的消息代理產(chǎn)品的商業(yè)可用示例為如在文獻(xiàn)"IBM WebSphere Message Broker Version 6 Release 0 - Introducation" (IBM公司、 2006年7月)以及"IBM WebSphere Message Broker Version 6 Release 0 — Publish/Subscribe"(IBM公司、2006年7月)中所述的IBM公司的WebSphere 消息代理。消息代理可與處理在異類網(wǎng)絡(luò)上提供確定的消息傳遞的復(fù)雜性的 下層的消息傳遞產(chǎn)品相關(guān)聯(lián)。IBM公司的WebSphere MQ消息產(chǎn)品為提供這 樣的消息功能的產(chǎn)品的示例,并且在包括IBM出版物編號第GC34-6590-01 號"WebSphere MQ Clients" ( 2005年6月)的IBM^^司的多個(gè)出版物中有所 描述。(IBM和WebSphere為國際商用才幾器7>司的商標(biāo))。
發(fā)布/訂閱范例為將信息分發(fā)給多個(gè)用戶的有效方式,并對于其中發(fā)布者 和/或訂閱者的集合可隨時(shí)間變化以及發(fā)布者和/或訂閱者的數(shù)量可以是較大 時(shí)的環(huán)境特別有用。雖然一些訂閱是"不持久的"(即,只有當(dāng)訂閱應(yīng)用與代 理連接時(shí)保持活動(dòng)),但是許多訂閱是"持久的",并保持活動(dòng)直至訂閱應(yīng)用明 確退訂為止。當(dāng)"持久的"訂閱者不再希望接收發(fā)布物時(shí),訂閱者可從代理退 訂(或者退訂特定主題或一組主題)。
雖然此訂閱和退訂的能力使得訂閱者控制他們接收哪些發(fā)布物,但是訂 閱者必須發(fā)起每個(gè)訂閱和退訂操作。訂閱者一般需要確認(rèn)答復(fù)。此涉及網(wǎng)絡(luò) 通信開銷,并在代理處的每一個(gè)訂閱和退訂操作的執(zhí)行上通常存在一些等待 時(shí)間(latency)。訂閱和退訂操作越頻繁,越有可能訂閱操作的固有等待時(shí)間將
導(dǎo)致訂閱者錯(cuò)過期望的發(fā)布物。在依靠低帶寬或訂閱者和代理之間的不可靠 的連接的通信環(huán)境中,連接問題可導(dǎo)致在訂閱者開始接收期望的發(fā)布物之前 的明顯延遲。
退訂操作的等待時(shí)間可導(dǎo)致訂閱者不期望的通信和處理開銷,這是因?yàn)?當(dāng)訂閱者希望關(guān)注其它任務(wù)時(shí)、訂閱者可能在低速或昂貴的網(wǎng)絡(luò)鏈路上繼續(xù) 接收不必要的發(fā)布物。在每個(gè)代理可向其它代理訂閱的代理的分布式網(wǎng)絡(luò)的
情況下,存在大量不必要的網(wǎng)絡(luò)業(yè)務(wù)流量(tra伍c)的范圍。在持久的訂閱的情
況下,當(dāng)代理代表未連接的訂閱者對消息進(jìn)行排隊(duì)時(shí),在訂閱者無法連接時(shí) 不必要的消息可能增長。此可能使用過多的代理的存儲(chǔ)空間,當(dāng)訂閱者下次 連接時(shí),所有的不必要的消息將被下載到訂閱者。對于依靠昂貴或不可靠的 網(wǎng)絡(luò)鏈路并可能不能連接較長的時(shí)間段的移動(dòng)訂閱者,不必要的消息的量可 能是較大的。
發(fā)明內(nèi)容
本發(fā)明提供用于在發(fā)布/訂閱通信環(huán)境中對于訂閱匹配進(jìn)行基于事件的
控制的方法、裝置以及計(jì)算機(jī)程序。激活(activation)和/或去激活(deactivation) 事件與訂閱相關(guān)聯(lián),并用于控制何時(shí)訂閱活動(dòng)。此語境下的訂閱匹配為將所 接收的發(fā)布物與訂閱進(jìn)行比較以識別(identify)匹配訂閱的發(fā)布物的過程。在 各個(gè)訂閱不活動(dòng)時(shí)避免傳統(tǒng)的訂閱匹配。
本發(fā)明的第 一方面提供在發(fā)布/訂閱通信網(wǎng)絡(luò)內(nèi)管理訂閱匹配的方法,其 包括以下步驟對于第一訂閱者在發(fā)布/訂閱代理處存儲(chǔ)訂閱,其中該訂閱包 括用于激活訂閱匹配的、至少一個(gè)時(shí)間上不可預(yù)測的激活事件;在該發(fā)布/訂 閱代理處監(jiān)視事件,以識別所述激活事件的出現(xiàn);以及響應(yīng)于所述激活事件, 代表該第 一訂閱者激活訂閱匹配。本發(fā)明的另 一方面實(shí)施去激活事件的等效 方法。
發(fā)布/訂閱代理優(yōu)選地監(jiān)視一組預(yù)定義的事件以識別激活事件和去激活 事件二者或這些事件類型中的任一個(gè)的出現(xiàn),并接著對艮據(jù)識別了哪一種類型 的事件來代表特定的訂閱者激活訂閱匹配或去激活訂閱匹配。在一個(gè)實(shí)施例 中,單獨(dú)的訂閱者在任一時(shí)刻可具有多個(gè)活動(dòng)的和/或不活動(dòng)的訂閱,激活/ 去激活只特別針對具體的訂閱。 一旦被激活, 一般對于由發(fā)布/訂閱代理接收 的多個(gè)發(fā)布物執(zhí)行訂閱匹配,直至去激活事件將訂閱轉(zhuǎn)換到不活動(dòng)狀態(tài)為止。
與需要訂閱者發(fā)出提前的訂閱/退訂請求的解決方案相比,針對注冊的訂 閱者的、對訂閱匹配的、自動(dòng)的基于事件的訂閱匹配的激活和/或去激活可以 利用訂閱者的最小勞動(dòng)達(dá)到等待時(shí)間的減少和不必要的網(wǎng)絡(luò)通信的減少。本 發(fā)明的實(shí)施例由此提供改進(jìn)的發(fā)布/訂閱代理,以及考慮時(shí)間上不可預(yù)測的事 件的管理訂閱匹配的改進(jìn)的方法。
本發(fā)明的實(shí)施例也可減輕與經(jīng)常從發(fā)布/訂閱網(wǎng)絡(luò)斷開連接的、或經(jīng)由不 穩(wěn)定的網(wǎng)絡(luò)連接的訂閱者相關(guān)的問題。即使可以,這樣的訂閱者也不可能基 于時(shí)間接收事件。
當(dāng)然,當(dāng)需要各個(gè)操作時(shí)由訂閱者明確調(diào)用的激活、去激活、訂閱或退 訂操作對于訂閱者將是時(shí)間上可預(yù)測的;因此這些訂閱者明確調(diào)用的梯:作不 是時(shí)間上不可預(yù)測的激活事件。
時(shí)間上不可預(yù)測的事件的第 一示例由代理接收關(guān)于特定的激活主題的發(fā) 布物。此事件可觸發(fā)對于指定的訂閱者或指定的訂閱的訂閱匹配的激活。例 如,訂閱者可能希望監(jiān)視每個(gè)具有各自的發(fā)布物主題的、多個(gè)個(gè)股的股票市 場價(jià)格一一但是只在股票市場指數(shù)的變化率大于閾值率時(shí)。對于個(gè)股價(jià)格的 訂閱的激活事件可以是收到關(guān)于另外的主題的、所發(fā)布的消息,其指示指數(shù)
的較高的增長或降低率。類似地,洪水警報(bào)(flood warning)可以是對于多個(gè) 水位傳感器的訂閱的激活事件。
為了進(jìn)一步例示本發(fā)明的可能的實(shí)施例,代理可從各種發(fā)布者接收大量 的發(fā)布物,但是特定的一組訂閱者Sl、 S2和S3可能只對關(guān)于這些主題的非 常特定的子集的發(fā)布物感興趣。例如,感興趣的主題可以是從液體管道內(nèi)的 發(fā)布傳感器接收的溫度和流率的度量。對于S1、 S2和S3的訂閱匹配可以是 不活動(dòng)的,直至通過識別收到不同的所指定主題的消息而激活所述訂閱匹配 為止。此可減少不必要的網(wǎng)絡(luò)業(yè)務(wù)通信,并可被以避免在將每個(gè)所接收的發(fā) 布物的主題名稱與這些訂閱者的感興趣的指定主題進(jìn)行比較上的一些內(nèi)在的 處理的方式而實(shí)施。例如,感興趣的主題可以是 "PipelineA7FluidMeasurements/Temperature" 和 "PipelineA/FluidMeasurements/Flowrate,,,訂閱者可能希望他們的訂閱匹配為 不活動(dòng)的,直至收到關(guān)于諸如"PipelineA/ValveOpen"之類的主題的消息為止。 可以響應(yīng)于另 一事件(諸如收到主題"PipelineA/ValveClosed,,的消息)而去激 活Sl、 S2和S3的訂閱匹配。
可通過將激活觸發(fā)事件定義為收到關(guān)于主題
"PipelineA/FluidMeasurements/*"(其中*為通配符)的第 一發(fā)布物而達(dá)到類似 的效果。
在這兩個(gè)示例中,先于激活事件,代理都只監(jiān)視單個(gè)主題(代表一組訂 閱者),而不是將所有所接收的發(fā)布物與多個(gè)訂閱者的多個(gè)訂閱進(jìn)行比較???以由下述發(fā)布者發(fā)送激活/去激活事件,該發(fā)布者不同于發(fā)送與新激活的/去激 活的訂閱相關(guān)的發(fā)布物的發(fā)布者。
由此,保存多個(gè)訂閱者的訂閱的發(fā)布/訂閱代理可代表多個(gè)訂閱者和多個(gè) 發(fā)布者在中心一次處理激活和去激活事件。其次,代理避免潛在的等待時(shí)間 問題,并可具有此其中Sl、 S2和S3明確地并重復(fù)地退訂和重訂的傳統(tǒng)系統(tǒng) 中所需的網(wǎng)絡(luò)通信開銷低的網(wǎng)絡(luò)通信開銷。
在另 一示例中,激活事件可以是收到包括超過閾值的數(shù)據(jù)值之類的發(fā)布 物一一諸如在一組由傳感器發(fā)布的監(jiān)視的數(shù)據(jù)值中。接著為一個(gè)或多個(gè)訂閱 者的集合激活訂閱匹配,使得將隨后接收的發(fā)布物與那些訂閱者的訂閱進(jìn)行 比較。如果監(jiān)視的數(shù)據(jù)值再次降到閾值以下,可為特定的訂閱者再次關(guān)閉(去 激活)訂閱匹配,直至下一個(gè)激活事件為止。訂閱者可能希望得知風(fēng)向一一 但只在風(fēng)速超出閾值速度時(shí),因此確定風(fēng)速的通知可激活對于風(fēng)向信息的訂 閱。
另一示例為需要監(jiān)視鍋爐壓力讀數(shù)的應(yīng)用一一但只在鍋爐溫度等于或超 過99攝氏度時(shí)。由代理收到至少99°C的值的鍋爐溫度發(fā)布物可以是對于鍋 爐壓力發(fā)布物的訂閱的激活事件。相反,傳統(tǒng)的發(fā)布/訂閱解決方案一般實(shí)施 以下的途徑之一
(a) 代理可能利用過濾器來處理關(guān)于第一主題(例如"boilTemperature") 的訂閱匹配,使得只將消息中99。C或以上結(jié)果的溫度發(fā)送到訂閱者。同樣可 由訂閱者實(shí)施溫度過濾器。訂閱者通過將對于主題"boilerPressure"的訂閱的明 確請求發(fā)送到代理而響應(yīng)99。C或以上的溫度的通知。訂閱者可在稍后發(fā)送退 訂請求。上述等待時(shí)間、訂閱者處理開銷以及網(wǎng)絡(luò)通信開銷的問題存在。
(b) 代理處理關(guān)于第二主題"boilerPressure"的訂閱匹配,以及由代理或 訂閱者濾除不必要的消息。在此情況下,即使當(dāng)訂閱者不希望接收任何消息 時(shí),仍為每個(gè)消息執(zhí)行完全的訂閱匹配并將消息送往訂閱者。此可導(dǎo)致大量 的不必要的網(wǎng)絡(luò)業(yè)務(wù)通信和多余的處理。 激活和去激活事件的另外的示例包括組事件(諸如響應(yīng)于當(dāng)前注冊的訂 閱者的數(shù)目達(dá)到閾值數(shù)目而激活訂閱)、以及基于位置的事件。后者的示例為 其中設(shè)備用戶到達(dá)新的目的地城市激活對于與所述城市相關(guān)的新聞饋送
(feed)或娛樂新聞的訂閱;而離開所述城市去激活所述訂閱。
激活事件的另一示例可以是關(guān)于特定主題的發(fā)布物的頻率或容量如果 關(guān)于主題"Root/TopicLevell"的發(fā)布物的頻率超過閾值,則關(guān)于該主題的訂閱 匹配可被去激活,以及可以對于可替換的主題"Root/TopicLevel 1/TopicA"和 "Root/TopicLevell/TopicB"激活訂閱匹配。此為其中響應(yīng)于諸如發(fā)布物頻率之 類的代理確定的條件而增加監(jiān)視的粒度(granularity)的示例。
本領(lǐng)域技術(shù)人員將明白可使用本發(fā)明實(shí)施許多替換的激活和去激活事 件。通過將訂閱與不可預(yù)測的激活和/或去激活事件的事件定義相關(guān)聯(lián)以及自 動(dòng)操作只要這樣的事件出現(xiàn)時(shí)的訂閱匹配的激活和去激活,可達(dá)到發(fā)布/訂閱 系統(tǒng)的明顯改進(jìn)。
本發(fā)明的第二方面提供用于其中將發(fā)布物與訂閱進(jìn)行比較以確定哪些訂 閱者應(yīng)接收哪些發(fā)布物的發(fā)布/訂閱通信環(huán)境中的訂閱方法,包括以下步驟 創(chuàng)建訂閱定義,包括
指定訂閱者希望從發(fā)布者接收的至少 一種消息類型,以及 指定用于激活發(fā)布物與所指定的消息類型的比較的、至少一種時(shí)間上不 可預(yù)測的激活事件;以及
將訂閱定義提供給發(fā)布/訂閱匹配引擎。
將訂閱定義提供給發(fā)布/訂閱匹配引擎的步驟可包含將訂閱請求內(nèi)的訂 閱定義發(fā)送到位于訂閱者和一個(gè)或多個(gè)發(fā)布者之間的通信路徑內(nèi)的發(fā)布/訂 閱消息代理??商鎿Q地,將訂閱定義提供給匹配引擎的步驟可包含向與訂閱 者位于同 一彰:據(jù)處理系統(tǒng)的匹配引擎注冊訂閱。
本發(fā)明的第三方面提供一種數(shù)據(jù)處理系統(tǒng),包括 貯藏庫,用于代表至少一個(gè)訂閱者存儲(chǔ)訂閱,其中該訂閱定義用于激活 訂閱匹配的、至少一個(gè)時(shí)間上不可預(yù)測的激活事件;
發(fā)布/訂閱代理,包括用于訂閱匹配的匹配引擎;以及 事件監(jiān)視器,用于在發(fā)布/訂閱代理處識別所述激活事件的出現(xiàn); 其中發(fā)布/訂閱代理響應(yīng)于所述激活事件的出現(xiàn)來代表至少 一個(gè)訂閱者 ;敫活i丁閱匹配。 事件監(jiān)視器可以是在發(fā)布/訂閱代理內(nèi)集成的訂閱管理器組件,但同樣也可以是與代理通過界面連接(interface)的分離的組件。
本發(fā)明的另一方面提供一種計(jì)算機(jī)程序,包括一組程序代碼指令,用于 執(zhí)行上述的方法。所述程序代碼可被記錄在計(jì)算機(jī)可讀記錄介質(zhì)上,并可被 用于經(jīng)由因特網(wǎng)而下載,或可被用于經(jīng)由數(shù)據(jù)傳輸介質(zhì)而傳輸??稍诓煌?計(jì)算機(jī)系統(tǒng)中實(shí)施根據(jù)本發(fā)明的實(shí)施例的不同的程序代碼組分,用于分布式 的解決方案。
下面通過參照附圖,只以示例的方式更詳細(xì)地描述本發(fā)明的實(shí)施例,在 附圖中
圖1是已知的發(fā)布/訂閱消息網(wǎng)絡(luò)的示意性表示,所述發(fā)布/訂閱消息網(wǎng)絡(luò) 包括發(fā)布者和訂閱者應(yīng)用、以及用于管理所發(fā)布的消息至感興趣的訂閱者的 流動(dòng)的中間發(fā)布/訂閱代理;
圖2是其中實(shí)施了本發(fā)明的實(shí)施例的發(fā)布/訂閱網(wǎng)絡(luò)的示意性表示,其示 出了發(fā)布/訂閱代理內(nèi)的新的組件;
圖3是根據(jù)本發(fā)明的實(shí)施例的發(fā)布/訂閱網(wǎng)絡(luò)內(nèi)的各個(gè)數(shù)據(jù)處理系統(tǒng)處執(zhí) 行的操作的一些序列的示意性表示;以及
圖4是示出如根據(jù)本發(fā)明的實(shí)施例的、用于管理訂閱并執(zhí)行訂閱匹配的 發(fā)布/訂閱代理處執(zhí)行的方法的步驟的示意性流程圖。
具體實(shí)施例方式
下面描述本發(fā)明的多個(gè)實(shí)施例。與上述主題和激活/去激活事件的例示性 的示例一樣,只將這些實(shí)施例描述為例示性的示例,以-提供對本發(fā)明和其優(yōu) 點(diǎn)及可能的實(shí)施的更好的理解。本發(fā)明不限于所述的實(shí)施例。
具體地,下面描述的實(shí)施例包括用于發(fā)布/訂閱通信環(huán)境中的、訂閱匹配 的基于事件的控制的方法、裝置和計(jì)算機(jī)程序。把激活和/或去激活事件與訂 閱相關(guān)聯(lián),并用于控制何時(shí)訂閱是活動(dòng)的。對于不活動(dòng)的訂閱避免傳統(tǒng)的訂 閱匹配。
圖1示出了其中可實(shí)施本發(fā)明的簡單發(fā)布/訂閱消息網(wǎng)絡(luò)。這樣的網(wǎng)絡(luò)在 本領(lǐng)域中是已知的。在各個(gè)數(shù)據(jù)處理系統(tǒng)30、 40上運(yùn)行的一組發(fā)布者10、
20能夠發(fā)布消息,通過發(fā)布者向中間發(fā)布/訂閱消息代理50發(fā)送消息,消息 可以被多個(gè)訂閱者90、 100、 IIO接收。發(fā)布者和訂閱者不需要它們之間的直 接連接,并且不需要彼此的地址信息。而是,發(fā)布者向代理50發(fā)送包括諸如 發(fā)布者發(fā)布的消息內(nèi)的消息主題之類的消息類型信息的消息。在此示例中, 發(fā)布者10、 20和訂閱者90、 100、 110為依賴于下層(underlying)消息客戶端 150、 160、 170、 180、 190的消息傳輸功能的應(yīng)用程序,所迷下層消息客戶端 150、 160、 170、 180、 190保存代理50的網(wǎng)絡(luò)地址和其它通信信息。
在此示例中,在與發(fā)布者系統(tǒng)30、 40分開并與訂閱者系統(tǒng)120、 130、 140分開的數(shù)據(jù)處理系統(tǒng)60上實(shí)施消息代理。消息代理包括訂閱匹配引擎70 和相關(guān)聯(lián)的所存儲(chǔ)的訂閱列表80。訂閱者向代理50注冊,并諸如通過指定 一個(gè)或若干個(gè)特定的消息主題來指示它們對特定類型的消息的興趣。將訂閱 者的消息需求存儲(chǔ)于代理處。在一個(gè)實(shí)施例中,代理也可存儲(chǔ)個(gè)別(individual) 訂閱者系統(tǒng)的網(wǎng)絡(luò)地址和協(xié)議需求,并且代理可發(fā)起連接;但在優(yōu)選實(shí)施例 中,代理僅存儲(chǔ)訂閱者系統(tǒng)和其訂閱的名稱,而網(wǎng)絡(luò)和通信信息被保存在訂 閱者的系統(tǒng)處,并且當(dāng)訂閱者發(fā)起到代理的連接時(shí)被使用。
代理50處的訂閱匹配引擎70將隨后接收的發(fā)布物與所存儲(chǔ)的發(fā)布物進(jìn) 行比較,以確定哪些所接收的發(fā)布物匹配哪些發(fā)布者的需求,代理將發(fā)布物 送往感興趣的訂閱者。雖然在圖1中只示出了少量的發(fā)布者和訂閱者,但是 在網(wǎng)絡(luò)內(nèi)可存在許多發(fā)布者和許多訂閱者,發(fā)布/訂閱代理可以是分布式的代 理網(wǎng)絡(luò)的部分。
出于成本原因并且為推動(dòng)正在進(jìn)行的進(jìn)展,將發(fā)布/訂閱匹配引擎實(shí)施為 計(jì)算機(jī)程序代碼是普遍的。通常,可將包括所述的發(fā)布/訂閱代理、發(fā)布者應(yīng) 用以及訂閱者應(yīng)用的、本發(fā)明的幾個(gè)元件實(shí)施為計(jì)算^L程序代碼??衫弥T 如C+十、Java,或者SmallTalk之類的面向?qū)ο蟮某绦蛘Z言,或者諸如C編 程語言之類的過程編程語言編寫此代碼。程序代碼組件可在通用計(jì)算機(jī)上或 在專用數(shù)據(jù)處理裝置上執(zhí)行這些程序代碼組件。如下面更詳細(xì)地證實(shí)的,實(shí) 施本發(fā)明的一些特征和方面的程序代碼可在單個(gè)凄t據(jù)處理^:備上整體執(zhí)行, 或者被分布于諸如局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)、或者因特網(wǎng)之類的數(shù)據(jù) 處理網(wǎng)絡(luò)內(nèi)的多個(gè)數(shù)據(jù)處理系統(tǒng)。這樣的網(wǎng)絡(luò)內(nèi)的不同的系統(tǒng)和設(shè)備之間的 連接可以是有線的或無線的,不限于任何特定的通信協(xié)議或數(shù)據(jù)格式,這樣 的網(wǎng)絡(luò)中的凝:據(jù)處理系統(tǒng)可以是異類的系統(tǒng)。
在許多情況下,發(fā)布/訂閱代理將在高容量、高性能、與網(wǎng)絡(luò)連接的彩:據(jù)
處理系統(tǒng)上實(shí)施,這是因?yàn)閷τ诖罅康陌l(fā)布者和訂閱者,這樣的系統(tǒng)可維持
高性能的發(fā)布物吞吐量。發(fā)布/訂閱代理可以是邊緣(edge)服務(wù)器的組件(即 代理可以是一組Web服務(wù)器或應(yīng)用服務(wù)器組件之一 )或網(wǎng)絡(luò)網(wǎng)關(guān)設(shè)備。然而, 近年來開發(fā)了具有小代碼印跡(footprint)的"微型代理"解決方案,其已被用 于例如遠(yuǎn)程遙測(telemetry)應(yīng)用,因此現(xiàn)在可以確定地il發(fā)布者、訂閱者 和發(fā)布/訂閱代理全部可以在較寬范圍的數(shù)據(jù)處理系統(tǒng)和設(shè)備中的任何一個(gè)
括復(fù)雜和高性能的計(jì)算機(jī)系統(tǒng)的網(wǎng)絡(luò)中實(shí)施本發(fā)明。
本領(lǐng)域技術(shù)人員將明白可以以軟件或硬件(例如使用電子邏輯電路) 實(shí)施分布式發(fā)布/訂閱通信網(wǎng)絡(luò)的各種組件。例如,可通過將所發(fā)布的消息內(nèi) 的主題名稱與所存儲(chǔ)的訂閱內(nèi)的主題名稱進(jìn)行比較的硬件比較器來實(shí)施發(fā)布 /訂閱匹配引擎70。接著在電子電路內(nèi)處理指示匹配或失配的比較器輸出信 號,以控制是否將消息送往特定的訂閱者。由一些發(fā)布/訂閱匹配引擎實(shí)施的 過濾步驟可通過電子過濾器(一種電子電路)而實(shí)施,特別是當(dāng)要將過濾器 應(yīng)用到其上的數(shù)據(jù)值可被以信號幅度表示時(shí)。
如上所述,本發(fā)明可適用于依靠位于中心的代理(如圖l)或分布式的 代理網(wǎng)絡(luò)的發(fā)布/訂閱通信環(huán)境。本發(fā)明對于管理多個(gè)訂閱者的訂閱的發(fā)布/ 訂閱代理提供特別的優(yōu)勢,但本發(fā)明也適用于其中發(fā)布/訂閱代理包括在每個(gè) 訂閱者系統(tǒng)處復(fù)制的發(fā)布/訂閱匹配引擎功能的環(huán)境。
由此,應(yīng)明白本發(fā)明適用于較寬范圍的操作環(huán)境,并可使用各種硬件 和軟件的組合而實(shí)施。在每種情況下,本發(fā)明提供發(fā)布/訂閱通信環(huán)境中的、 訂閱匹配的增強(qiáng)的基于事件的管理。具體地,本發(fā)明的實(shí)施例使得訂閱者能 夠定義時(shí)間上不可預(yù)測的激活和去激活事件,使得可通過發(fā)布/訂閱代理將訂 閱匹配開啟或關(guān)閉,而不需要訂閱者重復(fù)發(fā)出"訂閱"和"退訂"請求。
為了幫助理解本發(fā)明的新穎性,值得提及已在別處描述的已知的解決方 案的一些示例。
已公布的美國專利申請第2006/0088014號描述了響應(yīng)于來自訂閱者的明 確請求的、發(fā)布源處的激活、暫停以及再繼續(xù)(resume)訂閱匹配。US 2006/0088014未公開使用時(shí)間上不可預(yù)測的激活事件或去激活事件以開啟或 關(guān)閉針對已注冊的訂閱的訂閱匹配,并且未提供使用本發(fā)明的實(shí)施例可達(dá)到
的減少等待時(shí)間的優(yōu)點(diǎn)。US 2006/0088014也未公開對于位于訂閱者的系統(tǒng)處 或位于發(fā)布者和訂閱者之間的中間網(wǎng)絡(luò)位置處的消息代理的解決方案。
王等的"Adaptive Real-Time Publish—Subscribe Messaging for Distributed Monitoring Systems" ( IEEE International Workshop on Intelligent Data Acquisition and Advanced Computing Systems: Technology and Applications, 8-10 September 2004, Lviv, Ukraine, pages 412-417)也描述了其中訂閱、退訂、 激活以及去激活操作不是由事件驅(qū)使的、而是需要被明確請求的解決方案。 此不提供使用事件驅(qū)使的訂閱的激活和去激活可達(dá)到的等待時(shí)間的減少(這 些明確請求不是時(shí)間上不可預(yù)測的激活事件)。
美國專利第6829770號涉及面向?qū)ο蟮幕谑录陌l(fā)布/訂閱系統(tǒng),但該 專利說明書的語境中所謂的"事件"對應(yīng)于本說明書的語境中的發(fā)布物;它們 不是激活或去激活針對多個(gè)以后接收的發(fā)布物的、代理的訂閱匹配的激活事 件或去激活事件。
下面參照圖2至圖4詳細(xì)描述本發(fā)明的示例實(shí)施。在包括示例實(shí)施的發(fā) 布/訂閱網(wǎng)絡(luò)中,發(fā)布者10、 20可以是完全是傳統(tǒng)的。例如,第一組發(fā)布者 應(yīng)用程序可以是每個(gè)在多個(gè)異類的數(shù)據(jù)處理系統(tǒng)之一上運(yùn)行的JMS消息客戶 端。JMS客戶端發(fā)布包括消息內(nèi)容和消息首部的消息。消息首部內(nèi)的主題字 段包括主題字符串,該主題字符串可被與訂閱內(nèi)的主題字符串進(jìn)行比較以識 別希望接收此類消息的訂閱者。所發(fā)布的消息的主題字段內(nèi)的主題字符串具 有格式"Root/TopLevell/TopLevd2,,,盡管可使用許多不同的格式,并且可在 主題層級內(nèi)指定不同數(shù)目的級別。
此外,本實(shí)施例的訂閱者90,、 100,、 110,與傳統(tǒng)的訂閱者相比較需要非 常小的修改。由此, 一組訂閱者應(yīng)用可包括每個(gè)在各個(gè)數(shù)據(jù)處理系統(tǒng)120、 130、 140 (例如膝上型計(jì)算機(jī)、個(gè)人數(shù)字助理或其它設(shè)備)上運(yùn)行的JMS消 息客戶端。如同在傳統(tǒng)解決方案中那樣,訂閱者生成訂閱請求,并將所述請 求發(fā)送到發(fā)布/訂閱代理50。生成訂閱請求包括通過指定代表訂閱者希望接收 的消息類型的標(biāo)題字符串來創(chuàng)建訂閱定義。
然而,實(shí)施本實(shí)施例的訂閱者應(yīng)用90,、 100,、 110,也可指定至少一個(gè)激 活事件或去激活事件,并且一般指定激活事件和去激活事件兩者。具體地, 與傳統(tǒng)的解決方案不同,訂閱者能夠指定時(shí)間上不可預(yù)測的激活和去激活事 件,而不是限于預(yù)定義的開啟/關(guān)閉次數(shù)。對于訂閱者應(yīng)用使得能夠在訂閱者
定義內(nèi)包含事件子句所需要的就是允許這些增強(qiáng)的訂閱的適合的API。
在本發(fā)明的優(yōu)選實(shí)施例.中,訂閱者能夠指定激活和去激活次數(shù)(時(shí)間上 可預(yù)測的激活和去激活觸發(fā))、以及時(shí)間上不可預(yù)測的事件,但是指定開啟/
關(guān)閉次數(shù)的能力是與本發(fā)明不相關(guān)的(orthogonal)。
激活事件和去激活事件子句與已知的訂閱過濾器是類似的,包括其內(nèi)容 要被過濾的主題和基于消息的屬性或內(nèi)容的過濾表達(dá)式(以謂語表示)。然而,
事件子句,并且所述激活和去激活事件子句被用于確定訂閱匹配是否應(yīng)被激 活/去激活、而不是被執(zhí)行為接在訂閱匹配后面的附加檢查。下面更詳細(xì)地解 釋這點(diǎn)。
包括激活和去激活事件子句的增強(qiáng)的訂閱定義的示例^"式為 Subscribe boiler/1/pressure
activateOn topic:boiler/1/temp filter: "temp>=99,, activateOff topic:boiler/l/temp filter: "temp<99,, 其中"boiler/l/pressure"為訂閱者希望訂閱的主題。訂閱者希望在鍋爐溫度小于 99。C時(shí)訂閱不活動(dòng),而在鍋爐溫度達(dá)到或超過99。C時(shí)訂閱活動(dòng)。將激活事 件指定為收到關(guān)于值匹配所指定的溫度值過濾器的值的主題"boiler/l/temp" 的發(fā)布物。
接著可由發(fā)布/訂閱代理50,使用所指定的事件,以控制訂閱的生命周期 (lifecycle ),響應(yīng)于所指定的事件的出現(xiàn)而自動(dòng)地將訂閱匹配開啟或關(guān)閉。 下面更詳細(xì)地描述活動(dòng)和不活動(dòng)狀態(tài)之間的訂閱的此事件驅(qū)使的轉(zhuǎn)換。
根據(jù)本實(shí)施例的發(fā)布/訂閱代理50,包括與所存儲(chǔ)的訂閱列表80,相關(guān)聯(lián)的 訂閱匹配引擎70,和附加的訂閱管理器組件200。布置訂閱管理器200以截取 (intercept)并翻譯所接收的發(fā)布物,以識別激活和去激活事件。下面參照圖 3和圖4更詳細(xì)地描述訂閱管理器200的操作。
圖3示出了操作1、 2、 3、 4和5的一些示例序列。序列僅為例示性的示 例并且在時(shí)間上不相關(guān)。即,可在不規(guī)律的和不可預(yù)測的時(shí)刻發(fā)送發(fā)布物, 以及出現(xiàn)訂閱事件。具體地,序列4的定時(shí)不是由序列2的訂閱請求預(yù)定義 的。然而,示例序列1、 2、 3、 4和5是如同以數(shù)字順序出現(xiàn)那樣而被描述的。 參照圖3內(nèi)的序列1,第一發(fā)布者PUBLISHER1可先于任意訂閱者向代 理注冊而發(fā)布具有主題識別符(topicl)的消息。當(dāng)在代理處收到這些發(fā)布物 時(shí),訂閱管理器200尋找任何活動(dòng)的訂閱。當(dāng)缺少4壬何注冊的訂閱者時(shí),可 不存在活動(dòng)的訂閱并刪除所發(fā)布的消息。
一些消息代理實(shí)施"保持"策略,諸如在代理處將關(guān)于每個(gè)主題的最后消 息發(fā)布物保持在存儲(chǔ)(例如高速緩沖存儲(chǔ)器)中。對于希望接收關(guān)于其感興 趣的主題的最新的發(fā)布物而不需要等待各個(gè)發(fā)布者發(fā)送新的發(fā)布物的新的訂
閱者,這點(diǎn)可以是有用的。為求簡潔,在圖3的此討論中沒有考慮保持策略; 但在本說明書中稍后將再次涉及保持策略。
參照圖3內(nèi)的序列2,訂閱者SUBSCRIBER1生成訂閱定義(如上所述) 并將其作為訂閱請求發(fā)送到消息代理50,。訂閱請求包括SUBSCRIBER1的地 址信息,訂閱定義自身包括主題名稱和用于指示SUBSCRIBER1希望接收的 消息的一組標(biāo)準(zhǔn)的其它過濾信息。另外,訂閱定義包括激活事件和去激活事 件中至少一個(gè)的定義,并可包括初始的活動(dòng)的/不活動(dòng)的狀態(tài)標(biāo)志。在示例序 列2中,初始狀態(tài)是不活動(dòng)的。在此示例中,將激活事件定義為由代理收到 關(guān)于不同主題(topic2)的所發(fā)布的消息。去激活事件可以是收到關(guān)于另一主 題(topic3 )的發(fā)布物,或者去激活事件可以是關(guān)于具有不同消息參數(shù)的topic2 的發(fā)布物。下面的描述,li殳存在用于處理激活和去^t活事件的關(guān)于topic2和 topic3的一對次要(secondary)訂閱,但本發(fā)明的其它實(shí)施例同樣是可能的。
消息代理50,接收訂閱請求并注冊訂閱者,將訂閱信息保存在訂閱列表 80,中,其中具有指示該訂閱當(dāng)前不活動(dòng)的狀態(tài)標(biāo)志。除了保存關(guān)于topicl的 不活動(dòng)的訂閱(此為SUBSCRIBERS的明確請求的訂閱、或"主要(primary) 訂閱")之外,訂閱管理器也保存topic2和topic3的兩個(gè)活動(dòng)的"次要訂閱"。 訂閱管理器200是這些次要訂閱的識別的訂閱者,因此由匹配引擎70,將關(guān)于 這些主題的所接收的消息傳遞到訂閱管理器200。
參照圖3中的序列3,第一發(fā)布者PUBLISHER1將關(guān)于topicl的另一發(fā) 布物發(fā)送到消息代理。訂閱管理器200檢查任何活動(dòng)的訂閱一掃描訂閱列表 以尋找任何具有被設(shè)置為活動(dòng)的狀態(tài)標(biāo)志的訂閱。由于新注冊的訂閱是不活 動(dòng)的,因此由訂閱管理器識別出的任何活動(dòng)的訂閱者為關(guān)于topic2和topic3 的次要訂閱。由于不存在主題匹配,因此刪除關(guān)于topicl的所發(fā)布的消息。
參照序列4,第二發(fā)布者PUBLISHER2發(fā)送關(guān)于topic2的發(fā)布物。如在 序列l(wèi)和2中那樣,訂閱管理器檢查活動(dòng)的訂閱。在此情況下,將關(guān)于topic2 和topic3的次要訂閱識別為活動(dòng)的,因此調(diào)用訂閱匹配引擎70,以將所接收的 發(fā)布物的主題(topic2 )與每個(gè)活動(dòng)的訂閱的主題(分別是topic2和topic3 ) 進(jìn)行比較。此比較識別出針對topic2的主題匹配,并將訂閱管理器200識別 為新的發(fā)布物的目標(biāo)接受者。在此實(shí)施例中,對于其訂閱管理器200作為目 標(biāo)接受者的所有發(fā)布物為激活/去激活事件。然而,單個(gè)發(fā)布物通常可以;陂送 往傳統(tǒng)的訂閱者以及訂閱管理器。
將關(guān)于topic2的消息傳遞到訂閱管理器200,其將發(fā)布物識別為主要訂 閱的激活事件。訂閱管理器將與主要訂閱相關(guān)聯(lián)的狀態(tài)標(biāo)志變?yōu)?活動(dòng)的"。 因此現(xiàn)在我們具有關(guān)于topicl的活動(dòng)的主要訂閱。也可將關(guān)于topic2的消息 送往由匹配引擎識別的 一組訂閱者。
在激活主要訂閱后執(zhí)行序列5。第一發(fā)布者PUBLISHER1發(fā)送關(guān)于topicl 的另一發(fā)布物。如之前那樣,訂閱管理器200 ^r查活動(dòng)的訂閱,并在此情況 下識別出三個(gè)活動(dòng)的訂閱(主要訂閱和次要訂閱)。調(diào)用訂閱匹配引擎以將新 接收的發(fā)布物與這些活動(dòng)的訂閱內(nèi)的主題進(jìn)行比較,對于關(guān)于topicl的主要 訂閱識別出主題匹配。由匹配引擎70,應(yīng)用訂閱內(nèi)任何附加的過濾器,如果所 發(fā)布的消息滿足過濾條件,將所述消息送往訂閱者SUBSCRIBER1。 SUBSCRIBER1可接著如在傳統(tǒng)系統(tǒng)中那樣處理所述消息。
同時(shí),主要訂閱保持活動(dòng),直至去激活事件出現(xiàn)為止。去激活事件可以 是在稍后的時(shí)刻從PUBLISHER2或從不同的發(fā)布者收到關(guān)于topic3的發(fā)布 物。該組主要和次要訂閱保持在發(fā)布/訂閱代理的管理下,直至從訂閱者接收 到退訂命令為止,或者(在非持久的訂閱的情況下)直至訂閱者從代理斷開 連接為止(如果斷開連接是在明確的退訂之前)。
在圖4的流程圖中表示響應(yīng)于收到新的發(fā)布物由發(fā)布/訂閱代理執(zhí)行的方 法步驟一包括實(shí)施上述序列1、 3、 4和5的揭:作。代理接收300新的所發(fā)布 的消息,并將所述消息從字節(jié)流格式轉(zhuǎn)換為可由代理處理的標(biāo)準(zhǔn)形式。代理 檢查310其訂閱列表以確定是否有任何訂閱當(dāng)前活動(dòng)(即,注冊的訂閱者的 任何主要訂閱或訂閱管理器200的任何次要訂閱)。如果不存在活動(dòng)的訂閱, 刪除320該消息,對于當(dāng)前消息的代理的處理結(jié)束。如果存在至少一個(gè)活動(dòng) 的訂閱,則代理的訂閱匹配引擎訪問330第一活動(dòng)的訂閱,并將訂閱的主題 字符串與所發(fā)布的消息的主題字符串進(jìn)行比較340。如果不存在主題匹配, 則執(zhí)行350是否存在任何另外的活動(dòng)的訂閱的檢查,并且如果存在,訪問360 下一個(gè)活動(dòng)的訂閱。如果識別340 了主題匹配,則下面將該訂閱內(nèi)定義的任何過濾器與所發(fā)
布的消息進(jìn)行比較370。如果不滿足過濾器,執(zhí)行350是否存在任何另外的 活動(dòng)的訂閱的檢查。然而,如果識別了主題匹配,執(zhí)行380是否該匹配的訂 閱是針對其存在一個(gè)或多個(gè)注冊的訂閱者的主要訂閱的檢查。如果此檢查識 別一個(gè)或多個(gè)主要訂閱者(即,傳統(tǒng)訂閱者而不是訂閱管理器),則由代理將 消息發(fā)送390到所識別的訂閱者。
然而,如果匹配的主題是用于次要訂閱的,則執(zhí)行400是否所發(fā)布的消 息是激活事件的檢查(即,對于一個(gè)主要訂閱或一組主要訂閱激活事件的"開 啟子句(on clause)"被滿足)。如果是這樣,訂閱管理器激活410 —個(gè)或多個(gè)相 應(yīng)的主要訂閱??商鎿Q地,如果匹配的主題對應(yīng)于一個(gè)主要訂閱或多個(gè)訂閱 的去激活事件的"關(guān)閉子句(off clause)",則去激活420各個(gè)主要訂閱。
本領(lǐng)域技術(shù)人員將理解對于上述實(shí)施例在本發(fā)明的范圍內(nèi)可做出各種 修改。例如,上面詳細(xì)描述的實(shí)施例包括關(guān)于各種主題的發(fā)布物被用作激活 事件和去激活事件,對于注冊的訂閱將訂閱匹配開啟或關(guān)閉。例如,各個(gè)激 活和去激活事件可以是關(guān)于不同主題所發(fā)布的消息,或者可將單個(gè)主題用于 激活和去激活事件二者。
在本發(fā)明的范圍內(nèi)的其它的激活/去激活事件包括諸如到達(dá)新位置之類 的基于位置的事件,所述事件可觸發(fā)激活對于與所述位置相關(guān)的新聞或娛樂 信息的訂閱。許多其它的應(yīng)用可使用同一特性。例如,工程師當(dāng)他/她4全查工 程安裝時(shí)可激活與工程師當(dāng)前位置有關(guān)的傳感器信息的訂閱,同時(shí)去激活其 它位置的訂閱匹配??商鎿Q地,可響應(yīng)于確定通信介質(zhì)或目的地i殳備可用而 激活訂閱,而在其它時(shí)刻關(guān)閉訂閱,以避免在系統(tǒng)存儲(chǔ)中保存的消息的數(shù)目 增長。
上面詳細(xì)描述的一個(gè)實(shí)施例涉及被設(shè)置在訂閱列表內(nèi)以指示訂閱是處于 活動(dòng)的還是不活動(dòng)的狀態(tài)的狀態(tài)標(biāo)志。在每個(gè)訂閱上設(shè)置活動(dòng)的/不活動(dòng)的標(biāo) 志的步驟包含小的處理開銷;但是當(dāng)處理每個(gè)新的發(fā)布物時(shí)必須檢查標(biāo)志。 本發(fā)明的替換實(shí)施可維持兩個(gè)分開的訂閱的列表一一個(gè)活動(dòng)、 一個(gè)不活動(dòng)一 或者可維持當(dāng)前活動(dòng)的訂閱的索引(index),而不是使用狀態(tài)標(biāo)志。此實(shí)施可 能需要在列表之間移動(dòng)訂閱,但具有在處理新的發(fā)布物時(shí)可以不考慮整個(gè)不 活動(dòng)的列表的優(yōu)點(diǎn)。
在上述的一個(gè)實(shí)施例中,由訂閱管理器使用次要訂閱來處理激活/去激活 事件,使得事件控制主要訂閱。在替換實(shí)施例中,次要訂閱自身可以被激活 和去激活,使得訂閱管理器在任何的一個(gè)時(shí)刻監(jiān)視針對特定的主要訂閱的激 活事件或去激活事件,而不是監(jiān)視所述激活事件和所述去激活事件二者(即, 不需要監(jiān)視已經(jīng)活動(dòng)的訂閱的激活事件;并且不需要監(jiān)視不活動(dòng)的訂閱的去
激活事件)。由訂閱管理器200通過將"去激活"次要訂閱(關(guān)于topic3的)設(shè) 置為活動(dòng)、并將"激活"次要訂閱(關(guān)于topic2的)設(shè)置為不活動(dòng)響應(yīng)識別激 活事件,而實(shí)施這點(diǎn)。訂閱管理器通過將topic3次要訂閱設(shè)置為不活動(dòng)、并 將topic2次要訂閱設(shè)置為活動(dòng),而響應(yīng)去激活事件。
在另一實(shí)施例中,訂閱管理器響應(yīng)不使用次要訂閱實(shí)施的觸發(fā)事件。例 如,安全或緊急警報(bào)可通過不同于發(fā)布/訂閱通信的機(jī)制來實(shí)施,以及也可被 用于控制一個(gè)或多個(gè)訂閱的激活。
本發(fā)明的另一實(shí)施例實(shí)施涉及上面簡要提及的特性。此即"保持(retain)" 特性,其包含保存上次接收的關(guān)于主題的發(fā)布物以使得新訂閱者能夠獲得對 于最新的發(fā)布物的快速訪問的發(fā)布/訂閱代理的。在所保持的發(fā)布物的一般實(shí) 施中,代理可能響應(yīng)于設(shè)置保持標(biāo)志的發(fā)布者,來實(shí)施對于要保持什么以及 所保持的發(fā)布物何時(shí)過期的規(guī)則。本發(fā)明引入了注冊的、但不活動(dòng)的訂閱, 其補(bǔ)充所保持的發(fā)布物的特性。
不活動(dòng)的訂閱者可能希望關(guān)于主題的上一個(gè)發(fā)布物(或上N個(gè)發(fā)布物) 保存在代理處,并且在激活訂閱時(shí)將所述發(fā)布物送往訂閱者。我們假設(shè)訂閱 者注冊了關(guān)于topicl的訂閱,其具有關(guān)于topic2的激活子句。將該激活子句 與所接收的發(fā)布物內(nèi)的主題字符串進(jìn)行比較,以確定是否存在匹配。如果存 在關(guān)于t叩ic2的主題匹配(并且滿足過濾器),則激活訂閱。如果保持了關(guān)于 topicl的任何發(fā)布物,訂閱管理器可發(fā)起訂閱和所保持的發(fā)布物之間的比較 以達(dá)到關(guān)于topicl的一個(gè)或多個(gè)最新的發(fā)布物向相關(guān)的訂閱者的快速傳遞。 另外,可指定去激活子句。如果去激活子句匹配,則將不把主要訂閱與所保 持的發(fā)布物進(jìn)行匹配。在本實(shí)施例的進(jìn)一步擴(kuò)展中,代理可考慮不活動(dòng)的訂 閱內(nèi)指定的保持需求(例如,保持關(guān)于主題的N個(gè)發(fā)布物,其中N是由任意 訂閱者或當(dāng)前不活動(dòng)的訂閱者的任意子組對于該主題所指定的最高數(shù)目)。
本發(fā)明的替換實(shí)施例使用用于改進(jìn)的目的、所保持的發(fā)布物機(jī)制。在此 實(shí)施例中,保持激活和去激活主題,使得代理總是能訪問每個(gè)訂閱的最后狀 態(tài)。接著無論何時(shí)發(fā)布物匹配,代理就可以檢查激活/去激活子句。如本領(lǐng)域
中已知的,代理可保持關(guān)于某主題的所發(fā)布的最后消息。此通常被用于將主 題的最后的已知值提供給新的訂閱者。在本實(shí)施例中,訂閱者將訂閱注冊為
一般,但其具有可選的"是活動(dòng)的(is active)"子句??蛇x的"是活動(dòng)的"子句可 參考與訂閱基于其的主要主題不同的主題。
當(dāng)評定訂閱以觀察其是否匹配所發(fā)布的消息時(shí),使用關(guān)于"是活動(dòng)的" 主題的之前已存儲(chǔ)的、所保持的發(fā)布物(如果有的話)來評定"是活動(dòng)的"子 句。如果所述訂閱匹配,將所發(fā)布的消息發(fā)送到訂閱者。另外,可指定"不是 活動(dòng)的(is not active)"子句一如果此子句匹配任何所保持的消息,則將不對該 主要訂閱進(jìn)4亍匹配。
權(quán)利要求
1.一種在發(fā)布/訂閱通信網(wǎng)絡(luò)內(nèi)管理訂閱匹配的方法,包括以下步驟對于第一訂閱者在發(fā)布/訂閱代理處存儲(chǔ)訂閱,其中該訂閱包括用于激活訂閱匹配的、至少一個(gè)時(shí)間上不可預(yù)測的激活事件;在該發(fā)布/訂閱代理處監(jiān)視事件,以識別所述激活事件的出現(xiàn);以及響應(yīng)于所述激活事件的出現(xiàn),代表該第一訂閱者激活訂閱匹配。
2. 根據(jù)權(quán)利要求1的方法,其中,所述訂閱定義用于在訂閱匹配期間與 所接收的發(fā)布物進(jìn)行比較的第一主題,并且其中所定義的激活事件是在發(fā)布/ 訂閱代理處接收發(fā)布物的事件,其中所述發(fā)布物包括與該第 一主題不同的、 預(yù)定義的激活主題。
3. 根據(jù)權(quán)利要求2的方法,還包括檢查所接收的發(fā)布物是否滿足與該激 活主題相關(guān)聯(lián)的一個(gè)或多個(gè)過濾器條件的集合,其中響應(yīng)于對所接收的發(fā)布 物滿足該過濾器條件的集合的肯定確定而執(zhí)行該激活步驟。
4. 根據(jù)任一前述權(quán)利要求的方法,還包括代表多個(gè)訂閱者存儲(chǔ)訂閱, 其中所述訂閱定義公共的激活事件;以及響應(yīng)于該公共的激活事件代表所述 多個(gè)訂閱者激活訂閱匹配。
5. —種在發(fā)布/訂閱通信網(wǎng)絡(luò)內(nèi)管理訂閱匹配的方法,包括以下步驟 針對第一訂閱者在發(fā)布/訂閱代理處存儲(chǔ)訂閱,其中該訂閱包括用于去激活訂閱匹配的、至少一個(gè)時(shí)間上不可預(yù)測的去i!L活事件;在該發(fā)布/訂閱代理處監(jiān)視事件,以識別所述去激活事件的出現(xiàn);以及 響應(yīng)于所述去激活事件的出現(xiàn),代表該第一訂閱者去激活訂閱匹配。
6. —種用于在發(fā)布/訂閱通信環(huán)境中向發(fā)布/訂閱代理訂閱的方法,其中 將發(fā)布物與訂閱進(jìn)行比較,以確定哪些訂閱者應(yīng)當(dāng)接收哪些發(fā)布物,該方法 包括以下步驟通過指定用于識別訂閱者希望從發(fā)布者接收的消息的至少一個(gè)標(biāo)準(zhǔn)、以 及指定用于激活發(fā)布物與所指定的消息標(biāo)準(zhǔn)的比較的至少 一個(gè)時(shí)間上不可預(yù) 測的激活事件,來生成訂閱定義;以及將該訂閱定義提供給發(fā)布/訂閱代理。
7. —種用于在發(fā)布/訂閱通信環(huán)境中向發(fā)布/訂閱代理訂閱的方法,其中 將發(fā)布物與訂閱進(jìn)行比較,以確定哪些訂閱者應(yīng)當(dāng)接收哪些發(fā)布物,該方法包括以下步驟通過指定用于識別訂閱者希望乂人發(fā)布者接收的消息的至少 一個(gè)標(biāo)準(zhǔn)、以 及指定用于去激活發(fā)布物與所指定的消息標(biāo)準(zhǔn)的比較的至少一個(gè)時(shí)間上不可 預(yù)測的去激活事件,來生成訂閱定義;以及將該訂閱定義提供給發(fā)布/訂閱代理。
8. —種用于在發(fā)布/訂閱通信網(wǎng)絡(luò)內(nèi)管理訂閱匹配的數(shù)據(jù)處理裝置,包括貯藏庫,用于代表至少一個(gè)訂閱者存儲(chǔ)訂閱,其中該訂,閱包括用于激活訂閱匹配的、至少一個(gè)時(shí)間上不可預(yù)測的激活事件;發(fā)布/訂閱代理,包括用于訂閱匹配的匹配引擎;以及 事件監(jiān)視器,用于在該發(fā)布/訂閱代理處識別所述激活事件的出現(xiàn); 其中,該發(fā)布/訂閱代理響應(yīng)于所述激活事件的出現(xiàn)來代表該至少一個(gè)訂閱者激活訂閱匹配。
9. 一種數(shù)據(jù)處理裝置,包括貯藏庫,用于代表至少一個(gè)訂閱者存儲(chǔ)訂閱,其中該訂閱包括用于去激活訂閱匹配的、至少一個(gè)時(shí)間上不可預(yù)測的去激活事件; 發(fā)布/訂閱代理,包括用于訂閱匹配的匹配引擎;以及 事件監(jiān)視器,用于在該發(fā)布/訂閱代理處識別所述去激活事件的出現(xiàn); 其中,該發(fā)布/訂閱代理響應(yīng)于所述去激活事件的出現(xiàn)來代表該至少一個(gè)訂閱者去激活訂閱匹配。
全文摘要
本發(fā)明提供了用于發(fā)布/訂閱通信環(huán)境中的訂閱匹配的基于事件的控制的方法、裝置和計(jì)算機(jī)程序。激活和/或去激活事件與發(fā)布/訂閱代理處的訂閱相關(guān)聯(lián),并且用于控制何時(shí)訂閱是活動(dòng)的。代理響應(yīng)于諸如收到關(guān)于預(yù)定義的激活主題的所發(fā)布的消息的、時(shí)間上不可預(yù)測的事件,以激活針對隨后接收的或者較早接收的并保持在代理處的發(fā)布物的訂閱匹配。對于注冊的訂閱當(dāng)該訂閱不活動(dòng)時(shí)可避免傳統(tǒng)的訂閱匹配,以及不需要訂閱者明確地并重復(fù)地訂閱和退訂。
文檔編號H04L12/58GK101193078SQ20071018697
公開日2008年6月4日 申請日期2007年11月15日 優(yōu)先權(quán)日2006年11月30日
發(fā)明者伊恩·G·克拉格斯, 伊恩·R·哈伍德, 安東尼·A·加勒德, 安德魯·D·雷諾茲, 安德魯·I·希克森, 安德魯·J·斯坦福-克拉克, 戴維·洛克, 簡·L·斯托克迪爾 申請人:國際商業(yè)機(jī)器公司