專利名稱:使用子隊(duì)列來增強(qiáng)本地消息處理的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及電子消息傳送,尤其涉及使用子隊(duì)列來增強(qiáng)本地消息處理。
背景技術(shù):
計(jì)算機(jī)系統(tǒng)和相關(guān)技術(shù)影響了社會的許多方面。實(shí)際上,計(jì)算機(jī)系統(tǒng)處理信息的能力已經(jīng)改變了我們生活和工作的方法?,F(xiàn)在計(jì)算機(jī)系統(tǒng)通常執(zhí)行在計(jì)算機(jī)出現(xiàn)之前手工執(zhí)行的大量任務(wù)(例如,字處理、日程安排以及數(shù)據(jù)庫管理)。最近,計(jì)算機(jī)系統(tǒng)已彼此耦合并與其它電子設(shè)備耦合,以形成計(jì)算機(jī)系統(tǒng)和其它電子設(shè)備在其上能傳送電子數(shù)據(jù)的有線和無線計(jì)算機(jī)網(wǎng)絡(luò)。結(jié)果,可在計(jì)算機(jī)系統(tǒng)上執(zhí)行的許多任務(wù)(例如,語音通信、訪問電子郵件、控制家用電器、Web瀏覽、和打印文檔)包括眾多計(jì)算機(jī)系統(tǒng)和/或其它電子設(shè)備之間通過有線和/或無線計(jì)算機(jī)網(wǎng)絡(luò)的電子消息的交換。
網(wǎng)絡(luò)實(shí)際上已變得如此豐富,從而簡單的網(wǎng)絡(luò)-使能計(jì)算系統(tǒng)可在通常稱為“因特網(wǎng)”的網(wǎng)絡(luò)連接上與遍布全球的數(shù)百萬其它計(jì)算系統(tǒng)的任一臺通信。這種計(jì)算系統(tǒng)可包括臺式、膝上型、或書寫板個(gè)人計(jì)算機(jī);個(gè)人數(shù)字助理(PDA);電話;或能夠在數(shù)字網(wǎng)絡(luò)上通信的任何其它計(jì)算機(jī)或設(shè)備。
為了在網(wǎng)絡(luò)上通信,一個(gè)計(jì)算系統(tǒng)(在此通常稱為“發(fā)送計(jì)算系統(tǒng)”)構(gòu)建或以其它方式訪問電子消息,并在網(wǎng)絡(luò)上將該電子消息傳送給另一個(gè)計(jì)算系統(tǒng)(在此稱為“接收計(jì)算系統(tǒng)”)。當(dāng)該電子消息是電子郵件或即時(shí)消息時(shí),該電子消息由用戶讀取,或者相反可由運(yùn)行在接收計(jì)算系統(tǒng)上的應(yīng)用程序讀取。該電子消息可在用戶的可能幫助下通過運(yùn)行在發(fā)送計(jì)算系統(tǒng)上的應(yīng)用程序構(gòu)建。
在一些環(huán)境中,各應(yīng)用程序使用排隊(duì)消息通信彼此通信。排隊(duì)通信包括各機(jī)制,使發(fā)送應(yīng)用程序?qū)⑾懭氚l(fā)送隊(duì)列、該發(fā)送隊(duì)列將消息傳送給接收隊(duì)列、以及接收應(yīng)用程序從接收隊(duì)列中讀取消息。各隊(duì)列保持通信各方之外的通信狀態(tài),并提供它們之間的間接性程度。因此,排隊(duì)消息傳送提供松散耦合的應(yīng)用程序之間的可靠通信。消息的發(fā)送者和接收者使用中介隊(duì)列管理器來進(jìn)行通信,并可獨(dú)立關(guān)閉和重新啟動,甚至可有不重疊的使用期。排隊(duì)還使客戶機(jī)和服務(wù)器能“以它們自己的步調(diào)”收發(fā)消息,其中隊(duì)列收緊了兩端的間隙。
常常接收計(jì)算機(jī)系統(tǒng)會公布單個(gè)接收隊(duì)列名稱,從而其它計(jì)算機(jī)系統(tǒng)可將消息發(fā)送到接收隊(duì)列中去。消息隨后可從接收隊(duì)列傳遞到適當(dāng)應(yīng)用程序。在一些環(huán)境中,消息從接收隊(duì)列移到接收計(jì)算機(jī)系統(tǒng)上的其它隊(duì)列中。例如,隊(duì)列管理器可確定暫時(shí)不可處理排隊(duì)消息(例如當(dāng)適當(dāng)應(yīng)用程序不可用時(shí))。因而,排隊(duì)管理器可將該排隊(duì)消息從接收隊(duì)列移到另一隊(duì)列,以便于使其它排隊(duì)消息可用來處理。在稍后時(shí)間,隊(duì)列管理器可將排隊(duì)消息移回接收隊(duì)列,并確定是否現(xiàn)在可處理該排隊(duì)消息。
不時(shí)地,對于隊(duì)列管理器而言,還有必要將接收隊(duì)列中的各個(gè)消息分成各個(gè)組,以比如將各消息路由到不同處理單元。然而,隊(duì)列通常是整體式的,并不具有任何組織結(jié)構(gòu)。因而,接收隊(duì)列中消息的適當(dāng)分類僅可通過將消息移出接收隊(duì)列并移入接收計(jì)算機(jī)系統(tǒng)的其它隊(duì)列才能實(shí)現(xiàn)。
還可以是應(yīng)用程序訪問消息,并隨后將其移到不同隊(duì)列中。例如,當(dāng)應(yīng)用程序檢測到一有害消息時(shí)(例如在處理消息時(shí)指定次數(shù)的失敗讀取或失敗嘗試之后),應(yīng)用程序可暫時(shí)將該有害消息移到另一個(gè)隊(duì)列(例如有害消息隊(duì)列)中,所以可繼續(xù)處理接收隊(duì)列中的其它消息。然后在稍后時(shí)間,應(yīng)用程序可將該有害消息移回接收隊(duì)列并嘗試再次讀取并處理該有害消息。
然而,“移動”操作會是資源密集的。例如,移動操作可使消息物理地從一存儲器位置移到另一存儲器位置。
此外,當(dāng)接收應(yīng)用程序在隊(duì)列之間移動消息時(shí),會丟失向前賦予的標(biāo)識信息(原始發(fā)送者的標(biāo)識)。用于將一消息從一個(gè)隊(duì)列移到另一個(gè)隊(duì)列的典型機(jī)制是從一隊(duì)列“Receive”(接收)并“Send”(發(fā)送)給另一隊(duì)列。然而,在消息移動期間,消息通常離開消息傳送系統(tǒng)(當(dāng)調(diào)用Receive時(shí))并再次進(jìn)入消息傳送系統(tǒng)(當(dāng)調(diào)用Send時(shí))。因而,消息傳送系統(tǒng)在一段時(shí)間內(nèi)無法跟蹤該消息,并將再次進(jìn)入的消息視為新消息。因?yàn)橄魉拖到y(tǒng)將該消息視為新消息,所以它會把移動者的標(biāo)識賦予該消息,從而丟失原始發(fā)送者的標(biāo)識。
在消息移動期間將消息從消息傳送系統(tǒng)中移去出于至少一個(gè)原因是有問題的。因?yàn)樵撓㈦x開消息傳送系統(tǒng),Receive使傳遞確認(rèn)(“ACK”)發(fā)送。原始的發(fā)送者可接收到ACK并將該ACK視為已滿足傳遞保證的表示。即,該ACK向發(fā)送應(yīng)用程序表示接收應(yīng)用程序處理了該消息。然而,如果消息在隊(duì)列之間傳送,則到接收應(yīng)用程序的實(shí)際傳遞可能尚未進(jìn)行。因而,發(fā)送應(yīng)用程序可不適當(dāng)?shù)貙⒃撓⒁暈橐烟幚淼?。響?yīng)于該ACK,發(fā)送應(yīng)用程序可將該消息從本地高速緩存中移除,并繼續(xù)發(fā)送消息序列中的其它消息。
不幸的是,在接收應(yīng)用程序?qū)⒃撓⒁苹氐浇邮贞?duì)列中并再次嘗試處理該消息之后,會發(fā)生其它失敗。最終,在指定次數(shù)的失敗(以及可能隊(duì)列之間的進(jìn)一步移動)之后,接收應(yīng)用程序可通知發(fā)送應(yīng)用程序它不能處理該消息。作為響應(yīng),發(fā)送應(yīng)用程序可嘗試再次發(fā)送該消息。然而,因?yàn)榘l(fā)送應(yīng)用程序先前響應(yīng)于該ACK將消息從高速緩存中移去,發(fā)送應(yīng)用程序可能沒有辦法表示該消息或訪問該消息的內(nèi)容。
也會出現(xiàn)其它問題。例如,因?yàn)椴呗栽?例如安全性或配額設(shè)置),新的隊(duì)列會無法接受來自移動隊(duì)列的消息。新隊(duì)列無法接受消息會使該消息被移到移動者的死消息隊(duì)列中。
因此,用于更有效和更準(zhǔn)確地確認(rèn)本地消息處理的系統(tǒng)、方法、計(jì)算機(jī)程序產(chǎn)品會是有利的。
發(fā)明內(nèi)容
本領(lǐng)域現(xiàn)有狀態(tài)的前述問題由本發(fā)明的諸原理解決,這些原理涉及使用子隊(duì)列來增強(qiáng)本地消息處理的方法、系統(tǒng)、以及計(jì)算機(jī)程序產(chǎn)品。在一些實(shí)施例中,接收到的消息被分到子隊(duì)列中。例如,隊(duì)列管理器接收一消息,用于從發(fā)送應(yīng)用程序傳遞給接收應(yīng)用程序。該消息包括具有父值部分的隊(duì)列標(biāo)識符,在父值部分中存儲了標(biāo)識接收隊(duì)列的父值。
隊(duì)列管理器基于所存儲的父值將消息排入接收隊(duì)列中。接收應(yīng)用程序檢查排隊(duì)消息。接收應(yīng)用程序賦予標(biāo)識接收隊(duì)列的子隊(duì)列的子隊(duì)列下標(biāo)值。應(yīng)用程序?qū)⒆雨?duì)列下標(biāo)值存儲在隊(duì)列標(biāo)識符的下標(biāo)值部分中,以便于根據(jù)消息檢查在邏輯上將消息從接收隊(duì)列移到接收隊(duì)列的已標(biāo)識子隊(duì)列中。
在其它實(shí)施例中,消息在各隊(duì)列之間移動。例如,隊(duì)列管理器接收標(biāo)識第一隊(duì)列的第一句柄。該第一句柄包括標(biāo)識隊(duì)列的父部分的父值,以及標(biāo)識隊(duì)列的第一子部分的第一下標(biāo)值。隊(duì)列管理器使用該第一句柄來定位第一隊(duì)列內(nèi)的消息。該消息包括一隊(duì)列標(biāo)識符,具有存儲父值的父值部分以及存儲第一下標(biāo)值的下標(biāo)值部分。
隊(duì)列管理器接收第二句柄,該第二句柄標(biāo)識要接收定位消息的第二隊(duì)列。該第二句柄包括相同的父值,以及標(biāo)識隊(duì)列的第二子部分的第二下標(biāo)值。該隊(duì)列管理器將第二下標(biāo)值存儲在隊(duì)列標(biāo)識符的下標(biāo)值部分中,以便于在邏輯上將消息從第一隊(duì)列移到第二隊(duì)列。
根據(jù)本發(fā)明各原理劃分并移動的消息可存儲在計(jì)算機(jī)可讀介質(zhì)上。該消息可包括存儲表示電子消息內(nèi)容的內(nèi)容值的內(nèi)容字段。該消息可包括存儲標(biāo)識隊(duì)列的隊(duì)列標(biāo)識符的隊(duì)列標(biāo)識符字段,在該隊(duì)列中要排入內(nèi)容字段中表示的電子消息的內(nèi)容。該隊(duì)列標(biāo)識符字段還可包括存儲標(biāo)識隊(duì)列父部分的父值的父值字段,以及存儲標(biāo)識隊(duì)列子部分的下標(biāo)值的下標(biāo)值字段。
本發(fā)明的這些和其它特征及優(yōu)點(diǎn)將從以下描述和所附權(quán)利要求中變得更加顯而易見,或可從下文陳述的本發(fā)明實(shí)踐中獲知。
為了進(jìn)一步闡述本發(fā)明的上述和其它優(yōu)點(diǎn)及特征,本發(fā)明的更具體描述將參照附圖中所示的特定實(shí)施例提交??梢岳斫?,這些附圖僅示出本發(fā)明的典型實(shí)施例并因此不被視為限制其范圍。本發(fā)明通過使用以下附圖以附加細(xì)節(jié)進(jìn)行描述和說明圖1A、1B和1C示出便于使用子隊(duì)列來增強(qiáng)本地消息處理的計(jì)算機(jī)體系結(jié)構(gòu);圖2示出用于劃分隊(duì)列內(nèi)的排隊(duì)消息的方法的示例流程圖;圖3示出用于在隊(duì)列之間移動消息的方法的示例流程圖;圖4示出了本發(fā)明諸原理的適當(dāng)操作環(huán)境。
具體實(shí)施例方式
本發(fā)明原理規(guī)定使用子隊(duì)列來增強(qiáng)本地消息處理。在一些實(shí)施例中,接收到的消息被劃分成子隊(duì)列。例如,隊(duì)列管理器接收消息,用于從發(fā)送應(yīng)用程序傳遞到接收應(yīng)用程序。該消息包括隊(duì)列標(biāo)識符,該隊(duì)列標(biāo)識符具有存儲標(biāo)識接收隊(duì)列的父值的父值部分。
隊(duì)列管理器基于所存儲的父值將消息排入接收隊(duì)列。接收應(yīng)用程序檢查排隊(duì)消息。接收應(yīng)用程序賦予標(biāo)識接收隊(duì)列子隊(duì)列的子隊(duì)列下標(biāo)值。應(yīng)用程序?qū)⒆雨?duì)列下標(biāo)值存儲在隊(duì)列標(biāo)識符的下標(biāo)值部分中,以便于根據(jù)消息檢查在邏輯上將消息從接收隊(duì)列移到接收隊(duì)列的已標(biāo)識子隊(duì)列中。
在其它實(shí)施例中,消息在各隊(duì)列之間移動。例如,隊(duì)列管理器接收標(biāo)識第一隊(duì)列的第一句柄。該第一句柄包括標(biāo)識隊(duì)列的父部分的父值,以及標(biāo)識隊(duì)列的第一子部分的第一下標(biāo)值。隊(duì)列管理器使用該第一句柄來定位第一隊(duì)列內(nèi)的消息。該消息包括一隊(duì)列標(biāo)識符,具有存儲父值的父值部分以及存儲第一下標(biāo)值的下標(biāo)值部分。
隊(duì)列管理器接收第二句柄,該第二句柄標(biāo)識要接收定位消息的第二隊(duì)列。該第二句柄包括相同的父值,以及標(biāo)識隊(duì)列的第二子部分的第二下標(biāo)值。該隊(duì)列管理器將第二下標(biāo)值存儲在隊(duì)列標(biāo)識符的下標(biāo)值部分中,以便于在邏輯上將消息從第一隊(duì)列移到第二隊(duì)列。
根據(jù)本發(fā)明各原理劃分并移動的消息可存儲在計(jì)算機(jī)可讀介質(zhì)上。該消息可包括存儲表示電子消息內(nèi)容的內(nèi)容值的內(nèi)容字段。該消息可包括存儲標(biāo)識隊(duì)列的隊(duì)列標(biāo)識符的隊(duì)列標(biāo)識符字段,在該隊(duì)列中要排入內(nèi)容字段中表示的電子消息的內(nèi)容。該隊(duì)列標(biāo)識符字段還可包括存儲標(biāo)識隊(duì)列父部分的父值的父值字段,以及存儲標(biāo)識隊(duì)列子部分的下標(biāo)值的下標(biāo)值字段。
本發(fā)明范圍內(nèi)的諸實(shí)施例包括攜帶或具有存儲其上的計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)的計(jì)算機(jī)可讀介質(zhì)。這種計(jì)算機(jī)可讀介質(zhì)是任何可由通用或?qū)S糜?jì)算機(jī)系統(tǒng)訪問的可用介質(zhì)。作為示例,但非限制,這種計(jì)算機(jī)可讀介質(zhì)可包括物理存儲介質(zhì),諸如RAM、ROM、EPROM、CD-ROM或其它光盤存儲、磁盤存儲或其它磁性存儲裝置、或任何可用來以計(jì)算機(jī)可執(zhí)行指令、計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)的形式實(shí)現(xiàn)或存儲所需程序代碼,以及可由通用或?qū)S糜?jì)算機(jī)系統(tǒng)訪問的其它介質(zhì)。
在本描述及其后權(quán)利要求書中,“網(wǎng)絡(luò)”被定義為使能在計(jì)算機(jī)系統(tǒng)和/或模塊之間的電子數(shù)據(jù)傳輸?shù)囊粋€(gè)或多個(gè)數(shù)據(jù)鏈路。當(dāng)信息經(jīng)網(wǎng)絡(luò)或另一到計(jì)算機(jī)系統(tǒng)的通信連接(硬接線的、無線的、或硬接線或無線的組合)傳送或提供時(shí),該連接完全被視為計(jì)算機(jī)可讀介質(zhì)。因而,任何這種連接完全被稱為計(jì)算機(jī)可讀介質(zhì)。以上組合也應(yīng)包括于計(jì)算機(jī)可讀介質(zhì)的范圍內(nèi)。計(jì)算機(jī)可執(zhí)行指令包括,例如使通用計(jì)算機(jī)系統(tǒng)或?qū)S糜?jì)算機(jī)系統(tǒng)執(zhí)行某功能或某組功能的指令和數(shù)據(jù)。計(jì)算機(jī)可執(zhí)行指令可以是例如二進(jìn)制的、諸如匯編語言的中間格式指令、或甚至源代碼。
在本描述及其后權(quán)利要求書中,“計(jì)算機(jī)系統(tǒng)”被定義為一起工作以對電子數(shù)據(jù)執(zhí)行操作的一個(gè)或多個(gè)軟件模塊、一個(gè)或多個(gè)硬件模塊、或其組合。例如,計(jì)算機(jī)系統(tǒng)的定義包括個(gè)人計(jì)算機(jī)的硬件組件、以及諸如個(gè)人計(jì)算機(jī)操作系統(tǒng)的軟件模塊。這些模塊的物理布局并不重要。計(jì)算機(jī)系統(tǒng)可包括通過網(wǎng)絡(luò)耦合的一個(gè)或多個(gè)計(jì)算機(jī)。類似地,計(jì)算機(jī)系統(tǒng)可包括單個(gè)物理裝置(諸如移動電話或個(gè)人數(shù)字助理“PDA”),其中內(nèi)部模塊(諸如存儲器和處理器)一起工作以對電子數(shù)據(jù)執(zhí)行操作。
本領(lǐng)域技術(shù)人員將理解,本發(fā)明可在具有許多類計(jì)算機(jī)系統(tǒng)配置的網(wǎng)絡(luò)計(jì)算環(huán)境中實(shí)踐,包括個(gè)人計(jì)算機(jī)、膝上型計(jì)算機(jī)、手持式設(shè)備、多處理器系統(tǒng)、基于微處理器或可編程的消費(fèi)電器、網(wǎng)絡(luò)PC、小型計(jì)算機(jī)、大型計(jì)算機(jī)、移動電話、PDA、尋呼機(jī)等。本發(fā)明還可在分布式系統(tǒng)環(huán)境中實(shí)踐,其中通過網(wǎng)絡(luò)鏈接(通過硬接線數(shù)據(jù)鏈接、無線數(shù)據(jù)鏈接、或通過硬接線和無線數(shù)據(jù)鏈接的組合)的本地和遠(yuǎn)程計(jì)算機(jī)系統(tǒng)都執(zhí)行任務(wù)。在分布式系統(tǒng)環(huán)境中,程序模塊可位于本地和遠(yuǎn)程存儲器存儲裝置中。
圖1A、1B和1C示出便于使用子隊(duì)列增強(qiáng)本地消息處理的計(jì)算機(jī)體系結(jié)構(gòu)100(或其一部分)的示例。在計(jì)算機(jī)體系結(jié)構(gòu)100(圖1A)中示出的是計(jì)算機(jī)相同101、網(wǎng)絡(luò)105和計(jì)算機(jī)系統(tǒng)111。計(jì)算機(jī)系統(tǒng)101和111的每一個(gè)都與網(wǎng)絡(luò)105相連,比如局域網(wǎng)(“LAN”)、廣域網(wǎng)(“WAN”)、甚或因特網(wǎng)。計(jì)算機(jī)系統(tǒng)連接網(wǎng)絡(luò)105可從其它計(jì)算機(jī)系統(tǒng)連接網(wǎng)絡(luò)105收發(fā)數(shù)據(jù)。因此,計(jì)算機(jī)系統(tǒng)101、111,以及其它相連計(jì)算機(jī)系統(tǒng)(未示出)可創(chuàng)建消息相關(guān)數(shù)據(jù)并在網(wǎng)絡(luò)上交換消息相關(guān)數(shù)據(jù)(例如因特網(wǎng)協(xié)議(“IP”)數(shù)據(jù)包和使用IP數(shù)據(jù)包的其它高層協(xié)議,諸如傳輸控制協(xié)議(“TCP”)、超文本傳輸協(xié)議(“HTTP”)、簡單郵件傳輸協(xié)議(“SMTP”)等)。例如,計(jì)算機(jī)系統(tǒng)101和111創(chuàng)建SOAP包封(envelope),在網(wǎng)絡(luò)105上交換SOAP包封,并接收SOAP包封。
計(jì)算機(jī)系統(tǒng)101包括應(yīng)用程序102和隊(duì)列管理器108。應(yīng)用程序102可以是分布式應(yīng)用程序的一部分,比如Web服務(wù)。隊(duì)列管理器108包括并控制傳輸隊(duì)列107的操作。例如,隊(duì)列管理器108控制使消息排隊(duì)以及從傳輸隊(duì)列107中解散消息。
計(jì)算機(jī)系統(tǒng)111包括應(yīng)用程序102和隊(duì)列管理器118。應(yīng)用程序112可以是分布式應(yīng)用程序的一部分,比如Web服務(wù)。隊(duì)列管理器118包括并控制接收隊(duì)列117的操作。例如,隊(duì)列管理器118控制使消息排入發(fā)送隊(duì)列以及從發(fā)送隊(duì)列117中輸出消息。
應(yīng)用程序102和應(yīng)用程序112可以是同一分布式應(yīng)用程序的各個(gè)部分。因而,不時(shí)地,應(yīng)用程序102向應(yīng)用程序112發(fā)送消息(并潛在地從中接收消息)。為了向應(yīng)用程序112發(fā)送消息,應(yīng)用程序102和隊(duì)列管理器108可例如根據(jù)捕捉協(xié)議,使消息122排入傳輸隊(duì)列107。然后在適當(dāng)時(shí)候,隊(duì)列管理器108可將消息122通過網(wǎng)絡(luò)105傳送給隊(duì)列管理器118。
通常,消息可以是包括具有一個(gè)或多個(gè)數(shù)據(jù)字段的標(biāo)頭部分、以及具有一個(gè)或多個(gè)數(shù)據(jù)字段的主體部分的數(shù)據(jù)結(jié)構(gòu)。例如,消息(例如消息122)可包括內(nèi)容字段,它存儲表示電子消息內(nèi)容的內(nèi)容值(例如由內(nèi)容127表示)的內(nèi)容字段。消息還可包括隊(duì)列標(biāo)識符字段,它存儲標(biāo)識其中要排入在內(nèi)容字段中表示的電子消息內(nèi)容的隊(duì)列(例如由隊(duì)列ID 123表示)的隊(duì)列標(biāo)識符值。隊(duì)列標(biāo)識符字段還可包括存儲標(biāo)識隊(duì)列父部分的父值(例如由父值124表示)的父值字段,以及標(biāo)識隊(duì)列子部分的下標(biāo)值(例如由下標(biāo)值136表示)的下標(biāo)值字段。其它字段也可包括在用于表示消息的數(shù)據(jù)結(jié)構(gòu)中。
隊(duì)列標(biāo)識符可根據(jù)各種不同命名方案來格式化。在一些實(shí)施例中,隊(duì)列標(biāo)識符包括固定長度的父值和固定長度的下標(biāo)值。在其它實(shí)施例中,隊(duì)列標(biāo)識符包括可變長度的父值和固定長度的下標(biāo)值。這些其它實(shí)施例提供對于父值的附加靈活性,并允許下標(biāo)值的原地變化。在另外的實(shí)施例中,隊(duì)列標(biāo)識符包括可變長度的下標(biāo)值。在這些另外實(shí)施例中,保留了最大可能下標(biāo)值的足夠空間。
應(yīng)用程序可為每個(gè)隊(duì)列定義任何數(shù)量的本地子隊(duì)列。例如,應(yīng)用程序112可為隊(duì)列117定義子隊(duì)列117A和117B。子隊(duì)列保留導(dǎo)出它的隊(duì)列的所有屬性。例如,子隊(duì)列117A和117B保留隊(duì)列117的全部屬性,包括配額、安全性、事務(wù)類型、經(jīng)驗(yàn)證的、私密度屬性。
子隊(duì)列可通過在隊(duì)列ID中存入新的(或否則不是當(dāng)前使用的)下標(biāo)值。因而,不需要獨(dú)立的隊(duì)列創(chuàng)建機(jī)制來創(chuàng)建子隊(duì)列。例如,新的子隊(duì)列可通過調(diào)用包括新下標(biāo)值的MessageMove應(yīng)用程序接口(“API”)創(chuàng)建。當(dāng)新的下標(biāo)值被復(fù)制成唯一ID時(shí),新的子隊(duì)列在邏輯上被創(chuàng)建,且結(jié)果相應(yīng)的消息在邏輯上被存儲在子隊(duì)列中。當(dāng)沒有消息包含先前使用的下標(biāo)值時(shí)(即,當(dāng)先前占據(jù)子隊(duì)列的所有消息被移到其它子隊(duì)列或已由接收應(yīng)用程序消耗時(shí)),子隊(duì)列在邏輯上被刪除。
圖2示出用于劃分隊(duì)列內(nèi)的排隊(duì)消息的方法的示例流程圖。方法200將參照圖1A中的組件和消息進(jìn)行描述。
方法200包括從發(fā)送應(yīng)用程序接收消息的動作,所述消息用于傳遞給接收應(yīng)用程序(動作201)。例如,隊(duì)列管理器118可接收來自隊(duì)列管理器108的消息122。該消息可包括一隊(duì)列標(biāo)識符。例如,消息122包括隊(duì)列ID123。隊(duì)列標(biāo)識符具有父值部分,它存儲標(biāo)識接收隊(duì)列的父值。例如,隊(duì)列ID 123包括標(biāo)識接收隊(duì)列117的父值124。
方法200包括基于所存儲的父值將消息排入接收隊(duì)列的動作(動作202)。例如,隊(duì)列管理器118可將消息122排入接收隊(duì)列117中。隊(duì)列管理器118可基于父值124(例如通過應(yīng)用程序102包括在消息中的URI)標(biāo)識接收隊(duì)列117。
方法200包括檢查排隊(duì)消息的動作(動作203)。檢查排隊(duì)消息可包括檢查排隊(duì)消息的內(nèi)容,比如消息主體和/或消息標(biāo)頭。例如,應(yīng)用程序112可檢查(或窺視)內(nèi)容127。基于所指定的管理員可配置的數(shù)據(jù)規(guī)則,可確定消息122可被劃分或路由到相應(yīng)子隊(duì)列中。例如,如果消息122的檢查展現(xiàn)消息122是有害消息,則消息122可移到有害消息子隊(duì)列中(稍后可移回父隊(duì)列)?;蛘?,數(shù)據(jù)路由可用來將數(shù)據(jù)的各大部分拆分或劃分到多個(gè)子隊(duì)列中,每個(gè)子隊(duì)列包含該較大部分?jǐn)?shù)據(jù)的一個(gè)子集。例如,如果消息122的檢查展現(xiàn)電話號碼在000-0000~399-9999的范圍內(nèi),則消息122可被路由到第一子隊(duì)列;如果電話號碼在400-0000~699-9999的范圍內(nèi),則消息122可被路由到第二子隊(duì)列;以及如果電話號碼在700-0000~999-9999的范圍內(nèi),則消息122可被路由到第三子隊(duì)列。
方法200包括賦予標(biāo)識接收隊(duì)列的子隊(duì)列的子隊(duì)列下標(biāo)值的動作(動作204)。例如,應(yīng)用程序112可賦予下標(biāo)值126,該下標(biāo)值126與父值124一起標(biāo)識子隊(duì)列117A。應(yīng)用程序112可基于消息檢查的結(jié)果標(biāo)識子隊(duì)列。例如,基于消息122的檢查,應(yīng)用程序112可確定消息112要被路由到子隊(duì)列117A。
因而,通常隊(duì)列ID可用以下標(biāo)注表示“父值;下標(biāo)值”,其中父值標(biāo)識隊(duì)列而下標(biāo)值標(biāo)識所標(biāo)識隊(duì)列的子部分。父值可以是外部模塊(例如應(yīng)用程序122)用來標(biāo)識隊(duì)列(例如隊(duì)列117)的URI。下標(biāo)值可以是本地應(yīng)用程序(例如應(yīng)用程序112)用來標(biāo)識父值的子部分的字符(例如Unicode字符)串。
隊(duì)列的被標(biāo)識子部分可以是子隊(duì)列。例如,“父值124;下標(biāo)值126”可本地地用來標(biāo)識子隊(duì)列117A。然而,隊(duì)列的被標(biāo)識子部分也可以是父隊(duì)列。例如,“父隊(duì)列124;下標(biāo)值136”可用來本地地標(biāo)識父隊(duì)列117P。在一些實(shí)施例中,被保留的下標(biāo)值(例如0)或空下標(biāo)值(表示為“父隊(duì)列124;”)用來本地地標(biāo)識父隊(duì)列。
方法200包括將子隊(duì)列下標(biāo)值存儲在隊(duì)列標(biāo)識符的下標(biāo)值部分的動作(動作205)。例如,應(yīng)用程序112可將下標(biāo)值126存儲在隊(duì)列ID 123中,從而重寫下標(biāo)值136。將新的下標(biāo)值存儲在消息中具有在邏輯上將消息從接收隊(duì)列移到接收隊(duì)列的被標(biāo)識子隊(duì)列的效果。例如將下標(biāo)值126存入隊(duì)列ID 123中具有在邏輯上將消息從父隊(duì)列117P移到子隊(duì)列117A的效果。
如前所述,隊(duì)列標(biāo)識符可以是具有固定長度的。應(yīng)用程序112可被配置成這樣使用下標(biāo)值使得父值和相應(yīng)下標(biāo)值的組合(或串聯(lián))不超過該固定長度。因而,應(yīng)用程序112可將消息中的下標(biāo)值原地存儲在消息(即當(dāng)消息保持物理地包含在隊(duì)列中時(shí))。因此,應(yīng)用程序112不必將消息物理地移出隊(duì)列,以在邏輯上將該消息移到另一個(gè)子隊(duì)列。結(jié)果,可執(zhí)行存儲、更新、重寫下標(biāo)值(并因而邏輯地在子隊(duì)列之間移動消息)等,而無需產(chǎn)生發(fā)回隊(duì)列管理器108的確認(rèn)消息(“ACK”)。此外,因?yàn)镾end API并不用來更新消息,所以當(dāng)消息在各子隊(duì)列之間移動時(shí)排隊(duì)消息的原始發(fā)送者的標(biāo)識得以保留。
圖1A還示出物理地包含在接收隊(duì)列117中的消息128、133和138、以及消息122。消息128包括具有父值124和下標(biāo)值126的隊(duì)列ID 129、以及內(nèi)容137。消息133包括具有父值124和下標(biāo)值136的隊(duì)列ID 129、以及內(nèi)容137。消息138包括具有父值124和下標(biāo)值141的隊(duì)列ID 139、以及內(nèi)容142。消息122、128、133和138還可包括其它字段(例如消息ID字段)。然而為清晰起見,圖1A中未示出其它字段。
邏輯拓?fù)?91表示從應(yīng)用程序112本地視角的隊(duì)列的示例拓?fù)?。邏輯拓?fù)?91包括父隊(duì)列117P(例如由“父值124;”標(biāo)識)、子隊(duì)列117A(由“父值124;下標(biāo)值126”標(biāo)識)、以及子隊(duì)列117B(由“父值124;下標(biāo)值141”標(biāo)識)。因而,從應(yīng)用程序112的角度,消息133包含在父隊(duì)列117P中,消息122和128包含在子隊(duì)列117A中,而消息138包含在子隊(duì)列138中。然而,消息保持物理地存儲在接收隊(duì)列117中。
圖1B和1C示出計(jì)算機(jī)系統(tǒng)111的其它視圖。應(yīng)用程序112可被配置成創(chuàng)建、訪問隊(duì)列句柄(例如隊(duì)列句柄160和164),并將其發(fā)送給隊(duì)列管理器118(例如通過對相應(yīng)“API”的調(diào)用)。隊(duì)列管理器118可使用隊(duì)列句柄來在隊(duì)列之間移動消息。為清晰起見,不明確示出消息122、123和138內(nèi)的字段。然而,消息122、133和138保留在圖1A中示出的字段。
圖3示出用于在隊(duì)列之間移動消息的方法的示例流程圖。方法300將參照圖1B和1C中的組件和消息來作描述。
方法300包括接收標(biāo)識第一隊(duì)列的第一句柄的動作(動作301)。第一句柄包括標(biāo)識隊(duì)列父部分的父值,以及標(biāo)識隊(duì)列第一子部分的第一下標(biāo)值。例如,隊(duì)列管理器118可接收句柄160和消息ID 161。句柄160包括父值124和標(biāo)識子隊(duì)列117A的下標(biāo)值126。如前所述,隊(duì)列父值124標(biāo)識隊(duì)列117,而下標(biāo)值126標(biāo)識子隊(duì)列117A。消息ID 161可以是消息128的消息ID。當(dāng)開始在隊(duì)列管理器118上接收消息128時(shí),應(yīng)用程序112可訪問并存儲消息ID 161。
方法300包括使用第一句柄來定位第一隊(duì)列內(nèi)的消息的動作(動作302)。該消息包括隊(duì)列標(biāo)識符,該隊(duì)列標(biāo)識符具有存儲父值的父值部分以及存儲第一下標(biāo)值的下標(biāo)值部分。例如,隊(duì)列管理器118可使用句柄160來定位子隊(duì)列117A內(nèi)的消息128。消息128包括具有父值124和下標(biāo)值126的隊(duì)列ID 129。
為了定位消息128,隊(duì)列管理器118可從隊(duì)列117中標(biāo)識邏輯上存儲在子隊(duì)列117A中的消息子集。例如,隊(duì)列管理器118可搜索包括下標(biāo)值126的消息。然后,從被標(biāo)識消息的子集中,隊(duì)列管理器118可通過匹配來自句柄160的消息ID 161和消息128中所包含的消息ID 161來定位消息128。
方法300包括接收標(biāo)識要接收已定位消息的第二隊(duì)列的第二句柄的動作(動作303)。該第二句柄包括父值、以及標(biāo)識該隊(duì)列的第二子部分的第二下標(biāo)值。例如,隊(duì)列管理器118可接收標(biāo)識子隊(duì)列117B的句柄164。句柄164包括父值124和下標(biāo)值141。
方法300包括將第二下標(biāo)值存儲在隊(duì)列標(biāo)識符的下標(biāo)值部分,以便于在邏輯上將消息從第一隊(duì)列移到第二隊(duì)列(動作304)。例如,隊(duì)列管理器118可將下標(biāo)值141合適地存儲在隊(duì)列ID 129中。圖1C示出存儲在子隊(duì)列117B中的消息128。在子隊(duì)列之間移動消息不改變隊(duì)列117中消息的順序。
如前所述,應(yīng)用程序可調(diào)用隊(duì)列管理器API來在子隊(duì)列之間移動消息。以下是移動API的一個(gè)示例HRESULT APIENTRY MQMoveMessage(QUEUEHANDLE hQueueFrom,ULONGLONG ulLookupId,QUEUEHANDLE hQueueTo,ITransaction*pTransaction,);使用該示例移動API,hQueueFrom值表示包含消息的隊(duì)列的句柄(輸入值)、ulLookupId值表示先前在事務(wù)中接收的消息的LookupId(輸入值),hQueueTo值表示在Commit(提交)或Receive(接收)之后將包含消息的隊(duì)列的句柄。隊(duì)列可相關(guān)為同一父隊(duì)列的子隊(duì)列,或者可以是父隊(duì)列本身。pTransaction值表示指向事務(wù)對象或常數(shù)的指針。事務(wù)對象可從消息排隊(duì)的內(nèi)部獲取,從分布式事務(wù)協(xié)調(diào)程序的外部獲取,或從當(dāng)前環(huán)境中隱式地獲取。示例移動API可在例如應(yīng)用程序決定不立即處理消息并想要將消息移到另一個(gè)本地隊(duì)列用于后續(xù)處理時(shí)調(diào)用。
應(yīng)用程序還可使用其它API來獲取隊(duì)列信息。例如,應(yīng)用程序可調(diào)用返回子隊(duì)列信息的get into(進(jìn)入)API,這些子隊(duì)列信息諸如隊(duì)列中子隊(duì)列的數(shù)量和子隊(duì)列名稱的數(shù)組。這種信息可由應(yīng)用程序在創(chuàng)建信息并在各子隊(duì)列之間移動信息時(shí)使用。
因而,本發(fā)明的各個(gè)實(shí)施例通過改變隊(duì)列ID的下標(biāo)值便于在隊(duì)列之間移動消息。因此,消息可以資源有效方式在各子隊(duì)列之間移動,無需消息真正離開并重新進(jìn)入消息傳送系統(tǒng)。結(jié)果,可保留原始發(fā)送者的標(biāo)識。此外,當(dāng)消息保留在消息傳送系統(tǒng)內(nèi)時(shí),傳遞確認(rèn)不會在消息在隊(duì)列之間移動時(shí)發(fā)回原始發(fā)送者。因而,原始發(fā)送者不會潛在地在消息實(shí)際上在隊(duì)列之間傳送時(shí)給出,指示消息已被傳遞給了接收應(yīng)用程序的不正確信息。
參照圖4,實(shí)現(xiàn)本發(fā)明的示例性系統(tǒng)具有計(jì)算機(jī)系統(tǒng)420形式的通用計(jì)算設(shè)備,包括處理單元421、系統(tǒng)存儲器422以及把包括系統(tǒng)存儲器422在內(nèi)的各種系統(tǒng)組件耦合到處理單元421的系統(tǒng)總線423。處理單元421可執(zhí)行被設(shè)計(jì)成實(shí)現(xiàn)包括本發(fā)明特征的計(jì)算機(jī)系統(tǒng)420特征的計(jì)算機(jī)可執(zhí)行指令。系統(tǒng)總線423可能是若干總線結(jié)構(gòu)類型中的任何一種,包括存儲器總線或存儲器控制器、外圍總線、以及使用多種總線架構(gòu)的任一種的本地總線。系統(tǒng)存儲器包括只讀存儲器(“ROM”)424和隨機(jī)存儲器(“RAM”)425。含有幫助在個(gè)人計(jì)算機(jī)420中元件之間,如啟動期間的信息交換的基本例程的基本輸入/輸出系統(tǒng)(“BIOS”)426存儲在ROM 424中。
計(jì)算機(jī)系統(tǒng)420還包括讀取和寫入磁性硬盤439的硬盤驅(qū)動器427、讀取或?qū)懭肟梢苿哟疟P429的磁盤驅(qū)動器428、和讀取或?qū)懭胫T如CD ROM或其它光學(xué)介質(zhì)等可移動光盤431的光盤驅(qū)動器430。磁性硬盤驅(qū)動器427、磁盤驅(qū)動器428、光盤驅(qū)動器430分別通過硬盤驅(qū)動器接口432、磁盤驅(qū)動器接口433、光盤驅(qū)動器接口434連接至系統(tǒng)總線423。諸驅(qū)動器及其相關(guān)聯(lián)計(jì)算機(jī)可讀介質(zhì)為計(jì)算機(jī)420提供計(jì)算機(jī)可執(zhí)行指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊和其它數(shù)據(jù)的非易失性儲存。盡管在此所述示例性環(huán)境采用了磁性硬盤439、可移動磁盤429和可移動光盤431,但可使用其它類型計(jì)算機(jī)可訪問的能夠存儲數(shù)據(jù)的計(jì)算機(jī)可讀介質(zhì),包括磁卡、閃存卡、數(shù)字通用盤、Bernoulli卡、RAM、ROM等等。
包括操作系統(tǒng)435、一個(gè)或多個(gè)應(yīng)用程序436、其它程序模塊437和程序數(shù)據(jù)438的一個(gè)或多個(gè)程序模塊的程序代碼裝置,可以存儲在硬盤439、磁盤429、光盤431、ROM 424或RAM 425中。用戶可通過諸如鍵盤440、定位裝置442或諸如話筒、游戲桿、游戲墊、掃描儀等等的其它輸入裝置(未示出)向計(jì)算機(jī)系統(tǒng)420輸入命令和信息。這些和其它輸入裝置常常通過與系統(tǒng)總線423耦合的輸入/輸出接口446連接到處理單元421。輸入/輸出接口446邏輯上表示各種不同接口的任一種,諸如串行端口、PS/2接口、并行端口、通用串行總線(“USB”)或一電氣和電子工程師協(xié)會(“IEEE”)1394接口(即FireWire接口),或者甚至可在邏輯上表示不同接口的組合。
監(jiān)視器447或其它顯示裝置也通過視頻接口448和系統(tǒng)總線423相連。其它外圍輸出裝置(未示出),如揚(yáng)聲器和打印機(jī),也可連接到計(jì)算機(jī)系統(tǒng)420。
計(jì)算機(jī)系統(tǒng)420可與諸如辦公室范圍或企業(yè)范圍的計(jì)算機(jī)網(wǎng)絡(luò)、家庭網(wǎng)絡(luò)、內(nèi)聯(lián)網(wǎng)、和/或因特網(wǎng)的網(wǎng)絡(luò)相連。計(jì)算機(jī)系統(tǒng)420可與這些網(wǎng)絡(luò)上諸如遠(yuǎn)程計(jì)算機(jī)系統(tǒng)、遠(yuǎn)程應(yīng)用程序、和/或遠(yuǎn)程數(shù)據(jù)庫的外部源交換數(shù)據(jù)。
計(jì)算機(jī)系統(tǒng)420包括網(wǎng)絡(luò)接口453,通過它計(jì)算機(jī)系統(tǒng)420可從外部源接收數(shù)據(jù)和/或向外部源傳送數(shù)據(jù)。如圖4所示,網(wǎng)絡(luò)接口453便于通過鏈接451與遠(yuǎn)程計(jì)算機(jī)系統(tǒng)483交換數(shù)據(jù)。網(wǎng)絡(luò)接口453可邏輯地表示一個(gè)或多個(gè)軟件和/或硬件模塊,諸如網(wǎng)絡(luò)接口卡和相應(yīng)的網(wǎng)絡(luò)驅(qū)動器接口規(guī)范(“NDIS”)堆棧。鏈接451表示網(wǎng)絡(luò)的一部分(例如以太網(wǎng)分段),而遠(yuǎn)程計(jì)算機(jī)系統(tǒng)483表示網(wǎng)絡(luò)的節(jié)點(diǎn)。
類似地,計(jì)算機(jī)系統(tǒng)420包括輸入/輸出接口446,通過它計(jì)算機(jī)系統(tǒng)420可從外部源接收數(shù)據(jù)和/或向外部源傳送數(shù)據(jù)。輸入/輸出接口446通過數(shù)據(jù)鏈接459與調(diào)制解調(diào)器454(例如標(biāo)準(zhǔn)調(diào)制解調(diào)器、電纜調(diào)制解調(diào)器、或數(shù)字預(yù)訂線路(“DSL”)調(diào)制解調(diào)器)耦合,通過該鏈接計(jì)算機(jī)系統(tǒng)420可從外部源接收數(shù)據(jù)和/或向外部源傳送數(shù)據(jù)。如圖4所示,輸入/輸出接口446便于通過鏈接452與遠(yuǎn)程計(jì)算機(jī)系統(tǒng)493交換數(shù)據(jù)。鏈接452表示網(wǎng)絡(luò)的一部分,而遠(yuǎn)程計(jì)算機(jī)系統(tǒng)493表示網(wǎng)絡(luò)的節(jié)點(diǎn)。
盡管圖4示出本發(fā)明的適當(dāng)操作環(huán)境,但可在任何能夠?qū)崿F(xiàn)本發(fā)明原理的系統(tǒng)(如必要作適當(dāng)修改)中采用本發(fā)明原理。圖4所示的環(huán)境僅是說明性的,而決不表示其中可實(shí)現(xiàn)本發(fā)明原理的各種各樣環(huán)境的甚至一小部分。
根據(jù)本發(fā)明,可在與計(jì)算機(jī)系統(tǒng)420相關(guān)聯(lián)的任一種計(jì)算機(jī)可讀介質(zhì)中存儲包括應(yīng)用程序、隊(duì)列管理器、傳輸隊(duì)列、接收隊(duì)列的模塊,以及包括應(yīng)用程序消息、隊(duì)列標(biāo)識符、父值、下標(biāo)值、內(nèi)容和消息ID的關(guān)聯(lián)數(shù)據(jù),并對它們作訪問。例如,這些模塊的各個(gè)部分和相關(guān)聯(lián)程序數(shù)據(jù)的各個(gè)部分可被包括在操作系統(tǒng)435、應(yīng)用程序436、程序模塊437和/或程序數(shù)據(jù)438中,用于存儲在系統(tǒng)存儲器422中。
當(dāng)比如磁性硬盤439的大容量存儲設(shè)備與計(jì)算機(jī)系統(tǒng)420相耦合時(shí),這些模塊和關(guān)聯(lián)程序數(shù)據(jù)還可存儲在大容量存儲設(shè)備中。在網(wǎng)絡(luò)化環(huán)境中,所示與計(jì)算機(jī)系統(tǒng)420相關(guān)的程序模塊或其一部分可被存儲在遠(yuǎn)程存儲器存儲設(shè)備中,諸如與遠(yuǎn)程計(jì)算機(jī)系統(tǒng)483和/或遠(yuǎn)程計(jì)算機(jī)系統(tǒng)493相關(guān)聯(lián)的系統(tǒng)存儲器和/或大容量存儲設(shè)備。執(zhí)行這些模塊可在如前所述的分布式環(huán)境中進(jìn)行。
本發(fā)明可體現(xiàn)為其它特定形式,而不背離其精神或本質(zhì)特征。所述諸實(shí)施例在所有方面都應(yīng)僅僅被視為是說明性的,而不是限制性的。因此,本發(fā)明的范圍由所附權(quán)利要求書而不是前面的說明書來指出。在權(quán)利要求書的等效技術(shù)方案的含義和范圍內(nèi)的所有變化被包含在其范圍內(nèi)。
權(quán)利要求
1.在可與一個(gè)或多個(gè)其它計(jì)算機(jī)系統(tǒng)一起網(wǎng)絡(luò)連接到網(wǎng)絡(luò)的計(jì)算機(jī)系統(tǒng)上,所述計(jì)算機(jī)系統(tǒng)包括控制所述計(jì)算機(jī)系統(tǒng)上一個(gè)或多個(gè)消息隊(duì)列的隊(duì)列管理器,一種用于有效劃分隊(duì)列內(nèi)排隊(duì)的消息的方法,所述方法包括所述隊(duì)列管理器從發(fā)送應(yīng)用程序接收消息的動作,所述消息用于傳遞給接收應(yīng)用程序,所述消息包括隊(duì)列標(biāo)識符,所述隊(duì)列標(biāo)識符具有存儲標(biāo)識接收隊(duì)列的父值的父值部分;所述隊(duì)列管理器基于所存儲的父值將所述消息排入所述接收隊(duì)列的動作;所述接收應(yīng)用程序檢查所述入隊(duì)消息的動作;賦予子隊(duì)列下標(biāo)值的動作,所述子隊(duì)列下標(biāo)值標(biāo)識所述接收隊(duì)列的子隊(duì)列;將所述子隊(duì)列下標(biāo)值存儲在所述隊(duì)列標(biāo)識符的下標(biāo)值部分中,從而根據(jù)所述消息檢查在邏輯上將所述消息從接收隊(duì)列移到接收隊(duì)列的被標(biāo)識子隊(duì)列中的動作。
2.如權(quán)利要求1所述的方法,其特征在于,所述隊(duì)列管理器基于所存儲的父值將所述消息排入所述接收隊(duì)列的動作包括,基于包括標(biāo)識接收隊(duì)列的URI的消息將所述消息排入所述接收隊(duì)列的動作。
3.如權(quán)利要求1所述的方法,其特征在于,所述接收應(yīng)用程序檢查排隊(duì)消息的動作包括,將可配置數(shù)據(jù)規(guī)則應(yīng)用于所述消息以確定要如何處理所述消息的動作。
4.如權(quán)利要求1所述的方法,其特征在于,訪問標(biāo)識所述接收隊(duì)列的子隊(duì)列的子隊(duì)列下標(biāo)值的動作包括訪問一個(gè)或多個(gè)字符的字符串的動作。
5.如權(quán)利要求1所述的方法,其特征在于,將所述子隊(duì)列下標(biāo)值存儲在隊(duì)列標(biāo)識符的下標(biāo)值部分中的動作包括,基于所述消息的內(nèi)容將所述消息路由給子隊(duì)列的動作。
6.如權(quán)利要求1所述的方法,其特征在于,將所述子隊(duì)列下標(biāo)值存儲在隊(duì)列標(biāo)識符的下標(biāo)值部分中的動作包括,將所述下標(biāo)值原地存儲在隊(duì)列標(biāo)識符中,從而防止產(chǎn)生返回確認(rèn)的動作。
7.如權(quán)利要求1所述的方法,其特征在于,存儲隊(duì)列標(biāo)識符的下標(biāo)值部分的動作包括,將所述下標(biāo)值原地存儲在隊(duì)列標(biāo)識符中,從而保留所述發(fā)送應(yīng)用程序的標(biāo)識的動作。
8.在可與一個(gè)或多個(gè)其它計(jì)算機(jī)系統(tǒng)一起網(wǎng)絡(luò)連接到網(wǎng)絡(luò)的計(jì)算機(jī)系統(tǒng)上,所述計(jì)算機(jī)系統(tǒng)包括控制所述計(jì)算機(jī)系統(tǒng)上一個(gè)或多個(gè)消息隊(duì)列的隊(duì)列管理器,一種用于在各隊(duì)列之間移動消息的方法,所述方法包括接收標(biāo)識第一隊(duì)列的第一句柄的動作,所述第一句柄包括標(biāo)識隊(duì)列的父部分的父值,以及標(biāo)識隊(duì)列的第一子部分的第一下標(biāo)值;使用所述第一句柄定位所述第一隊(duì)列內(nèi)的消息的動作,所述消息包括一隊(duì)列標(biāo)識符,它具有存儲父值的父值部分以及存儲所述第一下標(biāo)值的下標(biāo)值部分。接收第二句柄的動作,所述第二句柄標(biāo)識要接收定位消息的第二隊(duì)列,所述第二句柄包括父值,以及標(biāo)識所述隊(duì)列的第二子部分的第二下標(biāo)值;以及將第二下標(biāo)值存儲在所述隊(duì)列標(biāo)識符的下標(biāo)值部分中,以便于在邏輯上將消息從第一隊(duì)列移到第二隊(duì)列的動作。
9.如權(quán)利要求8所述的方法,其特征在于,接收標(biāo)識第一隊(duì)列的第一句柄的動作包括接收標(biāo)識父隊(duì)列的第一句柄的動作。
10.如權(quán)利要求9所述的方法,其特征在于,接收標(biāo)識父隊(duì)列的所述第一句柄的動作包括接收具有空下標(biāo)值的第一句柄的動作。
11.如權(quán)利要求8所述的方法,其特征在于,接收標(biāo)識第一隊(duì)列的第一句柄的動作包括接收標(biāo)識所述第一隊(duì)列的子隊(duì)列的第一句柄的動作。
12.如權(quán)利要求8所述的方法,其特征在于,使用所述第一句柄來定位所述第一隊(duì)列內(nèi)消息的動作包括,標(biāo)識排在所述第一隊(duì)列內(nèi)的下標(biāo)值等于所述第一下標(biāo)值的消息的動作。
13.如權(quán)利要求8所述的方法,其特征在于,接收標(biāo)識第二隊(duì)列的第二句柄的動作包括,接收標(biāo)識父隊(duì)列的第二句柄的動作。
14.如權(quán)利要求13所述的方法,其特征在于,接收標(biāo)識父隊(duì)列的第二句柄的動作包括,接收具有空下標(biāo)值的第二句柄的動作。
15.如權(quán)利要求8所述的方法,其特征在于,接收標(biāo)識第二隊(duì)列的第二句柄的動作包括接收標(biāo)識所述第一隊(duì)列的子隊(duì)列的第一句柄的動作。
16.如權(quán)利要求8所述的方法,其特征在于,將所述第二下標(biāo)值存儲在所述隊(duì)列標(biāo)識符的下標(biāo)值部分,以便于在邏輯上將消息從所述第一隊(duì)列移到所述第二隊(duì)列的動作包括,在邏輯上將所述消息從所述第一隊(duì)列的一個(gè)子隊(duì)列移到所述第一隊(duì)列的另一個(gè)子隊(duì)列的動作。
17.如權(quán)利要求8所述的方法,其特征在于,將所述第二下標(biāo)值存儲在所述隊(duì)列標(biāo)識符的下標(biāo)值部分,以便于在邏輯上將消息從所述第一隊(duì)列移到所述第二隊(duì)列的動作包括,在邏輯上將所述消息從所述第一隊(duì)列的一個(gè)子隊(duì)列移到相應(yīng)父隊(duì)列的動作。
18.如權(quán)利要求8所述的方法,其特征在于,將所述第二下標(biāo)值存儲在所述隊(duì)列標(biāo)識符的下標(biāo)值部分,以便于在邏輯上將消息從所述第一隊(duì)列移到所述第二隊(duì)列的動作包括,在邏輯上將所述消息從父隊(duì)列移到所述第一隊(duì)列的相應(yīng)子隊(duì)列的動作。
19.一種或多種具有存儲于其上的表示電子消息的數(shù)據(jù)結(jié)構(gòu)的計(jì)算機(jī)可讀介質(zhì),所述數(shù)據(jù)結(jié)構(gòu)包括內(nèi)容字段,存儲表示所述電子消息的內(nèi)容的內(nèi)容值;以及隊(duì)列標(biāo)識符字段,存儲標(biāo)識隊(duì)列的隊(duì)列標(biāo)識符值,其中要將所述內(nèi)容字段中表示的電子消息的內(nèi)容入隊(duì),所述隊(duì)列標(biāo)識符字段包括父值字段,存儲標(biāo)識所述隊(duì)列父部分的父值;以及下標(biāo)值字段,存儲標(biāo)識所述隊(duì)列子部分的下標(biāo)值。
20.如權(quán)利要求19所述的一種或多種具有存儲于其上的表示電子消息的數(shù)據(jù)結(jié)構(gòu)的計(jì)算機(jī)可讀介質(zhì),其特征在于,存儲標(biāo)識所述隊(duì)列子部分的下標(biāo)值的下標(biāo)值字段包括存儲標(biāo)識所述隊(duì)列的子隊(duì)列的一個(gè)或多個(gè)字符的字符串。
全文摘要
本發(fā)明涉及使用子隊(duì)列來增強(qiáng)本地消息處理的方法、系統(tǒng)、以及計(jì)算機(jī)程序產(chǎn)品。消息包括由父部分和下標(biāo)部分組成的隊(duì)列ID。父部分標(biāo)識父值而下標(biāo)部分標(biāo)識父隊(duì)列的子隊(duì)列。消息通過改變下標(biāo)值在邏輯上在隊(duì)列之間移動,例如在子隊(duì)列之間、在父隊(duì)列和子隊(duì)列之間、以及在子隊(duì)列和父隊(duì)列之間。應(yīng)用程序可檢查各消息,并基于消息內(nèi)容(包括消息主體和標(biāo)頭)將各消息路由到指定子隊(duì)列中。下標(biāo)值可原地改變(例如當(dāng)消息保持物理地存儲在隊(duì)列中時(shí)),以便于保留消息發(fā)送者標(biāo)識并避免過早確認(rèn)傳遞(即不產(chǎn)生返回ACK)。
文檔編號G06F17/30GK1842075SQ200610051548
公開日2006年10月4日 申請日期2006年2月28日 優(yōu)先權(quán)日2005年3月28日
發(fā)明者A·達(dá)迪歐莫弗, R·D·希爾 申請人:微軟公司