專利名稱:發(fā)布/訂閱消息中介的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及操作發(fā)布/訂閱消息中介(broker)的方法、消息中介本身以及用于操 作發(fā)布/訂閱消息中介的計(jì)算機(jī)可讀介質(zhì)上的計(jì)算機(jī)程序產(chǎn)品。
背景技術(shù):
發(fā)布/訂閱(pub/sub)是異步消息收發(fā)范例(paradigm)。在pub/sub系統(tǒng)中,發(fā) 布者向消息中介發(fā)出消息,而訂閱者向該中介注冊(cè)訂閱。在基于話題的系統(tǒng)中,將消息發(fā)布 至中介所管控的話題?;谠掝}的系統(tǒng)中的訂閱者將接收向他們訂閱的話題所發(fā)布的全 部消息,并且對(duì)話題的所有訂閱者將接收相同的消息。Pub/sub是非常有價(jià)值的范例,每個(gè) pub/sub消息按照消息本身的屬性(通常是主題,有時(shí)是內(nèi)容)進(jìn)行路由。在每個(gè)消息到 達(dá)時(shí),作為第一步,中介分析該消息并且確定正確的訂閱者集合,并且第二步相應(yīng)地分發(fā)消 息。系統(tǒng)是異步的。目前在發(fā)布訂閱環(huán)境中,發(fā)布者可以向話題發(fā)布消息,訂閱者可以接收 關(guān)于該話題的消息。在某些情況下,將發(fā)布和訂閱二者從指定的話題重定向至另一話題將 是有益的。
發(fā)明內(nèi)容
按照本發(fā)明的第一方面,提供一種操作發(fā)布/訂閱消息中介的方法,包括從發(fā)布 者接收關(guān)于話題的消息;將該消息標(biāo)識(shí)為消息序列的開始;向該話題的一個(gè)或多個(gè)已有訂 閱者傳送該消息;使新訂閱者注冊(cè)該話題;從發(fā)布者接收關(guān)于該話題的進(jìn)一步消息;以及 向該話題的一個(gè)或多個(gè)已有訂閱者傳送所述進(jìn)一步消息,但是不向已注冊(cè)該話題的新訂閱 者傳送該進(jìn)一步消息。按照本發(fā)明的第二方面,提供一種發(fā)布/訂閱消息中介,該消息中介被安排為從 發(fā)布者接收關(guān)于話題的消息;將該消息標(biāo)識(shí)為消息序列的開始;向該話題的一個(gè)或多個(gè)已 有訂閱者傳送該消息;使新訂閱者注冊(cè)該話題;從發(fā)布者接收關(guān)于該話題的進(jìn)一步消息; 以及向該話題的一個(gè)或多個(gè)已有訂閱者傳送所述進(jìn)一步消息,但是不向已注冊(cè)該話題的新 訂閱者傳送該進(jìn)一步消息。按照本發(fā)明的第三方面,提供一種計(jì)算機(jī)可讀介質(zhì)上的計(jì)算機(jī)程序產(chǎn)品,用于操 作發(fā)布/訂閱消息中介,該產(chǎn)品包括用于以下的指令從發(fā)布者接收關(guān)于話題的消息;將該 消息標(biāo)識(shí)為消息序列的開始;向該話題的一個(gè)或多個(gè)已有訂閱者傳送該消息;使新訂閱者 注冊(cè)該話題;從發(fā)布者接收關(guān)于該話題的進(jìn)一步消息;以及向該話題的一個(gè)或多個(gè)已有訂 閱者傳送所述進(jìn)一步消息,但是不向已注冊(cè)該話題的新訂閱者傳送該進(jìn)一步消息。根據(jù)優(yōu)選實(shí)施方式,可以提供一種消息中介,其將操作話題,使得在該話題已經(jīng)開 始了一個(gè)序列的情況下,新訂閱者將不會(huì)接收來自該話題的消息。優(yōu)選實(shí)施方式描述了可 以如何在無需客戶端知識(shí)的情況下,將發(fā)布者和訂閱者二者使用的話題重定向至一個(gè)或多 個(gè)不同的話題。這在發(fā)布必須全部接收才有意義的消息序列這一具體情況下將是有用的,也即,少接收一個(gè)消息都將不是有用的??紤]棋類游戲,其中發(fā)布者向特定話題發(fā)布游戲中的每 個(gè)移動(dòng)。對(duì)于訂閱者來說,在游戲的半途接收這些發(fā)布將沒有任何意義,因?yàn)樵跊]有接收到 先前消息(以便訂閱者理解棋盤上所有棋子的當(dāng)前位置)的情況下這是毫無意義的。有益地,在操作消息中介的方法中,將消息標(biāo)識(shí)為消息序列的開始的步驟,包括 訪問接收到的消息的內(nèi)容,并且根據(jù)訪問的消息內(nèi)容將該消息標(biāo)識(shí)為消息序列的開始。消 息中介必須識(shí)別新消息序列何時(shí)開始。一種易于實(shí)現(xiàn)的方式是在接收消息的內(nèi)容中查看 消息內(nèi)容中的顯式或隱式標(biāo)記,該標(biāo)記指示該消息是新序列的開始。例如,發(fā)布者可以在消 息體內(nèi)包括預(yù)定標(biāo)志,向消息中介指示該消息是新序列的第一個(gè)消息。如果沒有標(biāo)志,消息 中介可以智能地配置為根據(jù)消息的內(nèi)容來確定該消息是序列的開始。例如,在上文圍繞棋 類游戲的移動(dòng)來維持的話題的示例中,例如“l(fā).e4”或者類似內(nèi)容的存在將指示新的序列。 標(biāo)識(shí)消息作為新序列的開始可以基于除消息內(nèi)容之外的某些信息,例如,基于發(fā)布者的位 置或者發(fā)送消息的時(shí)間(可能與發(fā)送先前消息的時(shí)間有關(guān))。優(yōu)選地,操作消息中介的方法還包括接收關(guān)于話題的又一消息;將該又一消息 標(biāo)識(shí)為消息序列的結(jié)束;以及向該話題的一個(gè)或多個(gè)已有訂閱者以及向話題的新注冊(cè)訂 閱者傳送所有將來的消息。消息中介還可以配置用于標(biāo)識(shí)序列的結(jié)束;以及有效地終 止與序列條件相關(guān)聯(lián)的特殊操作過程。一旦確定了結(jié)束,則所有訂閱者返回相同的基點(diǎn) (footing),并且將向所有訂閱者(不論新老)發(fā)送關(guān)于該話題而接收的任何新消息。如果 接收到另一個(gè)開始新序列的消息,則過程可以從頭開始。理想情況下,操作消息中介的方法還包括在將消息標(biāo)識(shí)為消息序列的開始的步 驟之后,創(chuàng)建對(duì)應(yīng)于該消息序列的新話題,并且使一個(gè)或多個(gè)已有訂閱者訂閱該新話題。這 繼而可以包括對(duì)于關(guān)于該話題接收的所有將來消息,確定是發(fā)布關(guān)于所述話題還是關(guān)于 所述新話題的每個(gè)消息。這是消息中介可以實(shí)現(xiàn)新訂閱者與已有消息序列的分離的一種方 式。消息中介創(chuàng)建對(duì)應(yīng)于消息序列的新的子話題,并且使一個(gè)或多個(gè)已有訂閱者訂閱該新 話題。接收到的與該序列有關(guān)的任何新消息都向子話題發(fā)布而不向原話題發(fā)布。該話題的 任何新訂閱者不訂閱子話題。
現(xiàn)在將通過示例的方式參考附圖來描述本發(fā)明的實(shí)施方式,其中圖1是發(fā)布/訂閱系統(tǒng)的示意圖;圖2是發(fā)布/訂閱系統(tǒng)的另一示意圖;圖3是操作發(fā)布/訂閱系統(tǒng)的消息中介的方法流程圖;圖4到圖6是發(fā)布/訂閱系統(tǒng)的第二實(shí)施方式的示意圖。
具體實(shí)施例方式圖1示出了發(fā)布/訂閱系統(tǒng)的一個(gè)簡(jiǎn)單實(shí)施方式。該系統(tǒng)包括消息中介10、發(fā)布 者12和兩個(gè)訂閱者14。消息中介10實(shí)現(xiàn)于服務(wù)器處,可經(jīng)由適當(dāng)網(wǎng)絡(luò)訪問該服務(wù)器。發(fā) 布者12和訂閱者14可以是能夠連接到運(yùn)行中介10的服務(wù)器的任何計(jì)算功能。發(fā)布者12 和訂閱者14可以是臺(tái)式計(jì)算機(jī),或者例如移動(dòng)電話或PDA之類的移動(dòng)設(shè)備。將連接設(shè)備指 定為發(fā)布者或訂閱者是一種邏輯狀態(tài),實(shí)際上任何連接設(shè)備在不同的時(shí)刻可以既是發(fā)布者
5又是和訂閱者。中介10維護(hù)話題16的列表,在此示例中話題是第一話題Tl和第二話題T2。通過已知的接口,連接設(shè)備可以發(fā)現(xiàn)由中介10維護(hù)的話題,并且可以根據(jù)期望加入和離開話 題。連接設(shè)備還可以創(chuàng)建話題,這取決于其相對(duì)于中介10所維護(hù)的適當(dāng)許可策略的狀態(tài)。 訂閱者Sl訂閱話題Tl和話題T2 二者。認(rèn)為中介10已經(jīng)將訂閱者14注冊(cè)到這些話題16。 與此不同,訂閱者S2僅僅是主題Tl的訂閱者。一般地,話題16具有指定性,諸如“游戲”, 其是較為描述性的,并且查詢?cè)掝}14存在的設(shè)備還可以發(fā)現(xiàn)關(guān)于話題14的信息。圖1示出了發(fā)布/訂閱系統(tǒng)的非常簡(jiǎn)單的實(shí)施方式,實(shí)際上,中介10將存儲(chǔ)非常 大量的話題及其訂閱者。中介10所存儲(chǔ)的每個(gè)訂閱者具有地址。此地址(諸如,IP地址) 定義了去往相關(guān)訂閱設(shè)備的路由。圖1中示出了消息18,該消息中包括有關(guān)于與其相關(guān)的話題的信息。在簡(jiǎn)單系統(tǒng) 中,向中介10發(fā)送的每個(gè)消息18將包含報(bào)頭和主體。報(bào)頭將包括或者包含話題指定(例 如,Tl),并且主體將包括消息18的文本。中介10提供消息18去往相關(guān)訂閱者14的路由。 在此情況下,由于消息18與話題Tl有關(guān),則中介10將消息18路由至兩個(gè)訂閱者Sl和S2。 一般地,中介10并不保持消息18的任何副本,盡管這可以通過對(duì)中介10的管理性訪問來 調(diào)整。例如,中介10可以存儲(chǔ)關(guān)于每個(gè)話題16的最后的消息18,以便向話題16的任何新 訂閱者發(fā)送該消息。圖2示出了在新訂閱者S3已經(jīng)訂閱話題Tl之后發(fā)布/訂閱系統(tǒng)發(fā)生的狀況。新 訂閱者14將通過向中介10發(fā)送適當(dāng)?shù)墓芾硐?,來向中?0注冊(cè)其希望訂閱話題Tl。從 圖中可見,中介10已經(jīng)在其列表16中關(guān)于該話題Tl注冊(cè)了新訂閱者。當(dāng)從發(fā)布者12接 收到新消息18’時(shí),中介10繼而向該話題的所有當(dāng)前訂閱者(訂閱者S1、S2和S3)分發(fā)該 消息18’。中介10所維護(hù)的列表16始終隨加入和離開特定話題14的訂閱者而改變。然而,標(biāo)準(zhǔn)消息收發(fā)中介的操作可以按照?qǐng)D3的流程圖加以改進(jìn)。這是因?yàn)樵跇?biāo) 準(zhǔn)配置中,新訂閱者14在其訂閱話題16之后,便同樣可以開始接收消息18,這將導(dǎo)致新訂 閱者14在其沒有接收到構(gòu)成序列較早部分的消息18時(shí)接收構(gòu)成該序列一部分的消息18。 可以想到,后一消息內(nèi)容可能擾亂后面的訂閱者14,或者可能是無意義的。為了應(yīng)對(duì)這一情 況,圖1和圖2的消息中介10被配置為按照?qǐng)D3的過程流程圖來操作。操作發(fā)布/訂閱中介的方法包括首先,在步驟Si,從發(fā)布者12接收關(guān)于話題16 的消息18 ;其次,在步驟S2,將消息18標(biāo)識(shí)為消息序列的開始。中介10必須將接收的消息 18標(biāo)識(shí)為新消息序列的開始。一種實(shí)現(xiàn)方案是中介10在接收的消息18中查看消息18內(nèi) 容中的標(biāo)記(其可能是顯式的或隱式的),該標(biāo)記指示該消息是新序列的開始。例如,消息18的原始發(fā)布者12可以按照預(yù)定的協(xié)議在消息的主體中包括標(biāo)志,該 標(biāo)志向消息中介10指示消息18是新消息序列的開始。如果沒有標(biāo)志,消息中介10可以 配置為根據(jù)消息的內(nèi)容(通過一個(gè)或多個(gè)處理算法)來確定消息18是消息序列的第一個(gè) 消息。例如,如果話題16是圍繞一個(gè)或多個(gè)棋類游戲而維護(hù)的,則例如“1. e4”或類似內(nèi)容 的存在將指示新序列已經(jīng)開始??梢曰谙?8的內(nèi)容之外的某些信息將消息標(biāo)識(shí)為新序列的開始。例如,消息 中介10可以配置為表示特定的發(fā)布者12作為消息18的新序列的源,在這種情況下,步驟 S2中對(duì)消息18的標(biāo)識(shí)基于發(fā)布者12的位置。中介10實(shí)現(xiàn)的其他可行方案可以涉及發(fā)送消息的時(shí)間,不論是作為絕對(duì)時(shí)間(一天中的第一個(gè)消息)或者相對(duì)時(shí)間(例如,關(guān)于發(fā)送 先前消息的時(shí)間)在接收到消息18之后,在步驟S3,消息中介10被安排為向話題16的(一個(gè)或多 個(gè))已有訂閱者14傳送消息18。此時(shí),中介10對(duì)接收到的消息的處理就像它是普通消息 18—樣,并且將該消息18傳送至已注冊(cè)相應(yīng)話題16的所有當(dāng)前訂閱者14。實(shí)際上,如果 沒有新訂閱者14在消息18的序列開始之后加入話題16,則消息中介10的操作不做改變。然而,在步驟S4,消息中介10向話題16注冊(cè)新的訂閱者14。一旦向話題16添加 了新的訂閱者14,則在步驟S5,當(dāng)從發(fā)布者12接收到關(guān)于話題16的進(jìn)一步消息18時(shí),消 息中介10被安排為向話題16的已有訂閱者14、但是不向話題16的新注冊(cè)訂閱者14傳送 (步驟S6)該進(jìn)一步消息18。實(shí)際上,在新序列開始之后加入話題16的訂閱者14將不會(huì) 接收到關(guān)于話題16的任何進(jìn)一步消息18。只有已有訂閱者14將接收到新消息18。中介10還被安排為接收關(guān)于話題16的又一消息18,以將該又一消息18標(biāo)識(shí)為消 息序列的結(jié)束,并且向話題16的已有訂閱者14以及向話題16的新注冊(cè)訂閱者14傳送關(guān) 于話題16的所有將來的消息18。中介10實(shí)現(xiàn)關(guān)閉序列并且返回常規(guī)操作模式的過程。在 檢測(cè)到序列的結(jié)束消息之后,在序列進(jìn)行的同時(shí)向話題16注冊(cè)的一個(gè)或多個(gè)新訂閱者14 現(xiàn)在將會(huì)接收到向話題16發(fā)布的所有新消息18。中介10可以配置為實(shí)現(xiàn)已有訂閱者與新訂閱者分離的一種方式是在后臺(tái)創(chuàng)建 新的子話題以管理序列。發(fā)布者12和訂閱者14并不知道子話題的存在,但是在將消息18 標(biāo)識(shí)為消息序列開始的步驟(步驟S2)之后,中介10被安排為創(chuàng)建對(duì)應(yīng)于消息序列的新話 題,并且使一個(gè)或多個(gè)已有訂閱者14訂閱該新話題。參考圖4描述這是如何工作的概述。在該圖中,訂閱者Sl已經(jīng)訂閱了名為“游戲” 的話題16。中介10對(duì)于訂閱者Sl訂閱話題16進(jìn)行注冊(cè)。發(fā)布者Pl繼而向話題“游戲” 發(fā)布為游戲1的第一消息18。中介10接收發(fā)布的消息18,并將此消息18標(biāo)識(shí)為消息18的 新序列的開始。實(shí)際上,中介10將創(chuàng)建新的子話題20,并且將把消息18發(fā)布在名為“游戲 /游戲1”的子話題20上。在發(fā)送發(fā)布的消息18之前,中介10為所有已有訂閱者14(即, 訂閱者Si)創(chuàng)建對(duì)于子話題20的訂閱。訂閱者Sl現(xiàn)在訂閱話題“游戲”和子話題“游戲/ 游戲1”,并且接收針對(duì)游戲1的第一發(fā)布消息18。圖5示出了在新訂閱者S2訂閱話題“游戲”時(shí)將發(fā)生的狀況。中介10注冊(cè)訂閱 者S2對(duì)話題“游戲”的訂閱,但是不注冊(cè)對(duì)子話題20的訂閱,當(dāng)消息中介10注冊(cè)新訂閱者 S2時(shí)該子話題20已經(jīng)存在和運(yùn)行。當(dāng)發(fā)布者Pl向話題“游戲”發(fā)布針對(duì)游戲1的進(jìn)一步 消息18時(shí),中介10接收發(fā)布的消息10,并且將其發(fā)布至話題“游戲/游戲1 ”。已有訂閱者 (Si)接收到新消息18,但是新訂閱者S2沒有接收到。訂閱者Sl接收到針對(duì)游戲1的第二 消息,訂閱者S2沒有接收到??赡馨l(fā)生消息序列的嵌套。例如,新消息序列可以在第一序列進(jìn)行的同時(shí)作為新 的子話題20開始。這在圖6中示出。在此示例中,發(fā)布者P2向話題“游戲”發(fā)布針對(duì)游戲 2的第一消息18。中介10接收發(fā)布的消息18,并且將消息18標(biāo)識(shí)為消息18的新序列的 開始,并因此創(chuàng)建第二子話題20。中介10實(shí)際上將把消息發(fā)布在話題“游戲/游戲2”上。 在發(fā)送發(fā)布的消息18之前,中介創(chuàng)建所有已有訂閱者(S卩,訂閱者Sl和訂閱者S2)對(duì)子話 題“游戲/游戲2”的訂閱。訂閱者Sl現(xiàn)在訂閱話題“游戲”以及子話題“游戲/游戲1”和“游戲/游戲2”,而訂閱者S2現(xiàn)在訂閱話題“游戲”和子話題“游戲/游戲2”。訂閱者Sl 和訂閱者S2 二者都接收針對(duì)游戲2的第一消息18。
存在多種方式可以確定子話題20的名稱。例如,其可以是可在中介10上管理的, 或者是基于消息18的指示新序列開始的時(shí)間戳(實(shí)際上,由于子話題20的名稱不需要是 人類可讀的,所以名稱可以包括字符的任何配置)。存在多種實(shí)現(xiàn)和擴(kuò)展的方式。注意,所 有情境都是以每個(gè)話題為基礎(chǔ)的,不允許進(jìn)行關(guān)于多個(gè)話題的消息序列(就任何客戶端的 所知,顯然中介使用不同的話題)。存在多種方式來確定消息序列的開始和結(jié)束。例如,可以通過發(fā)布者客戶端ID來 分割消息序列。在這種情況下,發(fā)布者不知道消息序列,并且不需要對(duì)目前的發(fā)布者實(shí)現(xiàn)做 出改變。另一方法可以允許發(fā)布者對(duì)中介10進(jìn)行API調(diào)用,以指定消息序列的開始和結(jié)束 (發(fā)布者每次可以管理單個(gè)消息序列)。第三種備選方案是允許發(fā)布者在消息報(bào)頭中指定 序列ID,這允許發(fā)布者同時(shí)管理可能交錯(cuò)的多個(gè)消息序列。注意,中介可能要求用于獲得唯 一序列ID的方法避免沖突。可以基于多個(gè)策略確定何時(shí)將訂閱者從話題重定向到子話題。例如,訂閱者訂閱 所有隨后創(chuàng)建的子話題,直到他們從根據(jù)其創(chuàng)建子話題的(主)話題退訂。訂閱者并不知 道任何重定向,并且實(shí)際上通過單個(gè)已知訂閱對(duì)多個(gè)話題進(jìn)行了訂閱,即,不改變當(dāng)前訂閱 者實(shí)現(xiàn)。備選地,訂閱者僅訂閱下一新創(chuàng)建的子話題(此時(shí),移除其主訂閱),訂閱者仍然不 知道任何重定向,即,不改變當(dāng)前訂閱者實(shí)現(xiàn)。訂閱者可以選擇上述之一作為API訂閱調(diào)用 的一部分,在這種情況下,訂閱者知道發(fā)生了話題重定向,但是不知道他們被重定向到的實(shí) 際話題。在本發(fā)明的使用子話題20的實(shí)施方式中,一旦已經(jīng)創(chuàng)建了子話題20,訂閱者14可 以從基礎(chǔ)(base)話題16退訂。這為訂閱者14提供了有用的特征。例如,對(duì)消息中介10 操作的一個(gè)擴(kuò)展將是使訂閱者14知悉此特征,并且允許訂閱者有效地指示消息中介10 “訂閱基礎(chǔ)話題上的第一事務(wù),我不想了解未來的事務(wù),只要第一事務(wù)”,這將是對(duì)中介10的 指令,即,只要?jiǎng)?chuàng)建了新的子話題20并且將他們向其該子話題20進(jìn)行了自動(dòng)訂閱,便移除 他們對(duì)基礎(chǔ)話題16的訂閱。類似于現(xiàn)有發(fā)布/訂閱系統(tǒng),為了訂閱者在斷開之后保持其實(shí)際訂閱,訂閱必須 是可持續(xù)的。重新連接的非可持續(xù)訂閱者將不會(huì)被重定向到任何先前的子話題。當(dāng)訂閱者 從主話題退訂時(shí),所有相關(guān)聯(lián)的子話題訂閱也必須被移除。注意,這些關(guān)聯(lián)必須由中介來維 護(hù)。對(duì)于主要配置的其他擴(kuò)展是可能的。例如,系統(tǒng)可以這樣布置,使得發(fā)布者可以向 多個(gè)訂閱者指明應(yīng)當(dāng)重定向到子話題。發(fā)布者指定一個(gè)(或η個(gè))且只有一個(gè)(或η個(gè)) 訂閱者接收給定的消息序列可能是有益的。
權(quán)利要求
一種操作發(fā)布/訂閱消息中介的方法,包括從發(fā)布者接收關(guān)于話題的消息;將所述消息標(biāo)識(shí)為消息序列的開始;向所述話題的一個(gè)或多個(gè)已有訂閱者傳送所述消息;響應(yīng)于新訂閱者注冊(cè)所述話題以及從發(fā)布者接收到關(guān)于所述話題的、與所述序列相關(guān)聯(lián)的進(jìn)一步消息,向所述話題的所述一個(gè)或多個(gè)已有訂閱者傳送所述進(jìn)一步消息,但是不向已注冊(cè)所述話題的新訂閱者傳送所述進(jìn)一步消息。
2.根據(jù)權(quán)利要求1所述的方法,其中將所述消息標(biāo)識(shí)為消息序列的開始的步驟包括 訪問所接收消息的內(nèi)容,以及按照訪問的消息內(nèi)容來將所述消息標(biāo)識(shí)為消息序列的開始。
3.根據(jù)權(quán)利要求1或2所述的方法,還包括接收關(guān)于所述話題的又一消息;將所述又 一消息標(biāo)識(shí)為所述消息序列的結(jié)束;以及向所述話題的所述一個(gè)或多個(gè)已有訂閱者以及已 注冊(cè)所述話題的新訂閱者傳送關(guān)于所述話題的、與所述序列不相關(guān)聯(lián)的每個(gè)進(jìn)一步消息。
4.根據(jù)任一前述權(quán)利要求所述的方法,還包括響應(yīng)于接收到與所述序列不相關(guān)聯(lián)的 消息,創(chuàng)建與所述消息相關(guān)聯(lián)且與所述序列不相關(guān)聯(lián)的新話題;以及使所述新訂閱者訂閱 所述新話題。
5.根據(jù)任一前述權(quán)利要求所述的方法,還包括在將所述消息標(biāo)識(shí)為消息序列的開始 的步驟之后,創(chuàng)建對(duì)應(yīng)于所述消息序列的新話題,以及使所述一個(gè)或多個(gè)已有訂閱者訂閱 所述新話題。
6.根據(jù)權(quán)利要求4或5所述的方法,還包括針對(duì)接收到的關(guān)于所述話題的消息,確定 發(fā)布關(guān)于所述話題的消息還是關(guān)于所述新話題的消息。
7.一種發(fā)布/訂閱消息中介,被安排為從發(fā)布者接收關(guān)于話題的消息;將所述消息標(biāo)識(shí)為消息序列的開始;向所述話題的一個(gè)或多個(gè)已有訂閱者傳送所述消息;以及響應(yīng)于新訂閱者注冊(cè)所述話題以及響應(yīng)于從發(fā)布者接收到關(guān)于所述話題的、與所述序 列相關(guān)聯(lián)的進(jìn)一步消息,向所述話題的所述一個(gè)或多個(gè)已有訂閱者傳送所述進(jìn)一步消息, 但是不向已注冊(cè)所述話題的新訂閱者傳送所述進(jìn)一步消息。
8.根據(jù)權(quán)利要求7所述的消息中介,其中所述消息中介被安排為在將所述消息標(biāo)識(shí) 為消息序列的開始時(shí),訪問所接收消息的內(nèi)容,以及按照訪問的消息內(nèi)容來將所述消息標(biāo) 識(shí)為消息序列的開始。
9.根據(jù)權(quán)利要求7或8所述的消息中介,其中所述消息中介還被安排為接收關(guān)于所 述話題的又一消息;將所述又一消息標(biāo)識(shí)為所述消息序列的結(jié)束;以及向所述話題的所述 一個(gè)或多個(gè)已有訂閱者以及已注冊(cè)所述話題的新訂閱者傳送關(guān)于所述話題的、與所述序列 不相關(guān)聯(lián)的每個(gè)進(jìn)一步消息。
10.根據(jù)權(quán)利要求7-9中任一項(xiàng)所述的消息中介,其中所述消息中介還被安排為響應(yīng) 于接收到與所述序列不相關(guān)聯(lián)的消息,創(chuàng)建與所述消息相關(guān)聯(lián)且與所述序列不相關(guān)聯(lián)的新 話題;以及使所述新訂閱者訂閱所述新話題。
11.根據(jù)權(quán)利要求7-10中任一項(xiàng)所述的消息中介,其中所述消息中介還被安排為在 將所述消息標(biāo)識(shí)為消息序列的開始之后,創(chuàng)建對(duì)應(yīng)于所述消息序列的新話題,以及使所述一個(gè)或多個(gè)已有訂閱者訂閱所述所述新話題。
12.根據(jù)權(quán)利要求10或11所述的消息中介,其中所述消息中介還被安排為針對(duì)接收 到的關(guān)于所述話題的消息,確定是發(fā)布關(guān)于所述話題的消息還是關(guān)于所述新話題的消息。
13.一種計(jì)算機(jī)可讀介質(zhì)上的計(jì)算機(jī)程序產(chǎn)品,用于操作發(fā)布/訂閱消息中介,所述產(chǎn) 品包括用于以下的指令從發(fā)布者接收關(guān)于話題的消息;將所述消息標(biāo)識(shí)為消息序列的開始;向所述話題的一個(gè)或多個(gè)已有訂閱者傳送所述消息;響應(yīng)于新訂閱者注冊(cè)所述話題以及從發(fā)布者接收到關(guān)于所述話題的、與所述序列相關(guān) 聯(lián)的進(jìn)一步消息,向所述話題的所述一個(gè)或多個(gè)已有訂閱者傳送所述進(jìn)一步消息,但是不 向已注冊(cè)所述話題的新訂閱者傳送所述進(jìn)一步消息。
14.根據(jù)權(quán)利要求13所述的計(jì)算機(jī)程序產(chǎn)品,其中用于將所述消息標(biāo)識(shí)為消息序列的 開始的指令包括用于以下的指令訪問所接收消息的內(nèi)容,以及按照訪問的消息內(nèi)容來將 所述消息標(biāo)識(shí)為消息序列的開始。
15.根據(jù)權(quán)利要求13或14所述的計(jì)算機(jī)程序產(chǎn)品,還包括用于以下的指令接收關(guān)于 所述話題的又一消息;將所述又一消息標(biāo)識(shí)為所述消息序列的結(jié)束;以及向所述話題的所 述一個(gè)或多個(gè)已有訂閱者以及已注冊(cè)所述話題的新訂閱者傳送關(guān)于所述話題的、與所述序 列不相關(guān)聯(lián)的每個(gè)進(jìn)一步消息。
16.根據(jù)權(quán)利要求13-15中任一項(xiàng)所述的計(jì)算機(jī)程序產(chǎn)品,還包括用于以下的指令響 應(yīng)于接收到與所述序列不相關(guān)聯(lián)的消息,創(chuàng)建與所述消息相關(guān)聯(lián)且與所述序列不相關(guān)聯(lián)的 新話題;以及使所述新訂閱者訂閱所述新話題。
17.根據(jù)權(quán)利要求13-16中任一項(xiàng)所述的計(jì)算機(jī)程序產(chǎn)品,還包括用于以下的指令在 將所述消息標(biāo)識(shí)為消息序列的開始的步驟之后,創(chuàng)建對(duì)應(yīng)于所述消息序列的新話題,以及 使所述一個(gè)或多個(gè)已有訂閱者訂閱所述新話題。
18.根據(jù)權(quán)利要求16或17所述的計(jì)算機(jī)程序產(chǎn)品,還包括用于以下的指令針對(duì)接收 到的關(guān)于所述話題的消息,確定是發(fā)布關(guān)于所述話題的消息還是關(guān)于所述新話題的消息。
19.一種用于與發(fā)布/訂閱消息中介結(jié)合使用的裝置,包括接收組件,用于從發(fā)布者接收關(guān)于話題的消息;標(biāo)識(shí)組件,用于將所述消息標(biāo)識(shí)為消息序列的開始;第一傳送器,用于向所述話題的一個(gè)或多個(gè)已有訂閱者傳送所述消息;以及第二傳送器,用于響應(yīng)于新訂閱者注冊(cè)所述話題以及響應(yīng)于從發(fā)布者接收到關(guān)于所述 話題的、與所述序列相關(guān)聯(lián)的進(jìn)一步消息,向所述話題的所述一個(gè)或多個(gè)已有訂閱者傳送 所述進(jìn)一步消息,但是不向已注冊(cè)所述話題的新訂閱者傳送所述進(jìn)一步消息。
全文摘要
一種操作發(fā)布/訂閱消息中介的方法,包括從發(fā)布者接收關(guān)于話題的消息;將該消息標(biāo)識(shí)為消息序列的開始;向該話題的一個(gè)或多個(gè)已有訂閱者傳送該消息;使新訂閱者注冊(cè)該話題;從發(fā)布者接收關(guān)于該話題的進(jìn)一步消息;以及向該話題的一個(gè)或多個(gè)已有訂閱者傳送所述進(jìn)一步消息,但是不向已注冊(cè)該話題的新訂閱者傳送該進(jìn)一步消息。一種實(shí)現(xiàn)方式是,在將消息標(biāo)識(shí)為消息序列開始的步驟之后,消息中介創(chuàng)建對(duì)應(yīng)于該消息序列的新子話題,并且使一個(gè)或多個(gè)已有訂閱者訂閱該新話題。接收到的任何與該序列有關(guān)的新消息被發(fā)布至子話題而不是原話題。該話題的任何新訂閱者不訂閱該子話題。
文檔編號(hào)H04L29/08GK101960825SQ200980107504
公開日2011年1月26日 申請(qǐng)日期2009年2月25日 優(yōu)先權(quán)日2008年3月5日
發(fā)明者G·E·瓊斯, M·R·懷特黑德 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司