專(zhuān)利名稱(chēng):控制發(fā)布保持的方法以及發(fā)布/訂購(gòu)代理器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)處理網(wǎng)絡(luò)內(nèi)的通信與數(shù)據(jù)存儲(chǔ)管理,更具體地,本發(fā)明 提供用于在發(fā)布/訂購(gòu)消息環(huán)境中控制消息的保持的設(shè)備、方法和計(jì)算機(jī)程 序。
背景技術(shù):
在消息網(wǎng)絡(luò)中,消息可以經(jīng)由提供路由的、以及在多種情況下提供轉(zhuǎn)換 和其它服務(wù)的一個(gè)或多個(gè)"消息代理器",從一個(gè)數(shù)據(jù)處理系統(tǒng)傳遞到另一個(gè) 數(shù)據(jù)處理系統(tǒng)。雖然可以在分布式代理器網(wǎng)絡(luò)內(nèi)的各個(gè)點(diǎn)實(shí)現(xiàn)代理器功能, 但是代理器通常位于網(wǎng)絡(luò)內(nèi)的通信集線器處。
多個(gè)消息代理器支持發(fā)布/訂購(gòu)?fù)ㄐ欧独?。這包括發(fā)布器發(fā)送能夠由已經(jīng) 在接收該類(lèi)型的通信中注冊(cè)他們的興趣的一組訂購(gòu)器所接收的通信,發(fā)布應(yīng) 用通常不需要知道是哪個(gè)訂購(gòu)器對(duì)其感興趣。發(fā)布/訂購(gòu)允許訂購(gòu)器接收感興 趣區(qū)域(例如,股票價(jià)格或者諸如新聞短訊或者特殊報(bào)價(jià)的事件)中的最新 信息,而不需要非得積極主動(dòng)地并且重復(fù)地向每個(gè)發(fā)布器請(qǐng)求該信息。
一般的發(fā)布/訂購(gòu)環(huán)境具有多個(gè)發(fā)布器應(yīng)用,其經(jīng)由代理器通過(guò)網(wǎng)絡(luò)向位 于遠(yuǎn)程設(shè)備上的潛在的多個(gè)訂購(gòu)器應(yīng)用發(fā)送消息。因?yàn)橥ㄟ^(guò)中間代理器的通 信不要求每個(gè)發(fā)布器和每個(gè)訂購(gòu)器之間的專(zhuān)用連接,所以發(fā)布器與訂購(gòu)器之 間是分離的,這與緊緊連接的傳統(tǒng)的客戶(hù)機(jī)一服務(wù)器范例相比,大大地簡(jiǎn)化 了網(wǎng)絡(luò)布局。訂購(gòu)器向代理器注冊(cè),以及識(shí)別他們想要為其接收發(fā)布消息的 信息的種類(lèi),并且將該信息存儲(chǔ)在代理器。在多個(gè)發(fā)布/訂購(gòu)的實(shí)施方式中, 訂購(gòu)器指定表示他們想要接收的信息的一個(gè)或多個(gè)主題名稱(chēng)。當(dāng)發(fā)布器發(fā)送 他們的消息到代理器時(shí),發(fā)布器給消息分配主題名稱(chēng),并且代理器使用匹配 引擎來(lái)對(duì)所接收的消息的主題與它所存儲(chǔ)的注冊(cè)訂購(gòu)器的訂購(gòu)信息進(jìn)行比 較。這個(gè)比較確定該消息應(yīng)該轉(zhuǎn)發(fā)給哪個(gè)訂購(gòu)器。主題常常被分層地指定,
例如使用字符串格式"root/levelltopicName/level2topicName,,,以使能使用迭 代遍歷主題分層的匹配算法來(lái)對(duì)所接收消息中指定的主題與訂購(gòu)進(jìn)行比較。
訂購(gòu)能夠與主題樹(shù)內(nèi)的結(jié)點(diǎn)相關(guān)聯(lián)。
雖然訂購(gòu)匹配常常包括檢驗(yàn)消息標(biāo)題內(nèi)的主題字段,但是匹配可以附加 地或者另外地包括檢驗(yàn)其它消息標(biāo)題字段或者檢驗(yàn)消息內(nèi)容,以及基于附加
信息而過(guò)濾消息。例如,實(shí)現(xiàn)JavaTM Message Service ( JMS )的消息代理器 通常允許基于消息屬性(而不是基于是消息內(nèi)容或"有效載荷"的應(yīng)用數(shù)據(jù)) 而過(guò)濾。消息代理器可以執(zhí)行附加功能,例如執(zhí)行數(shù)據(jù)內(nèi)容或者格式變換, 或者相反,在轉(zhuǎn)發(fā)它們給訂購(gòu)器之前處理接收消息。(Java和所有基于Java 的商沖示是Sun Microsystems ^^司的商才示)。
支持發(fā)布/訂購(gòu)范例以及允許按消息內(nèi)容過(guò)濾的、市場(chǎng)上可得到的消息代 理器產(chǎn)品的示例是IBM公司的WebSphere Message Broker,如2006年7月在 IBM 乂i^司的文葉牛"IBM WebSphere Message Broker Version 6 Release 0 -Introduction"和2006年7月在IBM公司的"IBM WebSphere Message Broker Version 6 Release 0 — Publish7Subscribe,,中所描述的。消息代理器可以與處理 通過(guò)異類(lèi)網(wǎng)絡(luò)提供可靠消息傳遞的復(fù)雜性的下層消息傳遞產(chǎn)品相關(guān)聯(lián)。IBM 公司的WebSphere MQ消息產(chǎn)品是提供這樣的消息功能的產(chǎn)品示例,并在包 括2005年6月在IBM發(fā)布的參考編號(hào)GC34—65卯一Ol"WebSphere MQ Clients"的IBM公司的多個(gè)發(fā)布文件中得到描述。(IBM和WebSphere是國(guó)際 商業(yè)機(jī)器公司的注冊(cè)商標(biāo))。
發(fā)布/訂購(gòu)范例是傳播信息到多個(gè)用戶(hù)的有效方法,并且對(duì)發(fā)布器和/或訂 購(gòu)器的組能夠隨時(shí)間改變以及對(duì)發(fā)布器和/或訂購(gòu)器的數(shù)量很大的環(huán)境尤其 有用。 一些訂購(gòu)僅僅當(dāng)訂購(gòu)應(yīng)用連接到代理器時(shí)保持為活動(dòng)的。這些訂購(gòu)被 稱(chēng)為是"非持久的"。因?yàn)?非持久的"訂購(gòu)器很可能錯(cuò)過(guò)多個(gè)想要的發(fā)布,所 以許多其它訂購(gòu)是"持久的"并且保持活動(dòng)的,直到該訂購(gòu)應(yīng)用明確地取消訂 購(gòu)時(shí)為止。當(dāng)訂購(gòu)器重連接時(shí),為了檢索,在代理器處擁有匹配未連接的"持 久,,訂購(gòu)器的訂購(gòu)的發(fā)布。當(dāng)"持久"訂購(gòu)器不再希望接收發(fā)布時(shí),訂購(gòu)器能夠 從代理器取消訂購(gòu)(或者取消訂購(gòu)特定的主題或者主題組)。
雖然該訂購(gòu)和取消訂購(gòu)的能力使持久訂購(gòu)器在他們所接收的發(fā)布的控制 之下,但是通常在每個(gè)訂購(gòu)器的執(zhí)行一在代理器處開(kāi)始訂購(gòu)和取消訂購(gòu)操作 -中存在一些等待時(shí)間。在依賴(lài)于低帶寬或者訂購(gòu)器與代理器之間的不可靠 連接的通信環(huán)境中,在訂購(gòu)器能夠獲得任何發(fā)布之前,等待時(shí)間會(huì)導(dǎo)致顯著 的延遲。在訂購(gòu)操作之后,在代理器接收匹配新訂購(gòu)器的訂購(gòu)的任何發(fā)布之
前,也可能存在相當(dāng)大的延遲。對(duì)于一些訂購(gòu)器應(yīng)用,這樣的延遲將是可接
受的;但是一些訂購(gòu)器應(yīng)用盡可能快地需要發(fā)布的信息。
在發(fā)布已經(jīng)被轉(zhuǎn)發(fā)到當(dāng)前注冊(cè)的訂購(gòu)器的組之后, 一些發(fā)布/訂購(gòu)代理器 刪除每個(gè)發(fā)布。用這樣的代理器,在每個(gè)訂購(gòu)器通過(guò)代理器注冊(cè)各個(gè)訂購(gòu)信 息之后,他們僅僅接收通過(guò)該代理器所收到的發(fā)布。然而, 一些發(fā)布/訂購(gòu)代 理器實(shí)現(xiàn)可選的"保持"策略,由此,代理器保持由代理器收到的適合于某主 題的最新發(fā)布的副本(通常每個(gè)主題只保持一條消息)。這樣的保持發(fā)布可以 保存在代理器的高速緩沖存儲(chǔ)器或其它存儲(chǔ)器中。這對(duì)于希望快速接收他們 感興趣的主題的最新發(fā)布的新訂購(gòu)器來(lái)說(shuō)是有用的 一不需要必須等待將要由 各個(gè)發(fā)布器發(fā)送的新發(fā)布一以及對(duì)于不常見(jiàn)的發(fā)布的主題的訂購(gòu)器來(lái)說(shuō)也是 有用的。
舉例來(lái)說(shuō),考慮正在移動(dòng)電話或者PDA上運(yùn)行的貨幣轉(zhuǎn)換器應(yīng)用。該應(yīng) 用需要發(fā)布外幣兌換率來(lái)執(zhí)行貨幣轉(zhuǎn)換。當(dāng)最新調(diào)用貨幣轉(zhuǎn)換器應(yīng)用時(shí),信 任不同工作日發(fā)布的兌換率,^艮容易產(chǎn)生錯(cuò)誤,因此該應(yīng)用需要從發(fā)布/訂購(gòu) 代理器處獲得最新的兌換率信息。然而,用戶(hù)可能不想等待兌換率發(fā)布器發(fā) 出他們的下一次廣播發(fā)布。因?yàn)橄乱淮伟l(fā)布的兌換率信息可能是不可接受的, 所以該應(yīng)用用戶(hù)可能設(shè)法快速做出關(guān)于是否購(gòu)買(mǎi)商品、等待幾分鐘或者甚至 幾秒鐘的決定。如果代理器保持它已經(jīng)接收的最新兌換率發(fā)布,則一旦他們 訂購(gòu),這就能夠被轉(zhuǎn)發(fā)到新訂購(gòu)的貨幣轉(zhuǎn)換器應(yīng)用,而不需要等待發(fā)布器的 下一次發(fā)布。
在保持發(fā)布的典型實(shí)施方式中,發(fā)布器設(shè)置保持標(biāo)志,而代理器通過(guò)保 持該發(fā)布來(lái)響應(yīng)該保持標(biāo)志。發(fā)布器還可以指定保持發(fā)布的終止時(shí)間(在其 之后發(fā)布數(shù)據(jù)無(wú)效或者無(wú)用)。當(dāng)?shù)竭_(dá)終止時(shí)間時(shí),代理器刪除保持消息。
在其它應(yīng)用中,新訂購(gòu)器不僅僅接收最后發(fā)布是有用的。累積信息或許 比僅僅看單個(gè)發(fā)布更有用。該問(wèn)題的一個(gè)解決辦法是除發(fā)布/訂購(gòu)消息代理器 之外,還使用重放服務(wù)器。重放服務(wù)器保持大量數(shù)據(jù),使得以前發(fā)布的消息 是可獲得的,并且如果需要時(shí)能夠被檢索到,但是相關(guān)聯(lián)的處理和存儲(chǔ)開(kāi)銷(xiāo) 相對(duì)應(yīng)地大。重放服務(wù)器是獨(dú)立于發(fā)布/訂購(gòu)代理器的實(shí)體,因此結(jié)合訂購(gòu)匹 配和內(nèi)容以及代理器的形式轉(zhuǎn)換是一項(xiàng)重要的任務(wù)。
另 一可能的解決辦法是代理器為每個(gè)主題保持預(yù)定數(shù)量N的發(fā)布。然而, 依賴(lài)于預(yù)定數(shù)量是不靈活的,仍然存在如何決定適當(dāng)?shù)腘值的問(wèn)題(平衡存
儲(chǔ)開(kāi)銷(xiāo)與給新訂購(gòu)器保持發(fā)布的收益)。預(yù)定值N對(duì)于標(biāo)識(shí)哪些發(fā)布組具有
累積顯著性并且應(yīng)該集中在一起、以及哪些發(fā)布應(yīng)該獨(dú)立地處理是沒(méi)有用的。 典型的發(fā)布/訂購(gòu)代理器忽視發(fā)布之間的潛在關(guān)系,因此具有累積顯著性的發(fā) 布的分組目前依賴(lài)于訂購(gòu)器應(yīng)用的分析。
發(fā)明內(nèi)容
本發(fā)明第 一 方面提供 一種用于在發(fā)布/訂購(gòu)系統(tǒng)中對(duì)發(fā)布的保持進(jìn)行控 制的方法。該方法包括發(fā)布器發(fā)送新發(fā)布,該新發(fā)布標(biāo)記是否應(yīng)該與以前的 保持發(fā)布一起保持該新發(fā)布。發(fā)布/訂購(gòu)代理器通過(guò)與以前的保持發(fā)布一起保 持新發(fā)布來(lái)響應(yīng)這樣的標(biāo)記。
在優(yōu)選的實(shí)施例中,新發(fā)布的內(nèi)容或者"有效載荷"能夠添加到以前的保 持發(fā)布上,從而導(dǎo)致含有附加信息的單個(gè)保持發(fā)布。這對(duì)于代理器和新訂購(gòu) 器兩者都具有潛在的優(yōu)點(diǎn)。第一,由于標(biāo)題信息的復(fù)制,具有多個(gè)發(fā)布所建 立的內(nèi)容的單個(gè)保持發(fā)布所需要的存儲(chǔ)量往往小于包含同樣數(shù)據(jù)內(nèi)容的多個(gè) 保持發(fā)布所需要的存儲(chǔ)量。第二, 一旦代理器已經(jīng)執(zhí)行添加操作,則代理器 的存儲(chǔ)管理和數(shù)據(jù)存取操作比代理器總是需要追蹤一組相關(guān)聯(lián)的保持發(fā)布時(shí) 的簡(jiǎn)單。第三,使用傳統(tǒng)技術(shù)能夠給新訂購(gòu)器提供單個(gè)保持發(fā)布,然而如果 添加新內(nèi)容到保持發(fā)布,則訂購(gòu)器將獲得一組發(fā)布的信息內(nèi)容。如果該組發(fā) 布具有累積顯著性,則添加信息可以導(dǎo)致單個(gè)保持發(fā)布,其對(duì)于新訂購(gòu)器來(lái) 說(shuō)比僅僅保持有關(guān)每個(gè)主題的最新發(fā)布的常規(guī)方法更有用。
在基于主題的發(fā)布/訂購(gòu)系統(tǒng)中,發(fā)布器給出的關(guān)于發(fā)布保持的標(biāo)記可以 包括發(fā)布器指定的指令,其用于代理器添加新發(fā)布的內(nèi)容到適合于各個(gè)發(fā)布 主題的最新保持發(fā)布上。在發(fā)布器系統(tǒng)內(nèi),例如,該新能力可以實(shí)現(xiàn)為新的
API調(diào)用或者適合于由發(fā)布器應(yīng)用使用的可選屬性。在該實(shí)施例中,發(fā)布器 API通過(guò)向標(biāo)題信息或者發(fā)布消息的內(nèi)容增加添加指令來(lái)響應(yīng)新API調(diào)用或 者屬性。
同時(shí),代理器優(yōu)選地實(shí)現(xiàn)保持管理器,其響應(yīng)于"添加"指令或者另一累 積保持指令而實(shí)現(xiàn)新功能。具體地,發(fā)布/訂購(gòu)代理器可以通過(guò)向代理器的存 儲(chǔ)庫(kù)中的各個(gè)保持發(fā)布中增加新發(fā)布(優(yōu)選地,僅僅新發(fā)布的內(nèi)容或者"有效 載荷")來(lái)響應(yīng)添加指令。優(yōu)選地,代理器還響應(yīng)"不添加"指令(或者沒(méi)有"添 加,,指令)來(lái)刷新以前的保持發(fā)布。然后代理器可以保持發(fā)送給具有不添加指
令的代理器的新發(fā)布。
根據(jù)本發(fā)明的一個(gè)實(shí)施例,包含添加指令的新發(fā)布被分別添加到用于各 個(gè)發(fā)布主題的當(dāng)前保持發(fā)布上,直到接收到不包含添加指令的新發(fā)布時(shí)為止。 然后,以前保持的發(fā)布由新的"不添加"發(fā)布所覆蓋。然后能夠如前所述添加 隨后的發(fā)布。
在另一實(shí)施例中,響應(yīng)于發(fā)布器指示一起保持某些消息的愿望,在代理 器中累積一組發(fā)布消息作為分離的但是相關(guān)聯(lián)的消息。這樣具有以與原來(lái)發(fā) 布相同的形式保持消息的優(yōu)點(diǎn),而代理器不需要必須創(chuàng)建具有添加內(nèi)容的修 改消息,因此代理器不需要花很大的努力就能管理最初轉(zhuǎn)發(fā)(到第一組訂購(gòu) 器)的消息和隨后轉(zhuǎn)發(fā)給新訂購(gòu)器的加上添加內(nèi)容的消息之間的潛在的差異。
關(guān)于是否添加相關(guān)消息內(nèi)容到單個(gè)保持發(fā)布或者是否保持一組相關(guān)的但 是分離的消息的決定將取決于特定應(yīng)用的需要。
本發(fā)明的第二方面提供一種用于發(fā)布/訂購(gòu)?fù)ㄐ啪W(wǎng)絡(luò)的發(fā)布/訂購(gòu)代理器。
該代理器包括從發(fā)布器接收發(fā)布的裝置;標(biāo)識(shí)發(fā)布器指定的、是否應(yīng)該與 以前的保持發(fā)布相關(guān)聯(lián)地保持該發(fā)布的標(biāo)記的裝置;和響應(yīng)于發(fā)布器指定的 標(biāo)記,與以前的保持發(fā)布相關(guān)聯(lián)地保持新發(fā)布的裝置。
本發(fā)明的第三方面提供一種在通信網(wǎng)絡(luò)內(nèi)發(fā)布消息到發(fā)布/訂購(gòu)代理器 的消息客戶(hù)機(jī),該發(fā)布/訂購(gòu)消息客戶(hù)機(jī)包括用于調(diào)用向發(fā)布/訂購(gòu)代理器發(fā) 送消息的操作的裝置;以及用于在消息內(nèi)指定應(yīng)該由代理器與以前保持的消 息相關(guān)聯(lián)地保持該消息的裝置。在由消息客戶(hù)機(jī)實(shí)現(xiàn)的消息API內(nèi)優(yōu)選地實(shí) 現(xiàn)用于調(diào)用的裝置和用于指定的裝置。在一個(gè)實(shí)施例中,用于指定應(yīng)該與以 前保持的發(fā)布相關(guān)聯(lián)地保持該消息的裝置包括調(diào)用發(fā)送操作的API調(diào)用的可 選屬性。消息客戶(hù)機(jī)可以包括調(diào)用該發(fā)送操作以及指定保持需要的應(yīng)用程 序,和實(shí)現(xiàn)消息傳遞協(xié)議以及路由功能、以通過(guò)網(wǎng)絡(luò)向發(fā)布/訂購(gòu)代理器傳遞 消息的消息傳遞部件。
上述方法的步驟和系統(tǒng)的某些部件可以以計(jì)算機(jī)程序代碼來(lái)實(shí)現(xiàn),并且 可作為計(jì)算機(jī)程序產(chǎn)品來(lái)獲得。這樣的程序產(chǎn)品包括記錄在記錄介質(zhì)上的程 序代碼,用于控制在執(zhí)行程序代碼的數(shù)據(jù)處理設(shè)備上的操作的執(zhí)行,以實(shí)現(xiàn) 上述方法。用于經(jīng)由諸如因特網(wǎng)的數(shù)據(jù)傳送媒介下載的計(jì)算機(jī)程序是可獲得 的。本發(fā)明的各部件也可以以硬件來(lái)實(shí)現(xiàn)。
下面參考附圖,以舉例的方式更詳細(xì)地描述本發(fā)明的實(shí)施例,其中: 圖1是表示根據(jù)本發(fā)明實(shí)施例的發(fā)布/訂購(gòu)數(shù)據(jù)處理網(wǎng)絡(luò)的示意圖; 圖2是表示根據(jù)本發(fā)明的 一個(gè)實(shí)施例的方法的步驟的流程圖; 圖3是表示根據(jù)本發(fā)明的另一實(shí)施例的方法的步驟的流程圖; 圖4示出在發(fā)布器消息客戶(hù)機(jī)系統(tǒng)中執(zhí)行的操作。
具體實(shí)施例方式
以下描述本發(fā)明的多個(gè)方面和實(shí)施例,包括用于在分布式數(shù)據(jù)處理網(wǎng)絡(luò) 內(nèi)實(shí)現(xiàn)本發(fā)明的方法、計(jì)算機(jī)程序和數(shù)據(jù)處理設(shè)備。該實(shí)施例僅僅作為說(shuō)明 性示例描述,以確保完全地理解本發(fā)明和它的優(yōu)點(diǎn)。本發(fā)明并不局限于所述 的i^明性實(shí)施例。
在來(lái)自發(fā)布器的標(biāo)記的控制下,實(shí)施例使新發(fā)布消息能在發(fā)布/訂購(gòu)代理 器中與以前保持的發(fā)布一起保持。這使具有累積顯著性的發(fā)布組能被一起保 持,作為關(guān)于每個(gè)主題保持所有的發(fā)布或者僅僅保持一個(gè)發(fā)布的替換,以便 新訂購(gòu)器能夠從代理器處獲得具有累積顯著性的最新保持發(fā)布組。
因?yàn)槌杀镜脑蛞约盀榱舜龠M(jìn)事務(wù)的發(fā)展,發(fā)布/訂購(gòu)匹配引擎以計(jì)算機(jī) 程序代碼來(lái)實(shí)現(xiàn)是常見(jiàn)的。通常,包括所述發(fā)布/訂購(gòu)代理器、發(fā)布器應(yīng)用和 訂購(gòu)器應(yīng)用的本發(fā)明的若干個(gè)部件可以用計(jì)算機(jī)程序代碼來(lái)實(shí)現(xiàn)。該代碼可 以用諸如C + + 、 JavaTM、或者SmallTalk的面向?qū)ο缶幊陶Z(yǔ)言或者用諸如C 編程語(yǔ)言的過(guò)程編程語(yǔ)言來(lái)編寫(xiě)。這些程序代碼部件可以在通用計(jì)算機(jī)或者 專(zhuān)用數(shù)據(jù)處理設(shè)備上執(zhí)行。如以下更詳細(xì)地確認(rèn),實(shí)現(xiàn)本發(fā)明的一些特征和
局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)、或者因特網(wǎng)的數(shù)據(jù)處理網(wǎng)絡(luò)的多個(gè)數(shù)據(jù)處 理系統(tǒng)中。在這樣的網(wǎng)絡(luò)內(nèi)的不同系統(tǒng)和設(shè)備之間的連接可以是有線或者無(wú) 線的,并且不局限于任一特定的通信協(xié)議或者數(shù)據(jù)格式,以及在這樣的網(wǎng)絡(luò) 中的數(shù)據(jù)處理系統(tǒng)可以是異類(lèi)系統(tǒng)。
在^f艮多情況下,發(fā)布/訂購(gòu)代理器將在大容量、高性能、網(wǎng)絡(luò)連接的數(shù)據(jù) 處理系統(tǒng)上實(shí)現(xiàn)一因?yàn)檫@樣的系統(tǒng)能夠?yàn)榇罅康陌l(fā)布器和訂購(gòu)器維持高性能 發(fā)布吞吐量。該發(fā)布/訂購(gòu)代理器可以是邊緣服務(wù)器的部件(即代理器可以是 一組網(wǎng)絡(luò)服務(wù)器或者應(yīng)用服務(wù)器部件中的一個(gè))或者網(wǎng)絡(luò)網(wǎng)關(guān)設(shè)備。然而,
具有少量代碼足跡的"微代理器"解決辦法近年來(lái)已經(jīng)得到發(fā)展并且已經(jīng)在例 如遠(yuǎn)程遙測(cè)應(yīng)用中使用,因此現(xiàn)在說(shuō),發(fā)布器、訂購(gòu)器、和發(fā)布/訂購(gòu)代理器 全部都可以在各類(lèi)數(shù)據(jù)處理系統(tǒng)和設(shè)備的任一個(gè)上實(shí)現(xiàn)是正確的。因此本發(fā)
明能夠在包括無(wú)線連接PDA和自動(dòng)傳感器設(shè)備的網(wǎng)絡(luò)中、以及在包括復(fù)雜和
高性能的計(jì)算機(jī)系統(tǒng)的網(wǎng)絡(luò)中實(shí)現(xiàn)。
對(duì)于本領(lǐng)域^L術(shù)人員來(lái)說(shuō)4艮明顯,分布式發(fā)布/訂購(gòu)?fù)ㄐ啪W(wǎng)絡(luò)的各個(gè)部件
能夠以軟件或者硬件(例如使用電子邏輯電路)實(shí)現(xiàn)。例如,發(fā)布/訂購(gòu)匹配
引擎70能夠由硬件比較器實(shí)現(xiàn),該硬件比較器對(duì)發(fā)布消息內(nèi)的主題名稱(chēng)與存 儲(chǔ)訂購(gòu)內(nèi)的主題名稱(chēng)進(jìn)行比較。然后在電子電路內(nèi)處理比較器的指示匹配或 者不匹配的輸出信號(hào),以便控制消息是否轉(zhuǎn)發(fā)給特定的訂購(gòu)器。由一些發(fā)布/ 訂購(gòu)匹配引擎實(shí)現(xiàn)的過(guò)濾步驟可以由電子過(guò)濾器(一種電子電路)實(shí)現(xiàn)一尤 其在將要施加過(guò)濾器的數(shù)據(jù)值能夠表示為信號(hào)振幅的地方。
因此,很明顯,本發(fā)明適用于各類(lèi)操作環(huán)境并且可以使用硬件和軟件的 各個(gè)組合實(shí)現(xiàn)。在每種情況下,本發(fā)明提供發(fā)布/訂購(gòu)?fù)ㄐ怒h(huán)境中的訂購(gòu)匹配 的增強(qiáng)的基于事件的管理。特定地,本發(fā)明的實(shí)施例使訂購(gòu)器能定義時(shí)間上 不可預(yù)測(cè)的活動(dòng)和非活動(dòng)事件,使得訂購(gòu)匹配能夠由發(fā)布/訂購(gòu)代理器接通和 斷開(kāi),而不需要訂購(gòu)器重復(fù)地發(fā)布"訂購(gòu)"和"取消訂購(gòu)"的請(qǐng)求。
圖1示出已經(jīng)實(shí)現(xiàn)了本發(fā)明實(shí)施例的簡(jiǎn)單的發(fā)布/訂購(gòu)消息網(wǎng)絡(luò)。運(yùn)行在 各個(gè)數(shù)據(jù)處理系統(tǒng)30、 40上的一組發(fā)布器應(yīng)用10、 20能夠發(fā)布能由在各個(gè) 數(shù)據(jù)處理系統(tǒng)80、 90、 IOO上運(yùn)行的多個(gè)訂購(gòu)器應(yīng)用50、 60、 70所接收的消 息。發(fā)布器IO、 20發(fā)送消息到正在網(wǎng)絡(luò)內(nèi)的另一數(shù)據(jù)處理系統(tǒng)120上運(yùn)行的 發(fā)布/訂購(gòu)消息代理器110。訂購(gòu)器向代理器指定他們希望接收到的消息類(lèi)型 (例如,消息主題名稱(chēng))。消息代理器對(duì)所接收的發(fā)布與該組訂購(gòu)器50、 60、 70的訂購(gòu)信息進(jìn)行比較一例如將所接收消息的標(biāo)題內(nèi)的主題名稱(chēng)和與代理器 相關(guān)聯(lián)的訂購(gòu)目錄或者表內(nèi)的主題名稱(chēng)相比較,以標(biāo)識(shí)任何匹配。在發(fā)布器 和訂購(gòu)器之間他們不需要直接連接并且不需要彼此的地址信息。作為替代, 發(fā)布器IO、 20向代理器IIO發(fā)送消息,包括諸如消息主題的消息類(lèi)型信息; 訂購(gòu)器在他們所發(fā)送給代理器的訂購(gòu)信息中指定他們的需求;然后代理器傳 遞所接收的消息給對(duì)所接收的類(lèi)型的接收消息感興趣的訂購(gòu)器。
在圖l的示例中,發(fā)布器10、 20和訂購(gòu)器50、 60、 70依賴(lài)下層消息客 戶(hù)機(jī)130、 140、 170、 180、 190的消息傳遞功能,以處理考慮典型的異類(lèi)分
布式網(wǎng)絡(luò)的復(fù)雜性的消息路由和格式化操作,以及使用消息隊(duì)列來(lái)提供異步 消息處理能力。在其它實(shí)施例中,消息客戶(hù)機(jī)的消息傳遞功能可以被替代實(shí) 現(xiàn)為發(fā)布器應(yīng)用的整體特征。
消息代理器110包括訂購(gòu)匹配引擎150和代理器的數(shù)據(jù)處理系統(tǒng)120的 庫(kù)內(nèi)的相關(guān)聯(lián)的訂購(gòu)目錄或者表160。在一些實(shí)施例中,消息代理器與經(jīng)由 網(wǎng)絡(luò)通信與遠(yuǎn)程消息客戶(hù)機(jī)130 、 140、 170、 180、 190互操作的本地消息系 統(tǒng)(例如IBM WebSphere MQ消息產(chǎn)品)接口 ,但是在本實(shí)施例中,代理器 的數(shù)據(jù)處理系統(tǒng)120的消息路由和格式化特征被實(shí)現(xiàn)為代理器110本身的整 體特征。特定地,對(duì)于每個(gè)消息客戶(hù)機(jī),代理器110的接收器和發(fā)送器部件 200、 210包括通信棧和協(xié)議處理模塊,用于編組消息的消息代理器的內(nèi)部表 示為規(guī)范的字節(jié)格式,以及從規(guī)范的字節(jié)格式中解編組(demarshal)消息的 消息代理器的內(nèi)部表示,以允許消息流過(guò)網(wǎng)絡(luò)連接。通信??梢源嫒∮糜谂c 外部網(wǎng)絡(luò)通信的TCP/IP套接字(socket )。消息代理器110聽(tīng)取用于重新建 立客戶(hù)連接的特定的TCP端口。在收到入站連接請(qǐng)求時(shí),消息代理器自舉用 于該客戶(hù)的通信棧。該棧響應(yīng)于維持與客戶(hù)的連接以及監(jiān)控套接字連接的當(dāng) 前狀態(tài)。通信棧自舉協(xié)議處理模塊,而協(xié)議處理模塊處理消息格式和通信協(xié) 議的解碼和編碼,以便完成能夠由消息代理器消耗的內(nèi)部對(duì)象表示。例如, 協(xié)議模塊將來(lái)自發(fā)布器客戶(hù)機(jī)的入站消息解編組為對(duì)象形式,以及提交他們 給用于匹配注冊(cè)訂購(gòu)和用于傳遞給訂購(gòu)器的發(fā)布/訂購(gòu)匹配引擎。
匹配引擎對(duì)所接收的發(fā)布與當(dāng)前注冊(cè)的訂購(gòu)組進(jìn)行比較,以標(biāo)識(shí)0、 l或 多個(gè)匹配。在本實(shí)施例中,這包括如在本領(lǐng)域已知的以及如以上所述的主題 匹配。如果訂購(gòu)器應(yīng)用50、 60、 70當(dāng)前向^f戈理器注冊(cè),并且分別^^皮標(biāo)識(shí)為 SUBSCRIBERS、 SUBSCRIBER2和SUBSCRIBER3,則在代理器中擁有的簡(jiǎn) 單訂購(gòu)目錄如下
SUBSCRIBER1: TOPIC 1, TOPIC3
SUBSCRIBER2: TOPIC2, TOPIC4
SUBSCRIBER3 : TOPIC 1
通常,每個(gè)主題表示為與訂購(gòu)匹配引擎150使用的分層主題樹(shù)相對(duì)應(yīng)的 分層字符串格式。例如,TOPIC 1可以是格式"root/levelltopicName/leve12 topicName",所以匹配引擎能夠遍歷分層來(lái)4全查匹配訂購(gòu),如之前所述。經(jīng) 受附加到主題匹配的任一消息過(guò)濾后,由代理器接收的關(guān)于TOPIC1的所有消息將轉(zhuǎn)發(fā)到SUBSCRIBER1和SUBSCRIBERS接收的關(guān)于TOPIC2的消 息將只轉(zhuǎn)發(fā)到SUBSCRIBER2 ;關(guān)于TOPIC3的消息將只轉(zhuǎn)發(fā)到 SUBSCRIBER1;而關(guān)于TOPIC4的消息將只轉(zhuǎn)發(fā)到SUBSCRIBER2。
對(duì)于圖1的特定實(shí)施例,讓我們假定所有訂購(gòu)器具有非持久的訂購(gòu),因 此對(duì)于當(dāng)前未連接的訂購(gòu)器來(lái)說(shuō),以每個(gè)訂購(gòu)器為基礎(chǔ),在代理器中不保持 消息。還讓我們假定沒(méi)有高容量的重放服務(wù)器。換句話說(shuō),將每個(gè)發(fā)布轉(zhuǎn)發(fā) 到當(dāng)前的注冊(cè)的訂購(gòu)器組,其已經(jīng)訂購(gòu)接收關(guān)于在發(fā)布消息內(nèi)指定的特定消 息主題的發(fā)布,但是在本特定實(shí)施例中,沒(méi)有保存代表當(dāng)前未連接的持久訂 購(gòu)器的消息。
然而,雖然沒(méi)有以每個(gè)訂購(gòu)器為基礎(chǔ)保存發(fā)布,但是本發(fā)明提供了對(duì)保 持發(fā)布的支持,如下所述。
由已知發(fā)布器應(yīng)用使用的示例消息API包括響應(yīng)于發(fā)布器指定主題名 稱(chēng)、指定或者附加信息數(shù)據(jù)、并且可選地設(shè)置"保持"標(biāo)志,向代理器發(fā)送消 息的sendMessage(發(fā)送消息)操作。主題名稱(chēng)是一組預(yù)定主題名稱(chēng)中的一個(gè), 其中該組中的每個(gè)主題名稱(chēng)可由消息代理器110解釋?zhuān)⑶铱梢杂梢粋€(gè)或多 個(gè)訂購(gòu)器指定為感興趣的主題。當(dāng)由發(fā)布器指定時(shí),主題名稱(chēng)和保持標(biāo)志被 包括在發(fā)送消息的標(biāo)題內(nèi)。消息數(shù)據(jù)也包括在消息內(nèi)。由發(fā)布器設(shè)置"保持" 標(biāo)志是向代理器發(fā)出的指令復(fù)制該消息到代理器的消息庫(kù)中,以及當(dāng)該消 息是關(guān)于特定主題的最新接收消息時(shí),保持庫(kù)中的副本。sendMessageAPI調(diào) 用的格式可以是
sendMessage ( TOPIC—NAME, DATA, RETAIN—FLAG )
其中TOPIC_NAME可以是標(biāo)識(shí)一個(gè)預(yù)定主題的分層字符串,DATA是消 息的數(shù)據(jù)內(nèi)容,而RETAIN—FLAG是表示邏輯"真"(即消息應(yīng)該被保持在代 理器中)或者"假"(消息不應(yīng)該被保持)的值。例如,消息可以通過(guò)發(fā)出API 調(diào)用來(lái)發(fā)布,諸如
sendMessage ("greenhouse/temperature", "34 degrees", true )
其中主題是"greenhouse/temperature (綠房子/溫度)",消息數(shù)據(jù)是小數(shù) 據(jù)項(xiàng)"34 degrees (度)",而保持標(biāo)志值設(shè)置為"true (真),,。
代理器將在主題"greenhouse/temperature,,下保持消息數(shù)據(jù)"34 degrees"的 副本,直到接收到關(guān)于該主題的具有不同數(shù)據(jù)值(例如"32 degrees")的消息 時(shí)為止。然后新的數(shù)據(jù)值將覆蓋以前的值。保持消息的這種實(shí)施方式(如迄
今為止在以上最后幾段所描述的)在本領(lǐng)域是已知的。
然而,在本發(fā)明中,保持標(biāo)志設(shè)置為"真"的消息并不一定覆蓋現(xiàn)有的保 持消息,而是可以將其添加(或相反與其結(jié)合)到以前保持的關(guān)于同一主題 的消息上。
在本實(shí)施例中,保持特征由是消息代理器110的部件的保持管理器220 來(lái)實(shí)現(xiàn)。如果保持標(biāo)志已經(jīng)設(shè)置為"真",則保持管理器接收所收到的關(guān)于任 一主題的每個(gè)消息的消息數(shù)據(jù)的副本。該標(biāo)志沒(méi)有設(shè)置為"真,,的消息不被傳 遞到保持管理器中。當(dāng)然,保持標(biāo)志可以通過(guò)使用值1和O表示"真"和"假"、 或者使用具有能指示發(fā)布器是否需要所保持的消息的效果的任一其它表達(dá)式 來(lái)實(shí)現(xiàn)。
圖2提供根據(jù)本發(fā)明的第一示例實(shí)施例的消息代理器110內(nèi)的處理序列 的示意圖。該處理序列僅僅是本發(fā)明的一個(gè)可能的實(shí)施方式,以下參考圖3 等等描述附加的示例。發(fā)布器10向代理器110發(fā)送(300)消息,包括能夠 取真值或者假值的保持標(biāo)志和其它的添加標(biāo)志。以下參考圖4將更詳細(xì)地描 述在發(fā)布器系統(tǒng)中執(zhí)行的操作。以下還將更詳細(xì)地描述添加標(biāo)志。發(fā)布消息 由接收器側(cè)通信棧和協(xié)議處理器200處理(310 ),然后檢驗(yàn)(320 )保持標(biāo)志 來(lái)確定發(fā)布器是否想要在代理器中保持消息。如果保持標(biāo)志設(shè)置為假,則消 息被傳遞到訂購(gòu)匹配引擎150。訂購(gòu)匹配引擎150比較(330 )消息標(biāo)題內(nèi)的 主題信息與以前由代理器IIO存儲(chǔ)的訂購(gòu)160來(lái)標(biāo)識(shí)所有的匹配訂購(gòu)。如果 沒(méi)有主題匹配(或者如果不滿足其它過(guò)濾條件),則刪除(340 )消息。 一個(gè) 或多個(gè)訂購(gòu)和發(fā)布消息之間的正匹配導(dǎo)致消息使用傳統(tǒng)的技術(shù)轉(zhuǎn)發(fā)(350 )到 一個(gè)或多個(gè)標(biāo)識(shí)訂購(gòu)器。然后訂購(gòu)器用由他們自己的應(yīng)用邏輯指定的任何方 法來(lái)接收(360)和處理消息。
然而,如果保持標(biāo)志被確定(320)設(shè)置為真,則消息被傳遞到保持管理 器220。保持管理器從消息標(biāo)題的附加字段中提取值來(lái)確定(370)消息是否 應(yīng)該添加到現(xiàn)有的關(guān)于指定主題的保持消息中,或者是否應(yīng)該覆蓋任何以前 所保持的消息。附加消息標(biāo)題字段在sendMessage API調(diào)用中被指定如下
sendMessage ( TOPIC—NAME, DATA, RETAIN—FLAG, APPEND—FLAG )
其中APPEND—FLAG的邏輯值可以是"真"或者"假"。如果附加值是"真,,, 則消息數(shù)據(jù)被添加(380 )到關(guān)于該主題的以前所保持的消息上,并且被保存 (390 )到保持發(fā)布的庫(kù)230中。添加消息數(shù)據(jù)包括從以前保持的發(fā)布中復(fù)
制消息數(shù)據(jù),以及從最新接收的關(guān)于同一主題的發(fā)布中提取消息數(shù)據(jù),然后 生成新的消息,其中所提取的新數(shù)據(jù)被添加到以前保持的數(shù)據(jù)中。在第一實(shí)
施例中,庫(kù)230中擁有的消息標(biāo)題信息相對(duì)于以前保持的發(fā)布來(lái)說(shuō)沒(méi)有改變 (即僅僅通過(guò)添加操作而擴(kuò)大了消息內(nèi)容)。有時(shí),訂購(gòu)器應(yīng)用不需要處理消 息標(biāo)題中所擁有的信息,并且由于在關(guān)于同一主題的連續(xù)發(fā)布之間,大量標(biāo) 題信息是完全相同的,則當(dāng)添加消息時(shí),不需要改變庫(kù)230中的消息標(biāo)題信 息。在第二實(shí)施例中,其中發(fā)布日期和時(shí)間是訂購(gòu)器應(yīng)用所感興趣的,以前 保持的發(fā)布的消息標(biāo)題或者保持不變,或者由已經(jīng)添加到保持發(fā)布的新接收 發(fā)布的消息標(biāo)題所代替,這取決于訂購(gòu)器應(yīng)用的需要。在再一實(shí)施例中,其 中通過(guò)消息標(biāo)題字段的許可,添加消息的消息標(biāo)題可以合并(例如包括一組 添加登錄記錄的第一和最后發(fā)布的日期與時(shí)間)。
符合上述新格式的第一示例sendMessage API調(diào)用如下
sendMessage("application/log", "09陽(yáng)Mar-2006 11:23:42
com.ibm.myapplication.MyClassException:java.lang.NullPointerException", true, true)
如果關(guān)于該主題的多個(gè)消息被在代理器中接收,并且他們每個(gè)都具有設(shè) 置為"真"的添加標(biāo)志,則在代理器中擁有的、用于該指定主題的消息數(shù)據(jù)能 夠隨著時(shí)間的過(guò)去在庫(kù)230中^皮建立,諸如以下示例
't)9-Mar-20061 l:25:12conibimnyapplicalioaMyClassException:Java_lang.NullPointerException 09-Mar-200611:24:30 com.flmmy^pIicatioaMyClassExceptionJavaJarig.Nul]PointerException 09-Mar-200611:23:42 com.ihmjny^)plicatiorLMyClassExceptionJavaJarig.Nul]PointerException" 在第一實(shí)施例中,當(dāng)需要時(shí),該組添加消息能夠由新的保持發(fā)布刷新和 覆蓋UOO)。是否刷新的決定可能是檢驗(yàn)定時(shí)器到期的結(jié)果,作為是否添加 的確定(370 )的一部分,或者例如,確定(370)可以響應(yīng)添加標(biāo)志已經(jīng)"i殳 置為"假"的sendMessage ( ) API調(diào)用。對(duì)于發(fā)布器應(yīng)用,根據(jù)在應(yīng)用內(nèi)的執(zhí) 行的發(fā)展,能夠做出關(guān)于何時(shí)添加到保持發(fā)布、以及何時(shí)刷新和覆蓋保持發(fā) 布的決定。例如,當(dāng)應(yīng)用重新開(kāi)始或者當(dāng)新執(zhí)行進(jìn)程開(kāi)始時(shí),新登錄可以開(kāi) 始,以及該重新開(kāi)始能夠是刷新以前的保持消息和開(kāi)始保持新登錄記錄的正 確時(shí)間點(diǎn)。發(fā)布器應(yīng)用執(zhí)行的其它重復(fù)階段可以是刷新保持消息的適當(dāng)點(diǎn)。
對(duì)保持消息的保持和刷新的這個(gè)柔性控制是對(duì)僅僅保持最后N個(gè)消息的 改進(jìn),因?yàn)楹笳邥?huì)留給訂購(gòu)器在諸如用于不同應(yīng)用執(zhí)行的登錄記錄的不相關(guān)
的保持發(fā)布之間進(jìn)行區(qū)分的任務(wù)。
在一個(gè)實(shí)施例中,不保持發(fā)布消息的決定由保持管理器220解釋?zhuān)鳛?從如圖2所示的庫(kù)230中刷新(410)現(xiàn)有的保持發(fā)布的指令(因?yàn)椴贿@樣做 會(huì)使過(guò)時(shí)的保持消息留在庫(kù)中)。在另一實(shí)施例中,保持管理器完全不管具有 保持標(biāo)志設(shè)置為假的任何消息。
在本發(fā)明的一個(gè)實(shí)施例中,由訂購(gòu)匹配引擎處理以及最終轉(zhuǎn)發(fā)到注冊(cè)訂 購(gòu)器的消息是最新的保持發(fā)布一一即,或者已經(jīng)覆蓋了 (400)以前的保持發(fā) 布的最新接收發(fā)布,或者添加(380 )接收消息到以前的保持消息的最新結(jié)果。 轉(zhuǎn)發(fā)包含累積數(shù)據(jù)(即添加消息)的單個(gè)消息給當(dāng)前的訂購(gòu)器組、或者轉(zhuǎn)發(fā) 最新接收發(fā)布(即不添加)是否對(duì)他們更有用,則將取決于特定的應(yīng)用環(huán)境。 在涉及發(fā)布器應(yīng)用內(nèi)的當(dāng)前執(zhí)行進(jìn)程的登錄記錄的情況下,具有附加內(nèi)容的 消息可以是轉(zhuǎn)發(fā)最有用的項(xiàng)目,因?yàn)榻邮沼嗁?gòu)器然后能夠通過(guò)處理單個(gè)消息 而不必從多個(gè)發(fā)布消息中集合信息來(lái)處理有關(guān)的登錄記錄組。
然而,在其它實(shí)施例中,附加消息^U又用于"新近的"訂購(gòu)器和間歇訂購(gòu) 器一以響應(yīng)于新訂購(gòu)來(lái)提供快速的更新機(jī)制。因此,接收新發(fā)布時(shí)連接到代 理器的訂購(gòu)器將接收該新發(fā)布,如果該新發(fā)布匹配它們的訂購(gòu)的話(即相對(duì) 于傳統(tǒng)的發(fā)布/訂購(gòu)解決辦法沒(méi)有任何變化,不具有保持管理器添加或相反的 相關(guān)聯(lián)的消息,以及在保持管理器和訂購(gòu)匹配引擎150之間沒(méi)有虛線箭頭)。 該實(shí)施方式將導(dǎo)致新近的訂購(gòu)器接收不同于當(dāng)前訂購(gòu)器的格式(在單個(gè)消息 中添加)的發(fā)布信息,但是由于數(shù)據(jù)內(nèi)容將是相同的,對(duì)于許多訂購(gòu)器應(yīng)用, 不同格式的發(fā)出將不會(huì)產(chǎn)生問(wèn)題。
如果對(duì)新的訂購(gòu)器應(yīng)用來(lái)說(shuō),在庫(kù)230中由保持管理器220建立的累積 數(shù)據(jù)組比單個(gè)保持消息更有用,則本發(fā)明的"添加"特征實(shí)現(xiàn)了對(duì)已知的保持 發(fā)布解決辦法的改進(jìn)。對(duì)于多個(gè)不同類(lèi)型的訂購(gòu)器應(yīng)用,諸如需要了解接收 數(shù)據(jù)值內(nèi)的事件頻率或者模式而不僅僅是單個(gè)數(shù)據(jù)值的多個(gè)監(jiān)控應(yīng)用,這將 是真的?;氐絻稉Q率示例,貨幣的相對(duì)值是增加還是減少與用戶(hù)完全有關(guān)。 在訂購(gòu)器應(yīng)用是監(jiān)控處理異常的另一示例中,單個(gè)異常未必需要訂購(gòu)器應(yīng)用 的任何活動(dòng),但是高頻異??梢灾甘拘枰惹凶⒁獾膯?wèn)題。
如果新訂購(gòu)器能夠連接足夠久的時(shí)間來(lái)接收足夠多的新發(fā)布消息的序 列,則即使沒(méi)有本發(fā)明的添加特征,隨著時(shí)間的過(guò)去,新訂購(gòu)器也能得到發(fā) 布消息數(shù)據(jù)內(nèi)的事件頻率或者模式。然而, 一些訂購(gòu)器將只能夠短暫地連接,
而且一些訂購(gòu)器應(yīng)用的用戶(hù)將希望一旦訂購(gòu)則能快速地接收結(jié)果。因此存在 多個(gè)應(yīng)用類(lèi),本發(fā)明為其提供對(duì)已知解決辦法的改進(jìn)。
本發(fā)明的實(shí)施例使"服務(wù)質(zhì)量,,的新選項(xiàng)能提供給訂購(gòu)器。例如,如果保 持管理器從最新的相關(guān)消息組累積數(shù)據(jù)(諸如用于當(dāng)前應(yīng)用執(zhí)行進(jìn)程的所有 登錄),則訂購(gòu)器可以不需要持久的訂購(gòu)。非持久的訂購(gòu)和由保持管理器保持 的消息子集可能滿足,而單個(gè)最新發(fā)布或者最后N個(gè)發(fā)布消息可能不滿足。
只有不頻繁地和暫時(shí)地連接到代理器的訂購(gòu)器可以從由保持管理器220使用 的庫(kù)230中獲得足夠的信息,因此也許能避免在代理器中存儲(chǔ)大量過(guò)時(shí)消息。
在本發(fā)明的另 一實(shí)施例中,添加消息到以前的保持消息的指令可以通過(guò) 使用發(fā)送消息的新API調(diào)用來(lái)指定,例如
appendMessage ( TOPIC—NAME, DATA )
由于使用appendMessage ()發(fā)送的任一消息都想要保持,所以不需要保 持標(biāo)志。想要為特定主題刷新和覆蓋保持消息組的消息能夠繼續(xù)使用已知的 API調(diào)用格式
sendMessage ( TOPIC—NAME, DATA, RETAIN—FLAG )
或者可以提供另 一新的API調(diào)用,例如
ReplaceMessage ( TOPIC—NAME, DATA)
上述appendMessage ()調(diào)用在發(fā)布器應(yīng)用的API中調(diào)用操作,來(lái)以與 前述示例sendMessage ( TOPIC_NAME,DATA, RETAIN—FLAG, APPEND— FLAG )相同的方式發(fā)送消息。
第一示例appendMessage ()調(diào)用如下 appendMessage("application/log", "09-Mar-2006 11:23:42 com.ibm.myapplication.MyClassException:Java.lang.NullPointerException") 不管實(shí)現(xiàn)以上哪種接口實(shí)施方式,或者任一其它實(shí)施方式,通常都希望 消息代理器可配置為設(shè)置保持添加消息組的最大消息長(zhǎng)度。諸如最大消息長(zhǎng) 度或者超時(shí)時(shí)段的屬性還可以在API調(diào)用中指定。對(duì)于保持管理器如何響應(yīng) 達(dá)到最大大小的添加消息內(nèi)容,存在各種實(shí)施方式的選項(xiàng)。在一個(gè)實(shí)施例中, 保持管理器創(chuàng)建與第 一保持消息相關(guān)聯(lián)的第二保持消息,以及繼續(xù)向第二保 持消息添加數(shù)據(jù),直到其達(dá)到最大大小或者刷新保持消息時(shí)為止。在另一實(shí) 施例中,刷新或者截?cái)噙^(guò)大的保持消息,以便能夠添加更多新近發(fā)布的信息。 在另一實(shí)施例中,通過(guò)累積庫(kù)230中的、相互關(guān)聯(lián)的一組保持消息,可以響應(yīng)appendMessage ( ) API調(diào)用(或者一個(gè)上述其它接口選項(xiàng))。這是對(duì) 保持具有附加消息內(nèi)容的單個(gè)發(fā)布的另一選擇。通過(guò)標(biāo)識(shí)在與新訂購(gòu)有關(guān)的 庫(kù)230中保持的相關(guān)聯(lián)的消息組,保持管理器220響應(yīng)新近的訂購(gòu)器,并且 轉(zhuǎn)發(fā)該組發(fā)布到新訂購(gòu)器。這種保持發(fā)布為獨(dú)立的然而相關(guān)聯(lián)的消息的方法 確保將發(fā)送給"新近,,訂購(gòu)器的保持發(fā)布每個(gè)等同于發(fā)送給其它訂購(gòu)器的發(fā) 布。
圖2提供表示處理發(fā)布消息的方法的流程圖,其中在消息向訂購(gòu)器轉(zhuǎn)發(fā) 之前,這些消息可以添加到其它消息上,而圖3示出另一實(shí)施方式,其中隨 匹配引擎150處理消息之后,執(zhí)行保持管理器的處理。在這個(gè)實(shí)施例中,接 收的發(fā)布能夠被轉(zhuǎn)發(fā)到當(dāng)前注冊(cè)訂購(gòu)器,而不必等待保持管理器完成它的處理。
參考圖3,接收消息來(lái)標(biāo)識(shí)當(dāng)前感興趣的訂購(gòu)器的處理僅僅是傳統(tǒng)的, 但是保持管理器考慮來(lái)自發(fā)布器的標(biāo)記,該發(fā)布器關(guān)心新發(fā)布的消息是否應(yīng) 該與作為保持消息所擁有的較早的發(fā)布相關(guān)聯(lián)地保持。代理器接收(500 )新 發(fā)布并且傳遞該發(fā)布給訂購(gòu)匹配引擎。訂購(gòu)匹配引擎比較(510)主題信息和 消息內(nèi)容的可能的其它標(biāo)題信息與一組存儲(chǔ)訂購(gòu),如在本領(lǐng)域是已知的。如 果標(biāo)識(shí)至少一個(gè)匹配訂購(gòu),則轉(zhuǎn)發(fā)(520)發(fā)布到各個(gè)訂購(gòu)器。還傳遞發(fā)布到 保持管理器220,其在該實(shí)施例中執(zhí)行(530)檢驗(yàn)發(fā)布是否將被保持。如在 上述實(shí)施例中,這個(gè)檢驗(yàn)可以包括檢驗(yàn)發(fā)布消息標(biāo)題內(nèi)的保持標(biāo)志,以及可 能根據(jù)由保持管理器施加的 一組規(guī)則來(lái)檢驗(yàn)定時(shí)器或者主題名稱(chēng)或者其它標(biāo) 準(zhǔn)。如果將不保持消息,則現(xiàn)在可以從代理器中刪除(540)消息。
如果保持標(biāo)志及其它標(biāo)準(zhǔn)的檢驗(yàn)確定發(fā)布消息應(yīng)該保持在代理器中 > 則 然后確定(550 )新發(fā)布是否應(yīng)該與一個(gè)或多個(gè)以前的保持發(fā)布一起保持,或 者新發(fā)布是否應(yīng)該是關(guān)于該主題的唯一保持發(fā)布。如上所述,確定(550 )可 以包含檢驗(yàn)發(fā)布消息標(biāo)題字段內(nèi)的添加標(biāo)志,或者響應(yīng)appendMessage( ) API 調(diào)用。如果確定新發(fā)布應(yīng)該被保持,但是不應(yīng)該與以前的發(fā)布結(jié)合,則將新 發(fā)布另存為用于特定消息主題的新保持發(fā)布一覆蓋(560 )關(guān)于同一主題的以 前的保持發(fā)布。如果確定發(fā)布消息應(yīng)該與一個(gè)或多個(gè)以前的發(fā)布相結(jié)合,則 通過(guò)與以前的保持發(fā)布相關(guān)聯(lián)地保存(570 )新發(fā)布來(lái)更新庫(kù)230。在更新庫(kù) 230中,最初的保持發(fā)布具有添加給它的指針,其指針標(biāo)識(shí)關(guān)于同一主題的 下一保持發(fā)布的存儲(chǔ)位置。當(dāng)需要時(shí)能夠增加新發(fā)布和指針。這組相關(guān)聯(lián)的
發(fā)布被保持在庫(kù)230中,直到"新近"訂購(gòu)器需要時(shí)或者直到超時(shí)或者刷新指 令時(shí)為止。
在本發(fā)明的另 一實(shí)施例中,在消息已經(jīng)與匹配引擎的處理并行地通過(guò)接 收器側(cè)通信棧和協(xié)議處理器200之后,保持管理器可以接收該消息。
在另 一實(shí)施例中,能夠?qū)崿F(xiàn)保持管理器來(lái)保持所接收的關(guān)于任意以及每 個(gè)主題的或者用于預(yù)定主題子集的最新消息,而不必依賴(lài)于"保持"標(biāo)志。能 夠?qū)崿F(xiàn)保持管理器來(lái)保持僅僅關(guān)于預(yù)定主題子集的和只有"保持"標(biāo)志已經(jīng)設(shè) 置為真的消息。
用于向發(fā)布/訂購(gòu)代理器發(fā)布消息的典型消息客戶(hù)機(jī)系統(tǒng)包括實(shí)現(xiàn)消息 API的發(fā)布器應(yīng)用,和用于向發(fā)布/訂購(gòu)代理器的數(shù)據(jù)處理系統(tǒng)傳送消息的消 息傳遞部件。如圖4所示,消息客戶(hù)機(jī)應(yīng)用使用上述消息API來(lái)調(diào)用(600) 發(fā)送消息操作,包括指定諸如保持需要的參數(shù)。消息API插入(610 )消息保 持標(biāo)記到消息的標(biāo)題字段中。消息客戶(hù)機(jī)系統(tǒng)的消息傳遞部件實(shí)現(xiàn)消息傳遞 協(xié)議和路由功能,以向代理器傳遞(620)消息。
很明顯,對(duì)本領(lǐng)域技術(shù)人員來(lái)說(shuō),在本發(fā)明的范圍內(nèi)可以對(duì)上述實(shí)施例 進(jìn)行各種修改和補(bǔ)充,并且以下陳述的權(quán)利要求不應(yīng)該解釋為局限于以上詳 細(xì)描述的特定說(shuō)明性實(shí)施例。
權(quán)利要求
1、一種用于在發(fā)布/訂購(gòu)系統(tǒng)中對(duì)發(fā)布的保持進(jìn)行控制的方法,該方法包括發(fā)布/訂購(gòu)代理器從發(fā)布器接收發(fā)布;該發(fā)布/訂購(gòu)代理器標(biāo)識(shí)發(fā)布器指定的、是否應(yīng)該與以前的保持發(fā)布相關(guān)聯(lián)地保持該發(fā)布的標(biāo)記;以及該發(fā)布/訂購(gòu)代理器通過(guò)與該以前的保持發(fā)布相關(guān)聯(lián)地保持該新發(fā)布來(lái)響應(yīng)該發(fā)布器指定的標(biāo)記。
2、 根據(jù)權(quán)利要求1所述的方法,其中該發(fā)布器指定的標(biāo)記包括添加指令, 與該以前的保持發(fā)布相關(guān)聯(lián)地保持該新發(fā)布的步驟包括向該以前的保持發(fā) 布內(nèi)的數(shù)據(jù)中添加所接收發(fā)布中的數(shù)據(jù)。
3、 根據(jù)權(quán)利要求1所述的方法,其中與該以前的保持發(fā)布相關(guān)聯(lián)地保持 該新發(fā)布的步驟包括與描述獨(dú)立的發(fā)布之間的聯(lián)系的信息一起保持該多個(gè) 獨(dú)立的發(fā)布。
4、 根據(jù)前述任一權(quán)利要求所述的方法,其中該發(fā)布/訂購(gòu)代理器響應(yīng)沒(méi) 有所述發(fā)布器指定的標(biāo)記,對(duì)于仍然需要保持的發(fā)布,覆蓋以前的保持發(fā)布。
5、 根據(jù)權(quán)利要求4所述的方法,其中所接收的發(fā)布包括具有消息標(biāo)題和 消息主體的消息,其中該消息標(biāo)題包括指示該發(fā)布器是否需要保持該消息主 體的第一字段和包括該發(fā)布器指定的、是否應(yīng)該與以前的保持發(fā)布相關(guān)聯(lián)地 保持該消息主體的標(biāo)記的第二字段。
6、 根據(jù)前述任一權(quán)利要求所述的方法,用于基于主題的發(fā)布/訂購(gòu)系統(tǒng), 其中訂購(gòu)器指定訂購(gòu)內(nèi)感興趣的主題,以及其中該發(fā)布/訂購(gòu)代理器的匹配引 擎對(duì)在接收發(fā)布中指定的主題與訂購(gòu)器指定的、該發(fā)布/訂購(gòu)代理器所擁有的 訂購(gòu)主題進(jìn)行比較,其中該代理器響應(yīng)包括訂購(gòu)器指定主題的新訂購(gòu)的接收,傳遞當(dāng)前由該 代理器保持的、適合于該訂購(gòu)器指定主題的任一發(fā)布到相應(yīng)的訂購(gòu)器。
7、 根據(jù)權(quán)利要求2所述的方法,包括檢驗(yàn)該添加數(shù)據(jù)的步驟是否將超過(guò) 最大消息大小的步驟,以及如果該添加數(shù)據(jù)的步驟將超過(guò)該最大消息大小, 則拒絕該添加指令。
8、 根據(jù)權(quán)利要求7所述的方法,其中該發(fā)布/訂購(gòu)代理器響應(yīng)所述拒絕, 以與以前的保持發(fā)布相關(guān)聯(lián)地保持該新發(fā)布。
9、 一種用于發(fā)布/訂購(gòu)?fù)ㄐ啪W(wǎng)絡(luò)的發(fā)布/訂購(gòu)代理器,該代理器包括 從發(fā)布器接收發(fā)布的裝置;比較接收發(fā)布與存儲(chǔ)訂購(gòu)來(lái)標(biāo)識(shí)匹配的發(fā)布的訂購(gòu)匹配部件,從而標(biāo)識(shí) 該匹配發(fā)布應(yīng)該被轉(zhuǎn)發(fā)到的訂購(gòu)器;轉(zhuǎn)發(fā)匹配發(fā)布到所標(biāo)識(shí)的訂購(gòu)器的裝置;以及保持管理器,其中該保持管理器響應(yīng)發(fā)布器指定的、該發(fā)布是否應(yīng)該與 以前的保持發(fā)布相關(guān)聯(lián)地保持的標(biāo)記,來(lái)與該以前的保持發(fā)布相關(guān)聯(lián)地保持 該新發(fā)布。
10、 一種向通信網(wǎng)絡(luò)內(nèi)的發(fā)布/訂購(gòu)代理器發(fā)布消息的消息客戶(hù)機(jī),該發(fā) 布/訂購(gòu)消息客戶(hù)機(jī)包括調(diào)用向該發(fā)布/訂購(gòu)代理器發(fā)送消息的操作的裝置;以及 在該消息內(nèi)指定應(yīng)該由該代理器與以前的保持消息相關(guān)聯(lián)地保持該消息 的裝置。
全文摘要
提供了在發(fā)布/訂購(gòu)系統(tǒng)中對(duì)發(fā)布的保持進(jìn)行管理的方法、數(shù)據(jù)處理系統(tǒng)和計(jì)算機(jī)程序。發(fā)布器向發(fā)布/訂購(gòu)代理器發(fā)送新發(fā)布,其中標(biāo)記是否應(yīng)該與以前的保持發(fā)布相關(guān)聯(lián)地保持該新發(fā)布。發(fā)布/訂購(gòu)代理器通過(guò)與以前的保持發(fā)布一起保持新發(fā)布來(lái)響應(yīng)這樣的標(biāo)記。新發(fā)布消息的內(nèi)容或者“有效載荷”可以添加到以前的保持消息中,從而導(dǎo)致包括多個(gè)發(fā)布消息中的信息的單個(gè)保持消息。
文檔編號(hào)H04L12/18GK101192942SQ200710186338
公開(kāi)日2008年6月4日 申請(qǐng)日期2007年11月12日 優(yōu)先權(quán)日2006年11月30日
發(fā)明者加雷斯·E·瓊斯, 安德魯·J·斯坦福-克拉克, 本杰明·J·弗萊徹, 馬修·R·懷特黑德 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司