專(zhuān)利名稱(chēng):可靠地傳輸排隊(duì)的應(yīng)用程序消息的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及電子消息通信,尤其涉及可靠地傳輸排隊(duì)的應(yīng)用程序消息。
背景技術(shù):
計(jì)算機(jī)系統(tǒng)和相關(guān)技術(shù)影響著社會(huì)的許多方面。實(shí)際上,計(jì)算機(jī)系統(tǒng)處理信息的能力已經(jīng)改變了人們生活和工作的方式。計(jì)算機(jī)系統(tǒng)現(xiàn)在通常執(zhí)行在計(jì)算機(jī)系統(tǒng)出現(xiàn)之前手動(dòng)執(zhí)行的大量任務(wù)(例如,文字處理、時(shí)間安排和數(shù)據(jù)庫(kù)管理)。最近,計(jì)算機(jī)系統(tǒng)被彼此耦合并耦合到其它電子設(shè)備以形成有線和無(wú)線的計(jì)算機(jī)網(wǎng)絡(luò),通過(guò)該網(wǎng)絡(luò),計(jì)算機(jī)系統(tǒng)和其它電子設(shè)備能夠傳輸電子數(shù)據(jù)。結(jié)果,在計(jì)算機(jī)系統(tǒng)上執(zhí)行的許多任務(wù)(例如,語(yǔ)音通信、訪問(wèn)電子郵件、控制家用電器、web瀏覽以及打印文檔)包括通過(guò)有線和/或無(wú)線計(jì)算機(jī)網(wǎng)絡(luò)在多個(gè)計(jì)算機(jī)系統(tǒng)和/或其它電子設(shè)備之間的電子消息交換。
網(wǎng)絡(luò)實(shí)際上已經(jīng)變得如此大量增長(zhǎng),使得簡(jiǎn)單的啟用網(wǎng)絡(luò)的計(jì)算機(jī)系統(tǒng)可以通過(guò)通常被稱(chēng)為“因特網(wǎng)”的網(wǎng)絡(luò)混合體與遍布全球的上百萬(wàn)個(gè)其它計(jì)算系統(tǒng)中的任何一個(gè)進(jìn)行通信。這樣的計(jì)算系統(tǒng)可包括臺(tái)式機(jī)、膝上型計(jì)算機(jī)或圖形輸入板個(gè)人計(jì)算機(jī);個(gè)人數(shù)字助理(PDA);電話機(jī);或能夠通過(guò)數(shù)字網(wǎng)絡(luò)通信的任何其它計(jì)算機(jī)或設(shè)備。
為通過(guò)網(wǎng)絡(luò)進(jìn)行通信,一個(gè)計(jì)算系統(tǒng)(此處被稱(chēng)為“發(fā)送計(jì)算系統(tǒng)”)構(gòu)造或訪問(wèn)電子消息,并通過(guò)網(wǎng)絡(luò)將該電子消息發(fā)送到另一計(jì)算系統(tǒng)(此處被稱(chēng)為“接收計(jì)算系統(tǒng)”)。當(dāng)該電子消息是電子郵件或即時(shí)消息時(shí),該電子消息可以由人類(lèi)用戶(hù)讀取,或者可替代地由運(yùn)行在接收計(jì)算系統(tǒng)上的應(yīng)用程序讀取。電子消息可由運(yùn)行在發(fā)送計(jì)算系統(tǒng)上的應(yīng)用程序在人類(lèi)用戶(hù)的可能的幫助下構(gòu)造。
在某些環(huán)境中,應(yīng)用程序使用排隊(duì)的通信彼此通信。排隊(duì)的通信包括發(fā)送應(yīng)用程序用于將消息寫(xiě)入隊(duì)列以及接收應(yīng)用程序用于從隊(duì)列中讀取消息的機(jī)制。隊(duì)列在各通信方外部維護(hù)通信狀態(tài),并提供了它們之間的間接層。排隊(duì)的通信是有益的,因?yàn)樗商岣呷蒎e(cuò)度。
例如,排隊(duì)的通信機(jī)制可提供故障隔離,它允許通信應(yīng)用程序失敗并獨(dú)立地重啟,而不會(huì)丟失通信狀態(tài)。即,發(fā)送應(yīng)用程序或接收應(yīng)用程序可以失敗并重啟,而不會(huì)丟失涉及發(fā)送應(yīng)用程序和接收應(yīng)用程序之間的通信的通信狀態(tài)。此外,排隊(duì)的通信機(jī)制可提供連接隔離,它允許通信應(yīng)用程序如所需地來(lái)往。由此,在將消息寫(xiě)入隊(duì)列之后,發(fā)送應(yīng)用程序可失敗,而不會(huì)影響接收應(yīng)用程序讀取排隊(duì)的消息的能力。
為提高可用性,某些隊(duì)列機(jī)制實(shí)現(xiàn)一種分布式隊(duì)列模型。例如,發(fā)送應(yīng)用程序?qū)懭氚l(fā)送應(yīng)用程序附近的隊(duì)列中,而接收應(yīng)用程序從接收應(yīng)用程序附近的(可能不同的)隊(duì)列中讀取。在分布式隊(duì)列環(huán)境中,隊(duì)列可與其它隊(duì)列往返傳輸消息,使得例如,被寫(xiě)入到發(fā)送隊(duì)列(對(duì)應(yīng)于發(fā)送應(yīng)用程序)中的消息被送達(dá)接收隊(duì)列(對(duì)應(yīng)于接收應(yīng)用程序)。
不幸的是,大多數(shù)消息排隊(duì)系統(tǒng)使用限制互操作性的專(zhuān)有協(xié)議。在某些環(huán)境中,例如相對(duì)較大的分布式網(wǎng)絡(luò)中,不同的實(shí)體可擁有各種排隊(duì)系統(tǒng)。由此,在這些環(huán)境中,可能沒(méi)有方法來(lái)確保所有的排隊(duì)系統(tǒng)都實(shí)現(xiàn)與其它排隊(duì)系統(tǒng)兼容的協(xié)議。因此,排隊(duì)系統(tǒng)可被限于僅與實(shí)現(xiàn)相同的專(zhuān)有協(xié)議的其它排隊(duì)系統(tǒng)通信。
另外,排隊(duì)環(huán)境(單個(gè)隊(duì)列和分布式隊(duì)列)具有有限的(如果有的話)用于確保應(yīng)用程序消息從發(fā)送應(yīng)用程序到接收應(yīng)用程序的安全、可靠的傳輸?shù)臋C(jī)制。例如,應(yīng)用程序或隊(duì)列故障可導(dǎo)致消息丟失。此外,存在通常有限的(如果有的話)在中介處儲(chǔ)存和轉(zhuǎn)發(fā)消息以及從存儲(chǔ)和轉(zhuǎn)發(fā)中介處的故障中恢復(fù)的機(jī)制。另外,很難保證中介確保對(duì)消息的安全性約束并滿(mǎn)足為消息指定的可靠保證。因此,用于可靠地傳輸排隊(duì)的應(yīng)用程序消息的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品將是有利的。
發(fā)明內(nèi)容
現(xiàn)有技術(shù)的上述問(wèn)題由本發(fā)明的原理克服,本發(fā)明針對(duì)用于可靠地傳輸排隊(duì)的應(yīng)用程序消息的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品。一種隊(duì)列通道接收依照諸如簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議(“SOAP”)等消息通信協(xié)議配置的應(yīng)用程序消息。隊(duì)列通道依照消息通信協(xié)議(例如,SOAP)配置入隊(duì)消息。入隊(duì)消息標(biāo)識(shí)了要將應(yīng)用程序消息排隊(duì)的消息隊(duì)列,并可能標(biāo)識(shí)對(duì)應(yīng)于該應(yīng)用程序消息的消息會(huì)話。隊(duì)列通道將應(yīng)用程序消息編碼成對(duì)應(yīng)的已編碼應(yīng)用程序消息。隊(duì)列通道將已編碼的應(yīng)用程序消息封裝在隊(duì)列消息中。隊(duì)列通道將入隊(duì)消息發(fā)送到控制所標(biāo)識(shí)的隊(duì)列的隊(duì)列管理器,使得應(yīng)用程序消息可以被排隊(duì)以送達(dá)接收計(jì)算機(jī)系統(tǒng)。
一種發(fā)送傳輸層將已編碼的應(yīng)用程序消息出隊(duì)。發(fā)送傳輸層依照消息通信協(xié)議(例如,SOAP)配置傳輸消息。發(fā)送傳輸消息標(biāo)識(shí)了接收計(jì)算系統(tǒng),并在適當(dāng)時(shí)標(biāo)識(shí)了對(duì)應(yīng)的消息會(huì)話。發(fā)送傳輸層將已編碼的消息封裝在傳輸消息中。發(fā)送傳輸層發(fā)送傳輸消息以送達(dá)接收計(jì)算系統(tǒng)。
一種發(fā)送存儲(chǔ)和轉(zhuǎn)發(fā)層訪問(wèn)該傳輸消息。發(fā)送存儲(chǔ)和轉(zhuǎn)發(fā)層將傳輸消息的傳輸頭部編碼成對(duì)應(yīng)的已編碼傳輸頭部。發(fā)送存儲(chǔ)和轉(zhuǎn)發(fā)層依照消息通信協(xié)議(例如,SOAP)配置存儲(chǔ)和轉(zhuǎn)發(fā)消息。基于發(fā)送存儲(chǔ)和轉(zhuǎn)發(fā)層系統(tǒng)相對(duì)于要接收該應(yīng)用程序消息的接收計(jì)算機(jī)系統(tǒng)的位置,發(fā)送存儲(chǔ)和轉(zhuǎn)發(fā)消息用于送達(dá)下一存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)(中介或接收計(jì)算系統(tǒng))。發(fā)送存儲(chǔ)和轉(zhuǎn)發(fā)層將已編碼的傳輸頭部和已編碼的應(yīng)用程序消息封裝到存儲(chǔ)和轉(zhuǎn)發(fā)消息中。發(fā)送存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)將該存儲(chǔ)和轉(zhuǎn)發(fā)消息轉(zhuǎn)發(fā)到下一存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)。
在某些實(shí)施例中,一個(gè)或多個(gè)中介存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)處理封裝已編碼的傳輸頭部和已編碼的應(yīng)用程序消息的存儲(chǔ)和轉(zhuǎn)發(fā)消息。一種中介存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)訪問(wèn)依照消息通信協(xié)議(例如,SOAP)配置的存儲(chǔ)和轉(zhuǎn)發(fā)消息。中介存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)基于該存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)相對(duì)于接收計(jì)算機(jī)系統(tǒng)的位置,標(biāo)識(shí)要接收所封裝的已編碼傳輸頭部和所封裝的已編碼應(yīng)用程序消息的下一存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)(另一中介存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)或接收計(jì)算機(jī)系統(tǒng))。中介存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)依照消息通信協(xié)議配置一新的存儲(chǔ)和轉(zhuǎn)發(fā)消息。中介存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)將該存儲(chǔ)和轉(zhuǎn)發(fā)消息的主體復(fù)制到該新的存儲(chǔ)和轉(zhuǎn)發(fā)消息的主體。存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)將該新的存儲(chǔ)和轉(zhuǎn)發(fā)消息轉(zhuǎn)發(fā)到下一存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)。
一種接收存儲(chǔ)和轉(zhuǎn)發(fā)層接收依照消息通信協(xié)議(例如,SOAP)配置的存儲(chǔ)和轉(zhuǎn)發(fā)消息。接收存儲(chǔ)和轉(zhuǎn)發(fā)層將已編碼的傳輸頭部解碼成對(duì)應(yīng)的傳輸頭部。接收存儲(chǔ)和轉(zhuǎn)發(fā)層依照消息通信協(xié)議(例如,SOAP)配置一傳輸消息。該接收存儲(chǔ)和轉(zhuǎn)發(fā)層在傳輸消息中包括傳輸頭部,以指示該傳輸消息將被如何傳輸?shù)綉?yīng)用程序。存儲(chǔ)和轉(zhuǎn)發(fā)層將已編碼的應(yīng)用程序消息封裝在傳輸消息中,并將該傳輸消息發(fā)送到接收傳輸層。
接收傳輸層處理該傳輸消息。傳輸層將已編碼的應(yīng)用程序消息入隊(duì),以送達(dá)應(yīng)用程序。傳輸層發(fā)送一消息可用消息,以指示應(yīng)用程序消息已被排隊(duì)。隊(duì)列監(jiān)聽(tīng)器接收該消息可用消息,并向接收傳輸層發(fā)送一出隊(duì)消息。接收傳輸層接收該出隊(duì)的消息,并依照消息協(xié)議(例如,SOAP)配置出隊(duì)響應(yīng)。接收傳輸層將已編碼的應(yīng)用程序消息封裝在出隊(duì)響應(yīng)中。
接收傳輸層將出隊(duì)響應(yīng)發(fā)送到應(yīng)用程序。隊(duì)列監(jiān)聽(tīng)器接收該出隊(duì)響應(yīng)。隊(duì)列監(jiān)聽(tīng)器將已編碼的應(yīng)用程序消息解碼成應(yīng)用程序消息,并將該應(yīng)用程序消息發(fā)送到應(yīng)用程序。本發(fā)明的這些和其它目的和特征將從以下詳細(xì)描述和所附權(quán)利要求書(shū)中變得更顯而易見(jiàn),或者可通過(guò)如下所述的對(duì)本發(fā)明的實(shí)踐而學(xué)到。
為進(jìn)一步闡述本發(fā)明的以上和其它優(yōu)點(diǎn)和特征,將參考附圖中所示的其具體實(shí)施例來(lái)呈現(xiàn)本發(fā)明的更具體描述??梢岳斫?,這些附圖僅描繪了本發(fā)明的典型實(shí)施例,并且因此并不被認(rèn)為是限制其范圍。本發(fā)明將通過(guò)使用附圖用附加的特殊性和細(xì)節(jié)來(lái)描述,附圖中圖1A和1B示出了便于可靠地傳輸排隊(duì)的應(yīng)用程序消息的計(jì)算機(jī)體系結(jié)構(gòu)的一個(gè)示例。
圖2示出了可靠地發(fā)送排隊(duì)的應(yīng)用程序消息的方法的示例流程圖。
圖3示出了可靠地轉(zhuǎn)發(fā)排隊(duì)的應(yīng)用程序消息的方法的示例流程圖。
圖4示出了可靠地接收排隊(duì)的應(yīng)用程序消息的方法的示例流程圖。
圖5示出了發(fā)送計(jì)算機(jī)系統(tǒng)處不同的可靠消息通信狀態(tài)的示例狀態(tài)圖。
圖6示出了接收計(jì)算機(jī)系統(tǒng)處不同的可靠消息通信狀態(tài)的示例狀態(tài)圖。
圖7示出了適用于本發(fā)明的原理的操作環(huán)境。
具體實(shí)施例方式
本發(fā)明的原理提供了可靠地傳輸排隊(duì)的應(yīng)用程序消息。隊(duì)列通道接收依照諸如簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議(“SOAP”)等消息通信協(xié)議配置的應(yīng)用程序消息。隊(duì)列通道依照消息通信協(xié)議(例如,SOAP)配置入隊(duì)消息。該入隊(duì)消息標(biāo)識(shí)了要將應(yīng)用程序消息排隊(duì)的消息隊(duì)列,并可能標(biāo)識(shí)對(duì)應(yīng)于應(yīng)用程序消息的消息會(huì)話。隊(duì)列通道將應(yīng)用程序消息編碼成對(duì)應(yīng)的已編碼應(yīng)用程序消息。隊(duì)列通道將已編碼的應(yīng)用程序消息封裝在入隊(duì)消息中。隊(duì)列通道將入隊(duì)消息發(fā)送到控制所標(biāo)識(shí)隊(duì)列的隊(duì)列管理器,使得應(yīng)用程序消息可被排隊(duì)以送達(dá)接收計(jì)算機(jī)系統(tǒng)。
一種發(fā)送傳輸層將已編碼的應(yīng)用程序消息出隊(duì)。發(fā)送傳輸層依照消息通信協(xié)議(例如,SOAP)配置傳輸消息。發(fā)送傳輸消息標(biāo)識(shí)了接收計(jì)算系統(tǒng),并在適當(dāng)時(shí)標(biāo)識(shí)了對(duì)應(yīng)的消息會(huì)話。發(fā)送傳輸層將已編碼的消息封裝在傳輸消息中。發(fā)送傳輸層發(fā)送傳輸消息以送達(dá)接收計(jì)算系統(tǒng)。
一種發(fā)送存儲(chǔ)和轉(zhuǎn)發(fā)層訪問(wèn)該傳輸消息。發(fā)送存儲(chǔ)和轉(zhuǎn)發(fā)層將傳輸消息的傳輸頭部編碼成對(duì)應(yīng)的已編碼傳輸頭部。發(fā)送存儲(chǔ)和轉(zhuǎn)發(fā)層依照消息通信協(xié)議(例如,SOAP)配置存儲(chǔ)和轉(zhuǎn)發(fā)消息?;诎l(fā)送存儲(chǔ)和轉(zhuǎn)發(fā)層系統(tǒng)相對(duì)于要接收該應(yīng)用程序消息的接收計(jì)算機(jī)系統(tǒng)的位置,發(fā)送存儲(chǔ)和轉(zhuǎn)發(fā)消息用于送達(dá)下一存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)(中介或接收計(jì)算系統(tǒng))。發(fā)送存儲(chǔ)和轉(zhuǎn)發(fā)層將已編碼的傳輸頭部和已編碼的應(yīng)用程序消息封裝到存儲(chǔ)和轉(zhuǎn)發(fā)消息中。發(fā)送存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)將該存儲(chǔ)和轉(zhuǎn)發(fā)消息轉(zhuǎn)發(fā)到下一存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)。
在某些實(shí)施例中,一個(gè)或多個(gè)中介存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)處理封裝已編碼的傳輸頭部和已編碼的應(yīng)用程序消息的存儲(chǔ)和轉(zhuǎn)發(fā)消息。一種中介存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)訪問(wèn)依照消息通信協(xié)議(例如,SOAP)配置的存儲(chǔ)和轉(zhuǎn)發(fā)消息。中介存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)基于該存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)相對(duì)于接收計(jì)算機(jī)系統(tǒng)的位置,標(biāo)識(shí)要接收所封裝的已編碼傳輸頭部和所封裝的已編碼應(yīng)用程序消息的下一存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)(另一中介存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)或接收計(jì)算機(jī)系統(tǒng))。中介存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)依照消息通信協(xié)議配置一新的存儲(chǔ)和轉(zhuǎn)發(fā)消息。中介存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)將該存儲(chǔ)和轉(zhuǎn)發(fā)消息的主體復(fù)制到該新的存儲(chǔ)和轉(zhuǎn)發(fā)消息的主體。存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)將該新的存儲(chǔ)和轉(zhuǎn)發(fā)消息轉(zhuǎn)發(fā)到下一存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)。
一種接收存儲(chǔ)和轉(zhuǎn)發(fā)層接收依照消息通信協(xié)議(例如,SOAP)配置的存儲(chǔ)和轉(zhuǎn)發(fā)消息。接收存儲(chǔ)和轉(zhuǎn)發(fā)層將已編碼的傳輸頭部解碼成對(duì)應(yīng)的傳輸頭部。接收存儲(chǔ)和轉(zhuǎn)發(fā)層依照消息通信協(xié)議(例如,SOAP)配置一傳輸消息。該接收存儲(chǔ)和轉(zhuǎn)發(fā)層在傳輸消息中包括傳輸頭部,以指示該傳輸消息將被如何傳輸?shù)綉?yīng)用程序。存儲(chǔ)和轉(zhuǎn)發(fā)層將已編碼的應(yīng)用程序消息封裝在傳輸消息中,并將該傳輸消息發(fā)送到接收傳輸層。
接收傳輸層處理該傳輸消息。傳輸層將已編碼的應(yīng)用程序消息入隊(duì),以送達(dá)應(yīng)用程序。傳輸層發(fā)送一消息可用消息,以指示應(yīng)用程序消息已被排隊(duì)。隊(duì)列監(jiān)聽(tīng)器接收該消息可用消息,并向接收傳輸層發(fā)送一出隊(duì)消息。接收傳輸層接收該出隊(duì)的消息,并依照消息協(xié)議(例如,SOAP)配置出隊(duì)響應(yīng)。接收傳輸層將已編碼的應(yīng)用程序消息封裝在出隊(duì)響應(yīng)中。
接收傳輸層將出隊(duì)響應(yīng)發(fā)送到應(yīng)用程序。隊(duì)列監(jiān)聽(tīng)器接收該出隊(duì)響應(yīng)。隊(duì)列監(jiān)聽(tīng)器將已編碼的應(yīng)用程序消息解碼成應(yīng)用程序消息,并將該應(yīng)用程序消息發(fā)送到應(yīng)用程序。
本發(fā)明的范圍內(nèi)的實(shí)施例包括用于攜帶或在其上儲(chǔ)存計(jì)算機(jī)指令或數(shù)據(jù)結(jié)構(gòu)的計(jì)算機(jī)可讀介質(zhì)。這類(lèi)計(jì)算機(jī)可讀介質(zhì)可以是可由通用或?qū)S糜?jì)算機(jī)訪問(wèn)的任一可用介質(zhì)。作為示例而非局限,這類(lèi)計(jì)算機(jī)可讀介質(zhì)可包括諸如RAM、ROM、EEPROM、CD-ROM或其它光盤(pán)存儲(chǔ)、磁盤(pán)存儲(chǔ)或其它磁存儲(chǔ)設(shè)備等物理存儲(chǔ)介質(zhì)、或可用來(lái)以計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)的形式攜帶或儲(chǔ)存所期望的程序代碼手段并可由通用或?qū)S糜?jì)算機(jī)訪問(wèn)的任一其它介質(zhì)。
在本說(shuō)明書(shū)以及所附權(quán)利要求書(shū)中,“網(wǎng)絡(luò)”被定義為允許在計(jì)算機(jī)系統(tǒng)和/或模塊之間傳輸電子數(shù)據(jù)的一個(gè)或多個(gè)數(shù)據(jù)鏈路。當(dāng)通過(guò)網(wǎng)絡(luò)或另一通信連接(或者硬布線、或者無(wú)線、或硬布線和無(wú)線的組合)向計(jì)算機(jī)系統(tǒng)傳輸或提供信息時(shí),計(jì)算機(jī)適當(dāng)?shù)貙⒃撨B接視為計(jì)算機(jī)可讀介質(zhì)。由此,任一這類(lèi)連接適當(dāng)?shù)胤Q(chēng)為計(jì)算機(jī)可讀介質(zhì)。上述的組合也應(yīng)當(dāng)包括在計(jì)算機(jī)可讀介質(zhì)的范圍內(nèi)。計(jì)算機(jī)可執(zhí)行指令包括,如,促使通用計(jì)算機(jī)系統(tǒng)或?qū)S糜?jì)算機(jī)執(zhí)行特定的一個(gè)或一組功能的指令和數(shù)據(jù)。計(jì)算機(jī)可執(zhí)行指令可以是,例如,二進(jìn)制代碼、諸如匯編語(yǔ)言等中間格式指令、或甚至是源代碼。
在本說(shuō)明書(shū)以及所附權(quán)利要求書(shū)中,“計(jì)算機(jī)系統(tǒng)”被定義為一個(gè)或多個(gè)軟件模塊、一個(gè)或多個(gè)硬件模塊或其組合,它們一起工作以對(duì)電子數(shù)據(jù)執(zhí)行操作。例如,計(jì)算機(jī)系統(tǒng)的定義包括個(gè)人計(jì)算機(jī)的硬件組件,以及軟件模塊,如個(gè)人計(jì)算機(jī)的操作系統(tǒng)。模塊的物理布局不是重要的。計(jì)算機(jī)系統(tǒng)可包括通過(guò)網(wǎng)絡(luò)耦合的一個(gè)或多個(gè)計(jì)算機(jī)。同樣,計(jì)算機(jī)系統(tǒng)可包括單個(gè)物理設(shè)備(諸如移動(dòng)電話或個(gè)人數(shù)字助理“PDA”),其中內(nèi)部模塊(諸如存儲(chǔ)器和處理器)共同運(yùn)作以對(duì)電子數(shù)據(jù)執(zhí)行操作。
本領(lǐng)域的技術(shù)人員可以理解,本發(fā)明可以在具有許多類(lèi)型的計(jì)算機(jī)系統(tǒng)配置的網(wǎng)絡(luò)計(jì)算環(huán)境中實(shí)施,這些類(lèi)型的計(jì)算機(jī)系統(tǒng)配置包括個(gè)人計(jì)算機(jī)、膝上型計(jì)算機(jī)、手持式設(shè)備、多處理器系統(tǒng)、基于微處理器或可編程消費(fèi)電子產(chǎn)品、網(wǎng)絡(luò)PC、小型機(jī)、大型計(jì)算機(jī)、移動(dòng)電話、PDA、尋呼機(jī)等等。本發(fā)明也可在分布式系統(tǒng)環(huán)境中實(shí)施,其中通過(guò)網(wǎng)絡(luò)鏈接(或者通過(guò)硬布線的數(shù)據(jù)鏈路、無(wú)線數(shù)據(jù)鏈路,或者通過(guò)硬布線和無(wú)線數(shù)據(jù)鏈路的組合)的本地和遠(yuǎn)程計(jì)算機(jī)系統(tǒng)都執(zhí)行任務(wù)。在分布式系統(tǒng)環(huán)境中,程序模塊可以位于本地和遠(yuǎn)程存儲(chǔ)器存儲(chǔ)設(shè)備中。
圖1A和1B示出了便于可靠地傳輸排隊(duì)的應(yīng)用程序消息的計(jì)算機(jī)體系結(jié)構(gòu)100的一個(gè)示例。計(jì)算機(jī)體系結(jié)構(gòu)100中所描述的是計(jì)算機(jī)系統(tǒng)101、存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)121和122、以及計(jì)算機(jī)系統(tǒng)111。計(jì)算機(jī)系統(tǒng)以及存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)的每一個(gè)都可連接到網(wǎng)絡(luò),諸如局域網(wǎng)(“LAN”)、廣域網(wǎng)(“WAN”)或甚至是因特網(wǎng)。計(jì)算機(jī)系統(tǒng)以及存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)連接到網(wǎng)絡(luò),并可從連接到網(wǎng)絡(luò)的其它計(jì)算機(jī)系統(tǒng)以及存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)接收數(shù)據(jù)和向其發(fā)送數(shù)據(jù)。因此,計(jì)算機(jī)系統(tǒng)101和111以及存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)121和122,連同其它連接的計(jì)算機(jī)系統(tǒng)以及存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)(未示出)可創(chuàng)建消息相關(guān)數(shù)據(jù)并通過(guò)網(wǎng)絡(luò)交換消息相關(guān)數(shù)據(jù)(例如,網(wǎng)際協(xié)議(“IP”)數(shù)據(jù)報(bào)和利用IP數(shù)據(jù)報(bào)的其它較高層協(xié)議,諸如傳輸控制協(xié)議(“TCP”)、超文本傳輸協(xié)議(“HTTP”)、簡(jiǎn)單郵件傳輸協(xié)議(“SMTP”)等)。例如,計(jì)算機(jī)系統(tǒng)101和111以及存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)121和122可創(chuàng)建SOAP信封、通過(guò)網(wǎng)絡(luò)交換SOAP信封并接收SOAP信封。
在圖1A中,計(jì)算機(jī)系統(tǒng)101包括應(yīng)用程序102、隊(duì)列通道103以及隊(duì)列管理器108。應(yīng)用程序102可以是分布式應(yīng)用程序的一部分,例如對(duì)應(yīng)于應(yīng)用程序112的客戶(hù)機(jī)代理。由此,應(yīng)用程序102經(jīng)常具有要送達(dá)應(yīng)用程序112的應(yīng)用程序消息。隊(duì)列通道103將應(yīng)用程序消息入隊(duì),以?xún)?chǔ)存在由隊(duì)列管理器108控制的隊(duì)列中。隊(duì)列通道103可包括被調(diào)用來(lái)將消息入隊(duì)的應(yīng)用程序接口(“API”)。因此,應(yīng)用程序102可調(diào)用API子例程以將應(yīng)用程序消息入隊(duì)到消息隊(duì)列107中。
隊(duì)列管理器108包括消息隊(duì)列107、傳輸層104以及存儲(chǔ)和轉(zhuǎn)發(fā)層106。消息隊(duì)列107被配置成將從計(jì)算機(jī)系統(tǒng)101處的應(yīng)用程序(例如,應(yīng)用程序102)發(fā)送到其它計(jì)算機(jī)系統(tǒng)的應(yīng)用程序消息排隊(duì),并將從其它計(jì)算機(jī)系統(tǒng)發(fā)送到計(jì)算機(jī)系統(tǒng)101處的應(yīng)用程序的應(yīng)用程序消息排隊(duì)。傳輸層104被配置成向其它隊(duì)列管理器(例如,隊(duì)列管理器118)發(fā)送傳輸消息并從其接收傳輸消息。存儲(chǔ)和轉(zhuǎn)發(fā)層106被配置成向其它存儲(chǔ)和轉(zhuǎn)發(fā)層(例如,存儲(chǔ)和轉(zhuǎn)發(fā)層116)以及存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)(例如,存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)121和122)發(fā)送存儲(chǔ)和轉(zhuǎn)發(fā)消息以及從其接收存儲(chǔ)和轉(zhuǎn)發(fā)消息。
在計(jì)算機(jī)體系結(jié)構(gòu)100內(nèi),隊(duì)列管理器108和應(yīng)用程序102都描繪為駐留在計(jì)算機(jī)系統(tǒng)101上。然而,本領(lǐng)域的技術(shù)人員在閱讀了本說(shuō)明書(shū)之后可以明白,隊(duì)列管理器和利用隊(duì)列管理器的應(yīng)用程序可駐留在不同的計(jì)算機(jī)系統(tǒng)上。例如,隊(duì)列管理器108可駐留在可通過(guò)網(wǎng)絡(luò)連接到計(jì)算機(jī)系統(tǒng)101的某一其它計(jì)算機(jī)系統(tǒng)上。在某些實(shí)施例中,在多個(gè)不同的計(jì)算機(jī)系統(tǒng)上的應(yīng)用程序從單個(gè)隊(duì)列中讀取消息以提供負(fù)載平衡。
存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)121和122是中介存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù),它們向其它存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)以及存儲(chǔ)和轉(zhuǎn)發(fā)層發(fā)送存儲(chǔ)和轉(zhuǎn)發(fā)消息,并從其它存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)以及存儲(chǔ)和轉(zhuǎn)發(fā)層接收存儲(chǔ)和轉(zhuǎn)發(fā)消息。
在圖1B中,計(jì)算機(jī)系統(tǒng)111包括應(yīng)用程序112、隊(duì)列監(jiān)聽(tīng)器113和隊(duì)列管理器118。應(yīng)用程序112可以是分布式應(yīng)用程序的一部分,諸如對(duì)應(yīng)于應(yīng)用程序112的服務(wù)。由此,應(yīng)用程序112經(jīng)常具有從應(yīng)用程序102接收的應(yīng)用程序消息。隊(duì)列監(jiān)聽(tīng)器113將應(yīng)用程序消息從由隊(duì)列管理器118控制的隊(duì)列中出隊(duì)。相應(yīng)地,隊(duì)列監(jiān)聽(tīng)器133可以將應(yīng)用程序消息從消息隊(duì)列117中出隊(duì)。隊(duì)列監(jiān)聽(tīng)器113也可接受來(lái)自其它隊(duì)列管理器的會(huì)話、注冊(cè)對(duì)對(duì)應(yīng)于指定會(huì)話的應(yīng)用程序消息的興趣、以及向感興趣的應(yīng)用程序發(fā)送喚醒通知。
隊(duì)列管理器118包括消息隊(duì)列117、傳輸層114以及存儲(chǔ)和轉(zhuǎn)發(fā)層116。消息隊(duì)列117被配置成將從計(jì)算機(jī)系統(tǒng)111處的應(yīng)用程序(例如,應(yīng)用程序112)發(fā)送到其它計(jì)算機(jī)系統(tǒng)的應(yīng)用程序消息排隊(duì),以及將從其它計(jì)算機(jī)系統(tǒng)發(fā)送到計(jì)算機(jī)101處的應(yīng)用程序的應(yīng)用程序消息排隊(duì)。傳輸層114被配置成向其它隊(duì)列管理器(例如,隊(duì)列管理器108)發(fā)送傳輸消息以及從其接收傳輸消息。存儲(chǔ)和轉(zhuǎn)發(fā)層116被配置成向其它存儲(chǔ)和轉(zhuǎn)發(fā)層(例如,存儲(chǔ)和轉(zhuǎn)發(fā)層106)以及存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)(例如,存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)121和122)發(fā)送存儲(chǔ)和轉(zhuǎn)發(fā)消息以及從其接收存儲(chǔ)和轉(zhuǎn)發(fā)消息。
在計(jì)算機(jī)體系結(jié)構(gòu)100中,隊(duì)列管理器118和應(yīng)用程序112都被描繪為駐留在計(jì)算機(jī)系統(tǒng)111上。然而,本領(lǐng)域的技術(shù)人員在閱讀了本說(shuō)明書(shū)之后可以明白,隊(duì)列管理器和利用隊(duì)列管理器的應(yīng)用程序可駐留在不同的計(jì)算機(jī)系統(tǒng)上。例如,隊(duì)列管理器118可駐留在可通過(guò)網(wǎng)絡(luò)連接到計(jì)算機(jī)系統(tǒng)111的某一其它計(jì)算機(jī)系統(tǒng)上。如上所述,多個(gè)不同服務(wù)器上的應(yīng)用程序從單個(gè)隊(duì)列中讀取消息以提供負(fù)載平衡。
一般而言,計(jì)算機(jī)體系結(jié)構(gòu)100中的模塊可互操作以便于可靠地傳輸排隊(duì)的應(yīng)用程序消息。本發(fā)明的實(shí)施例可利用各種不同的協(xié)議來(lái)實(shí)現(xiàn)排隊(duì)的應(yīng)用程序消息的可靠傳輸。
可實(shí)現(xiàn)一種應(yīng)用程序會(huì)話管理協(xié)議來(lái)建立和終止應(yīng)用程序之間(例如,應(yīng)用程序102和應(yīng)用程序112之間)的排隊(duì)會(huì)話。會(huì)話內(nèi)的所有消息共享相關(guān)聯(lián)的保證,諸如對(duì)目標(biāo)應(yīng)用程序的恰好一次和按序送達(dá)。應(yīng)用程序可使用在客戶(hù)機(jī)庫(kù)中實(shí)現(xiàn)的排隊(duì)通道API以在排隊(duì)會(huì)話上發(fā)送和接收消息。排隊(duì)會(huì)話狀態(tài)可被持久保存在對(duì)應(yīng)的隊(duì)列中,而用于捕捉和送達(dá)的排隊(duì)通道在應(yīng)用程序地址空間中維護(hù)并且是瞬態(tài)的。會(huì)話附加和分離機(jī)制可用于解除隊(duì)列中的排隊(duì)通道和會(huì)話的生存期的耦合(例如,作為捕捉/送達(dá)協(xié)議的一部分)。
確認(rèn)過(guò)程可發(fā)送存儲(chǔ)/轉(zhuǎn)發(fā)確認(rèn)、傳輸確認(rèn)以及送達(dá)確認(rèn),并且發(fā)送者對(duì)這些確認(rèn)采取各種行動(dòng)。例如,隊(duì)列管理器可在接收到存儲(chǔ)/轉(zhuǎn)發(fā)確認(rèn)之后停止嘗試轉(zhuǎn)發(fā)消息。同樣,在傳輸或送達(dá)過(guò)程中可返回錯(cuò)誤,這將導(dǎo)致消息直接移至死隊(duì)列而不等待過(guò)期。
一般而言,排隊(duì)會(huì)話用于關(guān)聯(lián)一組消息。應(yīng)用程序編寫(xiě)者定義一組消息作為排隊(duì)會(huì)話的一部分。排隊(duì)會(huì)話可以是長(zhǎng)期運(yùn)行的,并由隊(duì)列中的標(biāo)識(shí)符來(lái)唯一地標(biāo)識(shí)。由此,排隊(duì)會(huì)話的生存期可比從排隊(duì)會(huì)話中讀出或?qū)懭氲脚抨?duì)會(huì)話中的應(yīng)用程序的生存期更長(zhǎng)。排隊(duì)會(huì)話也是可恢復(fù)的。即,應(yīng)用程序可以失敗、恢復(fù)并重新附加到排隊(duì)會(huì)話以繼續(xù)其在會(huì)話上的操作。
使用排隊(duì)通信的應(yīng)用程序?yàn)橥ㄟ^(guò)消息過(guò)期和對(duì)送達(dá)確認(rèn)的消息請(qǐng)求的消息傳輸設(shè)置可靠性要求。消息可基于由用戶(hù)設(shè)置的過(guò)期時(shí)間而過(guò)期。當(dāng)消息過(guò)期時(shí),發(fā)送方隊(duì)列將消息移至死隊(duì)列。送達(dá)確認(rèn)是由對(duì)應(yīng)的接收方隊(duì)列管理器在接收方應(yīng)用程序成功地使用了消息時(shí)生成的。送達(dá)確認(rèn)是對(duì)發(fā)送方隊(duì)列管理器(例如,隊(duì)列管理器108)的指示,它指示消息被成功地送達(dá)應(yīng)用程序(例如,應(yīng)用程序112)。
隊(duì)列捕捉協(xié)議可以在隊(duì)列通道(例如,隊(duì)列通道103)和隊(duì)列管理器(例如,隊(duì)列管理器108)之間實(shí)現(xiàn),以提供應(yīng)用程序消息(例如,應(yīng)用程序消息131)從發(fā)送方應(yīng)用程序(例如,應(yīng)用程序102)到發(fā)送方消息隊(duì)列(例如,消息隊(duì)列107)的同步可靠傳輸?shù)姆浅8叩目赡苄?。?duì)列捕捉協(xié)議可使用消息封裝將應(yīng)用程序消息隧入對(duì)隊(duì)列管理器的入隊(duì)消息請(qǐng)求(例如,入隊(duì)消息141)中。當(dāng)封裝的應(yīng)用程序消息被成功地寫(xiě)入消息隊(duì)列中時(shí),隊(duì)列管理器向隊(duì)列通道返回入隊(duì)響應(yīng)(例如,入隊(duì)響應(yīng)142)。入隊(duì)消息請(qǐng)求和對(duì)應(yīng)的入隊(duì)響應(yīng)可以是兩階段提交協(xié)議的一部分。入隊(duì)消息請(qǐng)求可包括便于入隊(duì)操作與其它應(yīng)用程序狀態(tài)改變的協(xié)調(diào)的原子事務(wù)上下文。
傳輸協(xié)議可在發(fā)送隊(duì)列管理器(例如,隊(duì)列管理器108)和接收隊(duì)列管理器(例如,隊(duì)列管理器118)之間實(shí)現(xiàn)。傳輸協(xié)議可利用消息封裝將應(yīng)用程序消息隧入從一個(gè)隊(duì)列管理器發(fā)送到另一隊(duì)列管理器的傳輸消息(例如,傳輸消息151)中。發(fā)送方隊(duì)列管理器便于啟動(dòng)與對(duì)應(yīng)的接收方隊(duì)列管理器的安全且可靠的傳輸會(huì)話、消息與會(huì)話的相關(guān)和定序、以及對(duì)來(lái)自接收方隊(duì)列管理器的傳輸確認(rèn)的處理。接收方隊(duì)列管理器便于接受傳輸會(huì)話、在會(huì)話上接收消息以及發(fā)送傳輸確認(rèn)。
傳輸協(xié)議也可包括用于檢測(cè)消息序列中的孔的機(jī)制。一般而言,交換的消息被編號(hào),且過(guò)期的消息將導(dǎo)致消息序列中的孔。因此,發(fā)送方隊(duì)列可向接收方隊(duì)列發(fā)送傳輸取消消息以關(guān)閉其確認(rèn)范圍中的孔。
存儲(chǔ)和轉(zhuǎn)發(fā)協(xié)議可以被實(shí)現(xiàn)以在存儲(chǔ)和轉(zhuǎn)發(fā)層之間(例如,在存儲(chǔ)和轉(zhuǎn)發(fā)層106和116之間)、在存儲(chǔ)和轉(zhuǎn)發(fā)中介以及存儲(chǔ)和轉(zhuǎn)發(fā)層之間(例如,在存儲(chǔ)和轉(zhuǎn)發(fā)層106以及存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)121之間)、以及存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)之間(例如,在存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)121以及存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)122之間)傳輸消息。傳輸協(xié)議可提供一種可擴(kuò)展性模型,使得中介存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)被透明地放在發(fā)送方隊(duì)列和接收方隊(duì)列之間。消息可通過(guò)中介存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)轉(zhuǎn)發(fā),而不會(huì)顯著地影響傳輸消息的端對(duì)端可靠性。存儲(chǔ)和轉(zhuǎn)發(fā)協(xié)議可利用將傳輸頭部和應(yīng)用程序消息裝入存儲(chǔ)和轉(zhuǎn)發(fā)消息(例如,轉(zhuǎn)發(fā)消息116)中的消息封裝,并將該轉(zhuǎn)發(fā)消息轉(zhuǎn)發(fā)到下一中繼段。響應(yīng)于接收存儲(chǔ)和轉(zhuǎn)發(fā)消息,適當(dāng)?shù)呐渲媚K可返回存儲(chǔ)和轉(zhuǎn)發(fā)響應(yīng)(例如,轉(zhuǎn)發(fā)響應(yīng)162)。
送達(dá)協(xié)議可以被實(shí)現(xiàn)以將應(yīng)用程序消息從接收方隊(duì)列(例如,消息隊(duì)列117)送達(dá)到對(duì)應(yīng)的應(yīng)用程序(例如,應(yīng)用程序112)。送達(dá)協(xié)議可向隊(duì)列監(jiān)聽(tīng)器(例如,隊(duì)列監(jiān)聽(tīng)器113)發(fā)送會(huì)話可用消息(例如,會(huì)話可用消息172)或消息可用消息(例如,消息可用消息174)。隊(duì)列監(jiān)聽(tīng)器用出隊(duì)消息請(qǐng)求(例如,出隊(duì)消息176)響應(yīng),以從隊(duì)列中讀取應(yīng)用程序消息(或其它適當(dāng)?shù)南?。出隊(duì)可以依照諸如WS枚舉(WS-Enumeration)等web服務(wù)規(guī)范來(lái)執(zhí)行。響應(yīng)于出隊(duì)消息請(qǐng)求,隊(duì)列管理器(例如,隊(duì)列管理器118)可發(fā)送包括應(yīng)用程序消息(或其它適當(dāng)?shù)南?的出隊(duì)響應(yīng)。出隊(duì)消息請(qǐng)求和對(duì)應(yīng)的出隊(duì)響應(yīng)可以是兩階段提交協(xié)議的一部分。出隊(duì)消息請(qǐng)求可包括便于出隊(duì)操作與其它應(yīng)用程序狀態(tài)改變的協(xié)調(diào)的原子事務(wù)上下文。
喚醒通知協(xié)議可以被實(shí)現(xiàn)以當(dāng)應(yīng)用程序消息可用時(shí)喚醒接收方應(yīng)用程序(例如,應(yīng)用程序112)。例如,從隊(duì)列中讀取消息的應(yīng)用程序可主宿在一容器中。應(yīng)用程序經(jīng)??赡転楦鞣N原因而不在運(yùn)行。例如,應(yīng)用程序可能失敗、應(yīng)用程序可能空閑或被回收等。喚醒通知協(xié)議機(jī)制能夠向宿主環(huán)境通知隊(duì)列中的消息的可用性。宿主環(huán)境可使用它來(lái)啟動(dòng)應(yīng)用程序或啟動(dòng)應(yīng)用程序的另一實(shí)例或調(diào)度它來(lái)運(yùn)行。
在某些實(shí)施例中,隊(duì)列管理器主宿一個(gè)或多個(gè)隊(duì)列。因此,隊(duì)列管理器可為它所主宿的所有隊(duì)列實(shí)現(xiàn)捕捉、送達(dá)、傳輸和存儲(chǔ)/轉(zhuǎn)發(fā)協(xié)議。隊(duì)列管理器可被配置成通過(guò)單個(gè)傳輸會(huì)話在相同的兩個(gè)隊(duì)列管理器之間多路復(fù)用隊(duì)列到隊(duì)列的傳輸。
如上所述,用于實(shí)現(xiàn)排隊(duì)的應(yīng)用程序消息的可靠傳輸?shù)膮f(xié)議可利用消息封裝。一般而言,消息封裝包括將第一消息(例如,應(yīng)用程序消息)(的至少一部分)包裝在第二消息(例如傳輸消息)中。在某些實(shí)施例中,第一和第二消息是依照相同的消息通信協(xié)議,諸如簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議(“SOAP”)來(lái)配置的。由此,先前描述的協(xié)議中的一個(gè)或多個(gè)可以將第一SOAP信封(的至少一部分),諸如可擴(kuò)展標(biāo)記語(yǔ)言(“XML”)元素封裝在第二SOAP信封中。因此,封裝可用于捕捉SOAP入隊(duì)消息中的SOAP應(yīng)用程序消息、在SOAP傳輸消息中傳輸SOAP應(yīng)用程序消息、以及在SOAP出隊(duì)響應(yīng)中送達(dá)SOAP應(yīng)用程序消息。類(lèi)似的封裝機(jī)制可用于將傳輸頭部和應(yīng)用程序消息封裝在存儲(chǔ)和轉(zhuǎn)發(fā)消息中。
當(dāng)將內(nèi)部XML元素(例如,應(yīng)用程序SOAP信封)封裝在另一XML元素(例如,傳輸SOAP信封)中時(shí),內(nèi)部或包裝的XML元素可依照包裝算法來(lái)編碼(或串行化。可使用各種編碼技術(shù),例如二進(jìn)制和文本編碼。在某些實(shí)施例中,包裝算法使用了base64二進(jìn)制編碼來(lái)編碼包裝的XML元素。例如nqWrappedXmlBase64等XML元素可用于指示已編碼的XML元素的編碼類(lèi)型。已編碼的XML元素也可具有對(duì)應(yīng)的屬性,諸如nqContentType,它定義了原始的內(nèi)容類(lèi)型。由此,包裝便于將(二進(jìn)制或文本)已編碼SOAP信封封裝在另一SOAP信封中。
解包算法可對(duì)已編碼的XML元素進(jìn)行解碼(或反串行化)。例如,解包算法可向?qū)?yīng)的XML讀取器提供編碼類(lèi)型和原始內(nèi)容類(lèi)型。由此,base64編碼的XML元素的值可以被提供給二進(jìn)制XML讀取器以將該值解碼成對(duì)應(yīng)的未編碼XML元素。
消息封裝便于在不同的消息通信層之間重用web服務(wù)協(xié)議元素。例如,封裝便于在應(yīng)用層、傳輸層以及存儲(chǔ)和轉(zhuǎn)發(fā)層之間重用尋址、安全性、可靠性和事務(wù)協(xié)議元素。例如,當(dāng)傳輸SOAP信封封裝已編碼的應(yīng)用程序SOAP信封時(shí),應(yīng)用程序SOAP信封的組成協(xié)議元素不干擾傳輸信封的組成協(xié)議元素(因?yàn)榻M成元素被編碼)。而應(yīng)用程序SOAP信封的組成協(xié)議元素仍可通過(guò)解碼來(lái)有效地訪問(wèn)。
圖2示出了可靠地發(fā)送排隊(duì)的應(yīng)用程序消息的方法200的示例流程圖。方法200將參考計(jì)算機(jī)體系結(jié)構(gòu)100中的模塊和數(shù)據(jù)來(lái)描述。
方法200包括用于捕捉應(yīng)用程序消息使得應(yīng)用程序消息被排隊(duì)以送達(dá)接收計(jì)算機(jī)系統(tǒng)的功能性的面向結(jié)果的步驟(步驟215)。步驟215可包括用于實(shí)現(xiàn)捕捉應(yīng)用程序消息使得應(yīng)用程序消息被排隊(duì)以送達(dá)接收計(jì)算機(jī)系統(tǒng)的結(jié)果的任何對(duì)應(yīng)的動(dòng)作。然而,在圖2所示的示例中,步驟215包括接收應(yīng)用程序消息的對(duì)應(yīng)動(dòng)作(動(dòng)作201)。例如,隊(duì)列通道103可從應(yīng)用程序102接收應(yīng)用程序消息131。應(yīng)用程序消息131可以被包括在用于將應(yīng)用程序消息131入隊(duì)到消息隊(duì)列中的子例程調(diào)用(對(duì)隊(duì)列通道103)中。應(yīng)用程序消息131可以依照諸如SOAP等消息通信協(xié)議來(lái)配置。因此,應(yīng)用程序消息131可包括包含要發(fā)送到應(yīng)用程序112的應(yīng)用程序數(shù)據(jù)的應(yīng)用程序SOAP信封。一般而言,應(yīng)用程序SOAP信封可以是以下格式<sEnvelope>
<sHeader>
Application Headers</sHeader>
<sBody>
Application Data</sBody></sEnvelope>
步驟215包括對(duì)應(yīng)用程序消息編碼的對(duì)應(yīng)動(dòng)作(動(dòng)作202)。例如,隊(duì)列通道103可將應(yīng)用程序消息131(包括組成協(xié)議元素)編碼成對(duì)應(yīng)的(例如,二進(jìn)制或文本)已編碼應(yīng)用程序消息131E。隊(duì)列通道103可執(zhí)行一包裝算法,它采取應(yīng)用程序消息、編碼類(lèi)型和內(nèi)容類(lèi)型作為輸入,并返回已編碼的應(yīng)用程序消息作為輸出。例如,包裝算法可接收應(yīng)用程序消息131。base64編碼類(lèi)型以及串內(nèi)容類(lèi)型作為輸入,并可返回已編碼的應(yīng)用程序消息131E作為輸出。
隊(duì)列通道103也可以可任選地加密和/或數(shù)字地簽署已編碼的應(yīng)用程序消息131E。加密和/或數(shù)字簽署已編碼的應(yīng)用程序消息131E有助于確保應(yīng)用程序消息131E在傳輸期間不被修改或截取。已編碼的應(yīng)用程序消息131E可以使用各種不同的安全機(jī)制中的任一種,例如WS安全(WS-Security)來(lái)保護(hù)。
步驟215包括配置入隊(duì)消息的對(duì)應(yīng)動(dòng)作(動(dòng)作203)。例如,隊(duì)列通道103可配置入隊(duì)消息141。入隊(duì)消息141可依照與應(yīng)用程序消息131相同的消息通信協(xié)議來(lái)配置。因此,入隊(duì)消息141也可包括SOAP信封。入隊(duì)消息141可標(biāo)識(shí)要將已編碼的應(yīng)用程序消息131E排隊(duì)的消息隊(duì)列,并可標(biāo)識(shí)對(duì)應(yīng)于應(yīng)用程序消息131的消息會(huì)話。例如,入隊(duì)消息141可標(biāo)識(shí)消息隊(duì)列117,并可標(biāo)識(shí)應(yīng)用程序102和應(yīng)用程序112之間的消息會(huì)話。隊(duì)列管理器108可使用消息隊(duì)列107作為傳輸隊(duì)列。
由于應(yīng)用程序消息131的組成協(xié)議元素(例如,尋址、安全性、可靠性和事務(wù)協(xié)議元素)被編碼,因此應(yīng)用程序消息131的組成協(xié)議元素不干涉入隊(duì)消息141的配置。因此,可在入隊(duì)消息141中重用包括在應(yīng)用程序消息131中的任何組成協(xié)議元素。
步驟215包括將已編碼的應(yīng)用程序消息封裝在入隊(duì)消息中的對(duì)應(yīng)動(dòng)作(動(dòng)作204)。例如,隊(duì)列通道103可將已編碼的應(yīng)用程序消息131E封裝在入隊(duì)消息141中。一般而言,入隊(duì)消息可以是以下格式(在被保護(hù)之前)<sEnvelope...><sHeader>
<wsaAction smustUnderstand=”true”>
http//schemas.testcorp.com/queuing/EnqueueMessage</wsaAction>
<wsaTo>xsanyURI</wsaTo><wscoorCoordinationContext smustUnderstand=”true”>...</wscoorCoordinationContext>?<nqQueueName>xsanyURI</nqQueueName><wsaReplyTo>wsaEndpointReferenceType</wsaReplyTo><wsaMessageID>xsanyURI</wsaMessageID><nqSequence Ordered=”1”?>
<wsuIdentifier>xsanyURI</wsuIdentifier><wsrmMessageNumber>xsunsignedlong</wsrmMessageNumber>?<wsrmLastMessage/>?</nqSequence>?<wsuExpires>xsddateTime</wsuExpires><nqVolatile/>?<nqErrorQueueName>xsanyURI</nqErrorQueueName>?...</sHeader><sBody>
<nqEnqueueMessage>
<nqApplicationMessage>
<nqWrappedXmlBase64 nqContentType=”xsstring”>
binary base64 wrapped message</nqWrappedXmlBase64>
</nqApplicationMessage>
</nqEnqueueMessage></sBody></sEnvelope在入隊(duì)消息內(nèi),/sEnvelope/sHeader/nqSequence元素可用于將入隊(duì)消息與應(yīng)用程序會(huì)話相關(guān)聯(lián)。/sEnvelope/sHeader/nqSequence/@Ordered元素可用于指示應(yīng)用程序會(huì)話是否已排序(例如,“1”或“true(真)”指示已排序的應(yīng)用程序會(huì)話)。/sEnvelope/sHeader/nqSequence/wsuIdentifier元素可用于包含會(huì)話標(biāo)識(shí)符。/sEnvelope/sHeader/nqSequence/wsrmMessageNumber元素可用于在應(yīng)用程序會(huì)話中包含(已編碼)應(yīng)用程序消息的序列號(hào)。序列號(hào)以諸如1等初始值開(kāi)始,并且按例如1遞增。/sEnvelope/sHeader/nqSequence/wsrmLastMessage元素可用于指示(已編碼)應(yīng)用程序消息是該應(yīng)用程序會(huì)話的最后一條消息。
/sEnvelope/sHeader/wscoorCoordinationContext元素可用于指示入隊(duì)消息是否要作為原子事務(wù)的一部分來(lái)執(zhí)行。如果是,則/sEnvelope/sHeader/wscoorCoordinationContext元素可包含原子事務(wù)上下文。/sEnvelope/sHeader/nqQueueName元素可用于指示包含監(jiān)聽(tīng)器(例如,隊(duì)列監(jiān)聽(tīng)器113)希望監(jiān)聽(tīng)的邏輯隊(duì)列的名字(URI)的引用參數(shù)。/sEnvelope/sHeader/wsuExpires元素可用于指示(已編碼)應(yīng)用程序消息的過(guò)期時(shí)間標(biāo)記。/sEnvelope/sHeader/nqVolatile元素可用于指示(已編碼)應(yīng)用程序消息無(wú)需被寫(xiě)入持久存儲(chǔ)中以確認(rèn)其送達(dá)。/sEnvelope/sHeader/wsuErrorQueueName元素可用于指示在送達(dá)出錯(cuò)的情況下(已編碼)應(yīng)用程序消息應(yīng)被寫(xiě)入到的邏輯隊(duì)列的隊(duì)列名URI。/sEnvelope/sBody/*/nqWrappedXmlBase64元素包含適當(dāng)包裝的(已編碼)應(yīng)用程序消息的完整的SOAP信封。/sEnvelope/sBody/*/nqWrappedXmlBase64/@nqContentType元素指示(已編碼)應(yīng)用程序消息的內(nèi)容類(lèi)型。
在封裝了已編碼應(yīng)用程序消息131E之后,可加密和/或數(shù)字地簽署入隊(duì)消息141。數(shù)字地簽署入隊(duì)消息141向隊(duì)列管理器108提供了對(duì)入隊(duì)消息141的真實(shí)性的某種保證,并可防止將額外的消息注入到消息隊(duì)列107中。入隊(duì)消息141可使用各種不同的安全機(jī)制中的任一種來(lái)保護(hù),包括WS安全或諸如安全套接字層(“SSL”)等傳輸層安全。
步驟215包括發(fā)送入隊(duì)消息以將已編碼應(yīng)用程序消息排隊(duì)的對(duì)應(yīng)動(dòng)作(動(dòng)作205)。例如,隊(duì)列通道103可向隊(duì)列管理器108發(fā)送入隊(duì)消息141。在適當(dāng)時(shí),隊(duì)列通道103可在將入隊(duì)消息141發(fā)送到隊(duì)列管理器108之前加密入隊(duì)消息141。隊(duì)列管理器108控制消息隊(duì)列107,并可將已編碼應(yīng)用程序消息131E排隊(duì)以送達(dá)應(yīng)用程序112。
隊(duì)列管理器108可接收入隊(duì)消息141,并將已編碼應(yīng)用程序消息131E儲(chǔ)存在消息隊(duì)列107中。
在將已編碼應(yīng)用程序消息131E儲(chǔ)存在消息隊(duì)列107中之后,隊(duì)列管理器108可向隊(duì)列通道103發(fā)送入隊(duì)響應(yīng)142(可能被加密和/或數(shù)字地簽署)以確認(rèn)入隊(duì)消息141的接收。隊(duì)列通道103可接收入隊(duì)響應(yīng)142。入隊(duì)響應(yīng)142向隊(duì)列通道103指示隊(duì)列管理器108成功地將已編碼應(yīng)用程序消息131E排隊(duì)。一般而言,入隊(duì)響應(yīng)可以是以下格式(在保護(hù)之前)<sEnvelope...><sHeader>
<wsaAction>
http//schemas.testcorp.com/queuing/EnqueueMessageResponse</wsaAction>
<wsaTo>xsanyURI</wsaTo>
<wsaRelatesTo>request message ID</wsaRelatesTo>
<wsaMessageID>xsanyURI</wsaMessageID>
...</sHeader><sBody/></sEnvelope>
一般而言,入隊(duì)響應(yīng)中的元素具有與先前相對(duì)于入隊(duì)消息所描述的相同的意義。此外,元素/sEnvelope/sHeader/wsaRelatesTo可用于將入隊(duì)響應(yīng)與對(duì)應(yīng)的入隊(duì)消息相關(guān)。例如,入隊(duì)響應(yīng)142可包括與標(biāo)識(shí)入隊(duì)消息141的值的相關(guān)。在某些實(shí)施例中,入隊(duì)消息和對(duì)應(yīng)的入隊(duì)響應(yīng)是兩階段提交協(xié)議的一部分。
方法200包括用于將應(yīng)用程序消息傳輸?shù)浇邮沼?jì)算機(jī)系統(tǒng)的功能性的面向結(jié)果的步驟(步驟216)。步驟216可包括用于實(shí)現(xiàn)將應(yīng)用程序消息傳輸?shù)浇邮沼?jì)算機(jī)系統(tǒng)的結(jié)果的任何對(duì)應(yīng)的動(dòng)作。然而,在圖2所示的示例中,步驟216包括將已編碼應(yīng)用程序消息出隊(duì)的對(duì)應(yīng)動(dòng)作(動(dòng)作206)。例如,傳輸層107可將已編碼應(yīng)用程序消息131E從消息隊(duì)列107中出隊(duì)。
步驟216包括配置傳輸消息的對(duì)應(yīng)動(dòng)作(動(dòng)作207)。例如,傳輸層104可配置傳輸消息151A。傳輸消息151A可依照與應(yīng)用程序消息131相同的消息通信協(xié)議來(lái)配置。因此,傳輸消息151A也可包括SOAP信封。傳輸消息151A可標(biāo)識(shí)對(duì)應(yīng)于已編碼應(yīng)用程序消息131E的消息會(huì)話,并可標(biāo)識(shí)參與消息會(huì)話的接收計(jì)算機(jī)系統(tǒng)。例如,傳輸消息151A可標(biāo)識(shí)應(yīng)用程序102和應(yīng)用程序112之間的消息會(huì)話。
傳輸層104可解密入隊(duì)消息141的任何已加密部分(例如,根據(jù)WS安全加密),并重構(gòu)入隊(duì)消息141的明文。傳輸層104將例如nqQueueName;nqVolatile;wsuExpires;nqSequence等適當(dāng)?shù)念^部從入隊(duì)消息141中復(fù)制到傳輸消息151A。如果例如nqSequence等應(yīng)用程序會(huì)話標(biāo)識(shí)符元素存在,則傳輸層104計(jì)算該會(huì)話的下一順序消息號(hào),并將其添加到nqSequence元素作為MessageNumber元素的值,并更新任何本地狀態(tài)。
由于應(yīng)用程序消息131的組成協(xié)議元素(例如,尋址、安全性、可靠性和事務(wù)協(xié)議元素)被編碼,因此應(yīng)用程序消息131的組成協(xié)議元素不干涉?zhèn)鬏斚?51A的配置。因此,包括在應(yīng)用程序消息131中的任何組成協(xié)議元素可在傳輸消息151A中重用。
傳輸層104可以可任選地加密和/或數(shù)字地簽署傳輸消息151A。保護(hù)傳輸消息151A向隊(duì)列管理器108提供了對(duì)于傳輸消息151A的真實(shí)性的某種保證,并可防止將額外的消息注入到消息隊(duì)列107中。傳輸消息151A可使用各種不同的安全中的任一種,諸如WS安全來(lái)保護(hù)。
步驟216包括將已編碼應(yīng)用程序消息封裝在傳輸消息中的對(duì)應(yīng)動(dòng)作(動(dòng)作208)。例如,傳輸層104可將已編碼應(yīng)用程序消息131E封裝在傳輸消息151A中。由此,在某些實(shí)施例中,傳輸層104將入隊(duì)消息141的nqApplicationMessage主體元素復(fù)制到傳輸消息151A的主體。一般而言,傳輸消息可以是以下格式(在保護(hù)之前)<sEnvelope><sHeader>
<wsaAction>
http//schemas.testcorp.com/queuing/TransferMessage</wsaAction>
<wsaTo>xsanyURI</wsaTo>
<nqQueueName>xsanyURI</nqQueueName>
<wsaReplyTo>wsaEndpointReferenceType</wsaReplyTo>
<wsaMessageID>xsanyURI</wsaMessageID>
<nqSequence Ordered=”1”?>
<wsuIdentifier>xsanyURI</wsuIdentifier>
<wsrmMessageNumber>xsunsignedLong</wsrmMessageNumber>
<wsrmLastMessage/>?</nqSequence>?<wsuExpires>xsddateTime</wsuExpires>
<nqVolatile/>?<nqErrorService>wsaEndpointReferenceType</nqErrorService></sHeader><sBody>
<nqTransferMessage>
<nqApplicationMessage>
<nqWrappedXmlBase64 nqContentType=”xsstring”>
binary base64 wrapped message</nqWrappedXmlBase64>
</nqApplicationMessage>
</nqTransferMessage></sBody></sEnvelope>
一般而言,傳輸消息中的元素具有與先前相對(duì)于入隊(duì)消息和入隊(duì)響應(yīng)所描述的相同的意義。另外,/sEnvelope/sHeader/wsuErrorService元素可用于指示在送達(dá)出錯(cuò)的情況下(已編碼)應(yīng)用程序消息應(yīng)當(dāng)被發(fā)送到的位置。
步驟216包括發(fā)送傳輸消息以送達(dá)接收計(jì)算機(jī)系統(tǒng)的對(duì)應(yīng)動(dòng)作(動(dòng)作209)。例如,傳輸層104可發(fā)送傳輸消息151A以送達(dá)應(yīng)用程序112。
方法200包括用于將應(yīng)用程序消息轉(zhuǎn)發(fā)到接收計(jì)算機(jī)系統(tǒng)的功能性的面向結(jié)果的步驟(步驟217)。步驟217可包括用于實(shí)現(xiàn)將應(yīng)用程序消息轉(zhuǎn)發(fā)到接收計(jì)算機(jī)系統(tǒng)的結(jié)果的任何對(duì)應(yīng)的動(dòng)作。然而,在圖2所示的示例中,步驟217包括訪問(wèn)傳輸消息的對(duì)應(yīng)動(dòng)作(動(dòng)作210)。例如,存儲(chǔ)和轉(zhuǎn)發(fā)層106可訪問(wèn)傳輸消息151A。
步驟217包括對(duì)來(lái)自傳輸消息的傳輸頭部進(jìn)行編碼的對(duì)應(yīng)動(dòng)作(動(dòng)作211)。例如,存儲(chǔ)和轉(zhuǎn)發(fā)層106可將傳輸頭部152編碼成已編碼傳輸頭部152E。存儲(chǔ)和轉(zhuǎn)發(fā)層106可執(zhí)行一種包裝算法,該算法采取編碼類(lèi)型(例如,base64)、內(nèi)容類(lèi)型(例如,字符串)、以及傳輸頭部作為輸入,并返回已編碼的傳輸頭部作為輸出。在某些實(shí)施例中,也可對(duì)傳輸消息151A的其它部分進(jìn)行編碼。
步驟217包括配置存儲(chǔ)和轉(zhuǎn)發(fā)消息的對(duì)應(yīng)動(dòng)作(動(dòng)作212)。例如,存儲(chǔ)和轉(zhuǎn)發(fā)層106可配置轉(zhuǎn)發(fā)消息161。轉(zhuǎn)發(fā)消息161可以依照與應(yīng)用程序消息131相同的消息通信協(xié)議來(lái)配置。因此,轉(zhuǎn)發(fā)消息161也可包括SOAP信封。轉(zhuǎn)發(fā)消息161可以用于基于計(jì)算機(jī)體系結(jié)構(gòu)100內(nèi)應(yīng)用程序102(或計(jì)算機(jī)系統(tǒng)101)相對(duì)于應(yīng)用程序112(或計(jì)算機(jī)系統(tǒng)111)的位置來(lái)送達(dá)下一存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)(或存儲(chǔ)和轉(zhuǎn)發(fā)層)。存儲(chǔ)和轉(zhuǎn)發(fā)層106將適當(dāng)?shù)念^部,例如nqVolatile頭部從傳輸消息151A復(fù)制到轉(zhuǎn)發(fā)消息161。
由于應(yīng)用程序消息131和傳輸消息151A的組成協(xié)議元素(例如,尋址、安全性、可靠性和事務(wù)協(xié)議元素)被編碼,因此應(yīng)用程序消息131和傳輸消息151A的組成協(xié)議元素不干涉存儲(chǔ)和轉(zhuǎn)發(fā)消息161的配置。因此,包括在應(yīng)用程序消息131和傳輸消息151A(例如,頭部)中的任何組成協(xié)議元素可在轉(zhuǎn)發(fā)消息161中重用。
步驟217包括將已編碼傳輸頭部和已編碼應(yīng)用程序消息封裝到存儲(chǔ)和轉(zhuǎn)發(fā)消息中的對(duì)應(yīng)動(dòng)作(動(dòng)作213)。例如,存儲(chǔ)和轉(zhuǎn)發(fā)層106可將已編碼傳輸頭部152E和已編碼應(yīng)用程序消息131E封裝到轉(zhuǎn)發(fā)消息161中。在適當(dāng)時(shí),傳輸消息151A的其它部分也可被封裝。
存儲(chǔ)和轉(zhuǎn)發(fā)層106可對(duì)傳輸消息151A的sHeader元素進(jìn)行編碼,并將已編碼的sHeader封裝為nqTransferHeader主體元素的名為nqWrappedXmlBase64的子元素。存儲(chǔ)和轉(zhuǎn)發(fā)層106也可將傳輸消息151A的nqApplicationMessage主體元素復(fù)制到轉(zhuǎn)發(fā)消息161。一般而言,存儲(chǔ)和轉(zhuǎn)發(fā)消息可以是以下格式(在保護(hù)之前)<sEnvelope><sHeader>
<wsaAction>
http//schemas.testcorp.com/queuing/ForwardMessage</wsaAction>
<wsaTo>xsanyURI</wsaTo>
<nqVolatile/>?</sHeader><sBody>
<nqForwardMessage>
<nqTransferHeader>
<nqWrappedXmlBase64 nqContentType=”xsstring”>
binary base64 wrapped transfer header</nqWrappedXmlBase64>
</nqTransferHeader>
<nqApplicationMessage>
<nqWrappedXmlBase64 nqContentType=”xsstring”>
binary base64 wrapped message</nqWrappedXmlBase64>
</nqApplicationMessage>?</nqForwardMessage></sBody></sEnvelope>
一般而言,存儲(chǔ)和轉(zhuǎn)發(fā)消息中的元素與先前相對(duì)于入隊(duì)消息、入隊(duì)響應(yīng)和傳輸消息所描述的具有相同的意義。另外,/sEnvelope/sHeader/nqVolatile元素可用于指示存儲(chǔ)和轉(zhuǎn)發(fā)消息不被寫(xiě)入持久存儲(chǔ)以確認(rèn)其送達(dá)。/sEnvelope/sBody/*/nqTransferHeader/nqWrappedXmlBase64元素可用于指示由發(fā)送隊(duì)列服務(wù)組裝的傳輸消息的封裝的sHeader元素。當(dāng)被適當(dāng)?shù)胤庋b時(shí),/sEnvelope/sBody/*/nqApplicationMessage/nqWrappedXmlBase64元素可用于指示封裝的應(yīng)用程序消息。
存儲(chǔ)和轉(zhuǎn)發(fā)層106可將已編碼的傳輸頭部152E(以及可能存儲(chǔ)傳輸消息151A的其它已編碼部分)以及已編碼應(yīng)用程序消息131E儲(chǔ)存在臨時(shí)存儲(chǔ)位置中。
步驟217包括將存儲(chǔ)和轉(zhuǎn)發(fā)消息轉(zhuǎn)發(fā)到下一存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)的對(duì)應(yīng)動(dòng)作(動(dòng)作214)。例如,存儲(chǔ)和轉(zhuǎn)發(fā)層106可將轉(zhuǎn)發(fā)消息161轉(zhuǎn)發(fā)到存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)121?;蛘?,存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)121可標(biāo)識(shí)接收存儲(chǔ)和轉(zhuǎn)發(fā)層(例如,存儲(chǔ)和轉(zhuǎn)發(fā)層116)。在適當(dāng)時(shí),存儲(chǔ)和轉(zhuǎn)發(fā)層106可在將轉(zhuǎn)發(fā)消息161發(fā)送到存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)或其它存儲(chǔ)和轉(zhuǎn)發(fā)層之前加密和/或數(shù)字地簽署轉(zhuǎn)發(fā)消息161。保護(hù)轉(zhuǎn)發(fā)消息161有助于防止非授權(quán)的讀取器訪問(wèn)轉(zhuǎn)發(fā)消息161。轉(zhuǎn)發(fā)消息161可以使用各種不同的安全機(jī)制中的任一種來(lái)保護(hù),包括WS安全或諸如安全套接字層(“SSL”)等傳輸層安全。
圖3示出了可靠地轉(zhuǎn)發(fā)排隊(duì)的應(yīng)用程序消息的方法300的示例流程圖。方法300將參考計(jì)算機(jī)體系結(jié)構(gòu)100中的模塊和數(shù)據(jù)來(lái)描述。
方法300包括訪問(wèn)存儲(chǔ)和轉(zhuǎn)發(fā)消息的動(dòng)作(動(dòng)作301)。例如,存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)121可接收轉(zhuǎn)發(fā)消息161。如上所述,轉(zhuǎn)發(fā)消息161可以是封裝已編碼傳輸頭部152E(以及可能的傳輸消息151A的其它部分)以及已編碼應(yīng)用程序消息131E(用于送達(dá)應(yīng)用程序112)的SOAP信封。在適當(dāng)時(shí),存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)121可解密轉(zhuǎn)發(fā)消息161的任何已加密部分(例如,根據(jù)WS安全來(lái)加密),并可解碼數(shù)字簽名以確認(rèn)轉(zhuǎn)發(fā)消息161的完整性。轉(zhuǎn)發(fā)消息161的適當(dāng)?shù)亟饷芎驼J(rèn)證的部分可用于重構(gòu)轉(zhuǎn)發(fā)消息161的明文。
在適當(dāng)時(shí),例如,當(dāng)轉(zhuǎn)發(fā)消息不包含nqVolatile頭部時(shí),已編碼傳輸頭部(以及可能的傳輸消息的其它已編碼部分)和已編碼應(yīng)用程序消息可被儲(chǔ)存在存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)或存儲(chǔ)和轉(zhuǎn)發(fā)層處。例如,存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)121可將已編碼的傳輸頭部152E和已編碼應(yīng)用程序消息131E儲(chǔ)存在臨時(shí)存儲(chǔ)中。同樣在適當(dāng)時(shí),存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)或存儲(chǔ)和轉(zhuǎn)發(fā)層可用存儲(chǔ)和轉(zhuǎn)發(fā)響應(yīng)來(lái)確認(rèn)對(duì)轉(zhuǎn)發(fā)消息的接收。例如,存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)121可向存儲(chǔ)和轉(zhuǎn)發(fā)層106發(fā)送轉(zhuǎn)發(fā)響應(yīng)162(可能被加密和/或數(shù)字地簽署)以確認(rèn)對(duì)轉(zhuǎn)發(fā)消息161的接收。存儲(chǔ)和轉(zhuǎn)發(fā)層106可接收并可能解密和/或認(rèn)證轉(zhuǎn)發(fā)響應(yīng)162。響應(yīng)于轉(zhuǎn)發(fā)響應(yīng)162,存儲(chǔ)和轉(zhuǎn)發(fā)層106可從臨時(shí)存儲(chǔ)中移除已編碼傳輸頭部152E(以及可能傳輸消息151A的其它部分)和已編碼應(yīng)用程序消息131E。
一般而言,存儲(chǔ)和轉(zhuǎn)發(fā)響應(yīng)可以是以下格式(在保護(hù)之前)<sEnvelope><sHeader>
<wsaAction>
http//schemas.testcorp.com/queuing/ForwardMessageResponse</wsaAction>
<wsaTo>xsanyURI</wsaTo>
<wsaRelatesTo>original message ID</wsaRelatesTo></sHeader><sBody/></sEnvelope>
一般而言,存儲(chǔ)和轉(zhuǎn)發(fā)響應(yīng)中的元素具有與先前相對(duì)于入隊(duì)消息、入隊(duì)響應(yīng)、傳輸消息以及存儲(chǔ)和轉(zhuǎn)發(fā)消息中所描述的相同的意義。另外,元素/sEnvelope/sHeader/wsaRelatesTo可用于將存儲(chǔ)和轉(zhuǎn)發(fā)響應(yīng)與對(duì)應(yīng)的存儲(chǔ)和轉(zhuǎn)發(fā)消息相關(guān)。例如,轉(zhuǎn)發(fā)響應(yīng)162可包括與標(biāo)識(shí)存儲(chǔ)和轉(zhuǎn)發(fā)消息161的值的相關(guān)。存儲(chǔ)和轉(zhuǎn)發(fā)層106可接收指示轉(zhuǎn)發(fā)消息161的確認(rèn)的轉(zhuǎn)發(fā)響應(yīng)162。
方法300包括標(biāo)識(shí)下一存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)的動(dòng)作(動(dòng)作302)。例如,存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)121可基于存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)121在計(jì)算機(jī)體系結(jié)構(gòu)100中相對(duì)于應(yīng)用程序112(或計(jì)算機(jī)系統(tǒng)111)的位置來(lái)標(biāo)識(shí)存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)122?;蛘撸鎯?chǔ)和轉(zhuǎn)發(fā)服務(wù)121可標(biāo)識(shí)存儲(chǔ)和轉(zhuǎn)發(fā)層(例如,存儲(chǔ)和轉(zhuǎn)發(fā)層116)。存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)121可在標(biāo)識(shí)下一存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)或存儲(chǔ)和轉(zhuǎn)發(fā)層時(shí)參考轉(zhuǎn)發(fā)消息161的頭部。
方法300包括配置新的存儲(chǔ)和轉(zhuǎn)發(fā)消息的動(dòng)作(動(dòng)作303)。例如,存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)121可配置轉(zhuǎn)發(fā)消息163。轉(zhuǎn)發(fā)消息163可以依照與應(yīng)用程序消息131相同的消息通信協(xié)議來(lái)配置。因此,轉(zhuǎn)發(fā)消息161也可包括SOAP信封。轉(zhuǎn)發(fā)消息163可基于應(yīng)用程序102(或計(jì)算機(jī)系統(tǒng)101)在計(jì)算機(jī)體系結(jié)構(gòu)100中相對(duì)于應(yīng)用程序112(或計(jì)算機(jī)系統(tǒng)111)的位置供送達(dá)下一存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)(或存儲(chǔ)和轉(zhuǎn)發(fā)層)。存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)121可將諸如nqVolatile頭部等適當(dāng)?shù)念^部從轉(zhuǎn)發(fā)消息161復(fù)制到轉(zhuǎn)發(fā)消息163。
由于應(yīng)用程序消息131和傳輸消息151A的組成協(xié)議元素(例如,尋址、安全性、可靠性以及事務(wù)協(xié)議元素)都被編碼,應(yīng)用程序消息131和傳輸消息151A的組成協(xié)議元素不干涉存儲(chǔ)和轉(zhuǎn)發(fā)消息163的配置。因此,包括在應(yīng)用程序消息131和頭部152(或傳輸消息151A的其它部分)中的任何組成協(xié)議元素可在轉(zhuǎn)發(fā)消息163中重用。
方法300包括將存儲(chǔ)和轉(zhuǎn)發(fā)消息的主體復(fù)制到新的存儲(chǔ)和轉(zhuǎn)發(fā)消息的主體的動(dòng)作(動(dòng)作304)。例如,存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)121可將已編碼的傳輸頭部152E(以及可能的傳輸消息151A的其它部分)和已編碼的應(yīng)用程序消息131E從轉(zhuǎn)發(fā)消息161復(fù)制到轉(zhuǎn)發(fā)消息163。
在適當(dāng)時(shí),存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)121可在將轉(zhuǎn)發(fā)消息163發(fā)送到下一存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)或其它存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)層之前加密和/或數(shù)字地簽署轉(zhuǎn)發(fā)消息163。保護(hù)轉(zhuǎn)發(fā)消息163有助于防止非授權(quán)的讀取器訪問(wèn)轉(zhuǎn)發(fā)消息163。轉(zhuǎn)發(fā)消息163可使用各種不同的安全機(jī)制中的任一種來(lái)保護(hù),包括WS安全或諸如安全套接字層(“SSL”)等傳輸層安全。
方法300包括將新的存儲(chǔ)和轉(zhuǎn)發(fā)消息轉(zhuǎn)發(fā)到下一存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)的動(dòng)作(動(dòng)作305)。例如,存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)121可將轉(zhuǎn)發(fā)消息163轉(zhuǎn)發(fā)到存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)122?;蛘?,存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)121可將轉(zhuǎn)發(fā)消息163轉(zhuǎn)發(fā)到存儲(chǔ)和轉(zhuǎn)發(fā)層(例如,存儲(chǔ)和轉(zhuǎn)發(fā)層116)。在適當(dāng)時(shí),存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)121可在將轉(zhuǎn)發(fā)消息163發(fā)送到存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)122之前加密轉(zhuǎn)發(fā)消息163。一般而言,轉(zhuǎn)發(fā)消息163可以類(lèi)似于轉(zhuǎn)發(fā)消息161被格式化。
存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)122可接收轉(zhuǎn)發(fā)消息163。在適當(dāng)時(shí),存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)122可如先前所述解密轉(zhuǎn)發(fā)消息163和/或驗(yàn)證其完整性。存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)可將已編碼的傳輸頭部152E和已編碼的應(yīng)用程序消息131E儲(chǔ)存在臨時(shí)存儲(chǔ)中。存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)122還可向存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)121發(fā)送轉(zhuǎn)發(fā)響應(yīng)164(可能被加密和/或數(shù)字地簽署)以確認(rèn)對(duì)轉(zhuǎn)發(fā)消息163的接收。存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)121可接收并可能解密和/或認(rèn)證轉(zhuǎn)發(fā)響應(yīng)164。響應(yīng)于轉(zhuǎn)發(fā)響應(yīng)164,存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)121可從臨時(shí)存儲(chǔ)中移除已編碼的傳輸頭部152E(以及可能傳輸消息151A的其它部分)和已編碼的應(yīng)用程序消息131E。一般而言,轉(zhuǎn)發(fā)響應(yīng)164可類(lèi)似于轉(zhuǎn)發(fā)響應(yīng)162被格式化。
存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)122還可配置存儲(chǔ)和轉(zhuǎn)發(fā)消息166(新的存儲(chǔ)和轉(zhuǎn)發(fā)SOAP信封)以送達(dá)存儲(chǔ)和轉(zhuǎn)發(fā)層116。存儲(chǔ)和轉(zhuǎn)發(fā)層122可類(lèi)似于存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)121對(duì)轉(zhuǎn)發(fā)消息161的處理來(lái)處理存儲(chǔ)和轉(zhuǎn)發(fā)消息163(例如,標(biāo)識(shí)下一存儲(chǔ)和轉(zhuǎn)發(fā)模塊等)。因此,存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)122可將已編碼的傳輸頭部152E(以及可能傳輸消息151A的其它部分)和已編碼的應(yīng)用程序消息131E從轉(zhuǎn)發(fā)消息164復(fù)制到轉(zhuǎn)發(fā)消息166。存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)122可將轉(zhuǎn)發(fā)消息166(可能被加密和/或數(shù)字地簽署)發(fā)送到存儲(chǔ)和轉(zhuǎn)發(fā)層116。一般而言,轉(zhuǎn)發(fā)消息166可類(lèi)似于轉(zhuǎn)發(fā)消息161和163被格式化。
由于應(yīng)用程序消息131和傳輸消息151A的組成協(xié)議元素(例如,尋址、安全性、可靠性以及事務(wù)協(xié)議元素)都被編碼,應(yīng)用程序消息131和傳輸消息151A的組成協(xié)議元素不干涉存儲(chǔ)和轉(zhuǎn)發(fā)消息166的配置。因此,包括在應(yīng)用程序消息131和頭部152(以及傳輸消息151A的其它部分)中的任何組成協(xié)議元素可在轉(zhuǎn)發(fā)消息166中重用。
圖4示出了可靠地接收排隊(duì)的應(yīng)用程序消息的方法400的示例流程圖。方法400將參考計(jì)算機(jī)體系結(jié)構(gòu)100中的模塊和數(shù)據(jù)來(lái)描述。
方法400包括用于轉(zhuǎn)發(fā)來(lái)自發(fā)送計(jì)算機(jī)系統(tǒng)的應(yīng)用程序消息的功能性的面向結(jié)果的步驟(步驟419)。步驟419可包括用于實(shí)現(xiàn)轉(zhuǎn)發(fā)來(lái)自發(fā)送計(jì)算機(jī)系統(tǒng)的應(yīng)用程序消息的結(jié)果的任何對(duì)應(yīng)的動(dòng)作。然而,在圖4所示的示例中,步驟419包括接收存儲(chǔ)和轉(zhuǎn)發(fā)消息的對(duì)應(yīng)動(dòng)作(動(dòng)作401)。
例如,存儲(chǔ)和轉(zhuǎn)發(fā)層116可接收轉(zhuǎn)發(fā)消息166。在適當(dāng)時(shí),存儲(chǔ)和轉(zhuǎn)發(fā)層116可解密轉(zhuǎn)發(fā)消息163的任何已加密部分(例如,根據(jù)WS安全來(lái)加密),并可解碼數(shù)字簽名以確認(rèn)轉(zhuǎn)發(fā)消息166的完整性。轉(zhuǎn)發(fā)消息166的適當(dāng)?shù)亟饷芎驼J(rèn)證的部分可用于重構(gòu)轉(zhuǎn)發(fā)消息166的明文。存儲(chǔ)和轉(zhuǎn)發(fā)層可將已編碼的傳輸頭部152E(以及可能傳輸消息151A的其它部分)和已編碼應(yīng)用程序消息131E儲(chǔ)存在臨時(shí)存儲(chǔ)中。
存儲(chǔ)和轉(zhuǎn)發(fā)層116也可向存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)122發(fā)送轉(zhuǎn)發(fā)響應(yīng)167(可能被加密和/或數(shù)字地簽署)以確認(rèn)對(duì)轉(zhuǎn)發(fā)消息166的接收。存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)122可接收并可能解密和/或認(rèn)證轉(zhuǎn)發(fā)消息167。響應(yīng)于轉(zhuǎn)發(fā)響應(yīng)167,存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)122可從臨時(shí)存儲(chǔ)中移除已編碼頭部152E(以及可能傳輸消息151A的其它部分)和已編碼應(yīng)用程序消息131E。一般而言,轉(zhuǎn)發(fā)響應(yīng)167可以類(lèi)似于轉(zhuǎn)發(fā)響應(yīng)164和162被格式化。
如上所述,轉(zhuǎn)發(fā)消息166可以是封裝已編碼傳輸頭部152E(以及可能傳輸消息151A的其它部分)和已編碼應(yīng)用程序消息131E(以送達(dá)應(yīng)用程序112)的SOAP信封。已編碼應(yīng)用程序消息131E可以至少部分地基于參與通信會(huì)話的應(yīng)用程序102和應(yīng)用程序112供送達(dá)應(yīng)用程序112。
步驟419包括解碼已編碼傳輸頭部的對(duì)應(yīng)動(dòng)作(動(dòng)作402)。例如,存儲(chǔ)和轉(zhuǎn)發(fā)層116可將已編碼傳輸頭部152E解碼成對(duì)應(yīng)的(未編碼)傳輸頭部152(例如,/sEnvelope/sBody/*/nqTransferHeaders/nqWrappedXmlBase64元素)。存儲(chǔ)和轉(zhuǎn)發(fā)層116可執(zhí)行一解包算法,該算法采取編碼類(lèi)型(例如,base64)、內(nèi)容類(lèi)型(例如,字符串)和已編碼傳輸頭部作為輸入,并返回(未編碼)傳輸頭部。在適當(dāng)時(shí),存儲(chǔ)和轉(zhuǎn)發(fā)層116也可解碼傳輸消息151A的其它部分。
步驟419包括配置傳輸消息的動(dòng)作(動(dòng)作403)。例如,存儲(chǔ)和轉(zhuǎn)發(fā)層116可配置傳輸消息151B。傳輸消息151B可以依照與應(yīng)用程序消息131相同的消息通信協(xié)議來(lái)配置。因此,傳輸消息151B也可包括SOAP信封。傳輸消息151B可標(biāo)識(shí)對(duì)應(yīng)于已編碼應(yīng)用程序消息131E的消息會(huì)話,并可標(biāo)識(shí)參與該消息會(huì)話的應(yīng)用程序。例如,傳輸消息151B可標(biāo)識(shí)應(yīng)用程序102和應(yīng)用程序112之間的消息會(huì)話。在某些實(shí)施例中,傳輸消息151A是從轉(zhuǎn)發(fā)消息166內(nèi)其封裝中重構(gòu)的,并且由此,傳輸消息151A和151B本質(zhì)上是相同的傳輸消息。
由于應(yīng)用程序消息131的組成協(xié)議元素(例如,尋址、安全性、可靠性和事務(wù)協(xié)議元素)都被編碼,因此應(yīng)用程序消息131的組成協(xié)議元素不干涉?zhèn)鬏斚?51B的配置。因此,包括在應(yīng)用程序消息131中的任何組成協(xié)議元素可在轉(zhuǎn)發(fā)消息151B中重用。一般而言,傳輸消息151B可以類(lèi)似于傳輸消息151A被格式化。
步驟419包括在傳輸消息中包括傳輸頭部的對(duì)應(yīng)動(dòng)作(動(dòng)作404)。例如,存儲(chǔ)和轉(zhuǎn)發(fā)層116可在傳輸消息151B中包括傳輸頭部152。傳輸頭部152可指示如何將傳輸消息151B傳輸?shù)綉?yīng)用程序112。
步驟419包括將已編碼應(yīng)用程序消息封裝在傳輸消息中的對(duì)應(yīng)動(dòng)作(動(dòng)作405)。例如,存儲(chǔ)和轉(zhuǎn)發(fā)層116可將已編碼應(yīng)用程序消息131E封裝在傳輸消息151B中。存儲(chǔ)和轉(zhuǎn)發(fā)層116可以可任選地加密和/或數(shù)字地簽署傳輸消息151B。保護(hù)傳輸消息151B向隊(duì)列管理器118提供了對(duì)傳輸消息151B的真實(shí)性的某種保證,并可防止將額外的消息注入到消息隊(duì)列117中。傳輸消息151B可以使用各種不同的安全機(jī)制中的任一種,諸如WS安全來(lái)保護(hù)。
步驟419包括發(fā)送傳輸消息的對(duì)應(yīng)動(dòng)作(動(dòng)作406)。例如,存儲(chǔ)和轉(zhuǎn)發(fā)層116可(適當(dāng)?shù)丶用芤约?將傳輸消息151B發(fā)送到傳輸層114。一般而言,傳輸消息151B可以類(lèi)似于傳輸消息151A被格式化。
方法400包括用于從發(fā)送計(jì)算機(jī)系統(tǒng)傳輸應(yīng)用程序消息的功能性的面向結(jié)果的步驟(步驟420)。步驟420可包括用于實(shí)現(xiàn)從發(fā)送計(jì)算機(jī)系統(tǒng)傳輸應(yīng)用程序消息的任何對(duì)應(yīng)動(dòng)作。然而,在圖4所示的示例中,步驟420包括處理傳輸消息的對(duì)應(yīng)動(dòng)作(動(dòng)作407)。例如,傳輸層114可處理傳輸消息151B。傳輸消息151B可封裝已編碼應(yīng)用程序消息131E,并可依照與應(yīng)用程序消息131相同的消息通信協(xié)議來(lái)配置。因此,傳輸消息151B也可包括SOAP信封。
傳輸層114可在適當(dāng)時(shí)(例如,依照WS安全)解密傳輸消息151B并確認(rèn)其各部分的完整性。解密傳輸消息151B可揭露消息151B的明文。在適當(dāng)時(shí),傳輸層114例如依照其Ordered屬性被設(shè)為真值(“1”或“true”)的nqSequence頭部執(zhí)行本地處理以確保按序送達(dá)。傳輸層114將wsuExpires頭部值與當(dāng)前日期時(shí)間進(jìn)行比較來(lái)看應(yīng)用程序消息131是否仍然有效。如果否,則接收隊(duì)列服務(wù)可使該請(qǐng)求失敗,并生成適當(dāng)?shù)腻e(cuò)誤,例如[Code]s12Receiver[Subcode]nqMessageExpired[Reason]“the message has expired”
在某些實(shí)施例中,如果沒(méi)有一個(gè)隊(duì)列監(jiān)聽(tīng)器在消息過(guò)期之前將消息出隊(duì),則傳輸層114可能需要在它接受并確認(rèn)了消息之后生成適當(dāng)?shù)腻e(cuò)誤。在這些實(shí)施例中,錯(cuò)誤可通過(guò)將nqSequence和nqQueueName頭部復(fù)制到錯(cuò)誤的sdetail元素來(lái)補(bǔ)充。
傳輸層114也將已編碼應(yīng)用程序消息131E持久地儲(chǔ)存消息隊(duì)列117中。
步驟420包括使已編碼應(yīng)用程序消息入隊(duì)的對(duì)應(yīng)動(dòng)作(動(dòng)作408)。例如,傳輸層114可使已編碼應(yīng)用程序消息131E入隊(duì)到消息隊(duì)列117中。傳輸層114可保留TransferMessage信封的排隊(duì)頭部(nqQueueName;wsuExpires;以及nqSequence)和nqApplicationMessage主體元素以供進(jìn)一步處理(例如,出隊(duì)以送達(dá)應(yīng)用程序112)。
在某些實(shí)施例中,隊(duì)列監(jiān)聽(tīng)器注冊(cè)對(duì)接收關(guān)于隊(duì)列上可用的會(huì)話的通知的興趣。例如,隊(duì)列監(jiān)聽(tīng)器113可向隊(duì)列管理器118發(fā)送注冊(cè)消息191,以注冊(cè)對(duì)消息隊(duì)列117中可用的消息的興趣。注冊(cè)消息191可表示應(yīng)用程序112對(duì)來(lái)自應(yīng)用程序102的會(huì)話和消息感興趣。一般而言,注冊(cè)消息可以是以下格式(在保護(hù)之前)<sEnvelope...><sHeader>
<wsaAction>
http//schemas.microsoft.com/queuing/Listen</wsaAction>
<wsaTo>xsanyURI</wsaTo>
<wsaReplyTo>wsaEndpointReference</wsaReplyTo>
<wsaMessageID>xsanyURI</wsaMessageID>
<nqQueueName>xsanyURI</nqQueueName>
<nqVolatile/>?...</sHeader><sBody>
<nqListen>
<nqFilter>XPath predicate</nqFilter>?</nqListen></sBody></sEnvelope>
一般而言,注冊(cè)消息中的元素具有與先前相對(duì)于入隊(duì)消息、入隊(duì)響應(yīng)、傳輸消息、存儲(chǔ)和轉(zhuǎn)發(fā)消息以及存儲(chǔ)和轉(zhuǎn)發(fā)響應(yīng)所描述的相同的意義。另外,/sEnvelope/sHeader/nqQueueName元素可用于指示隊(duì)列監(jiān)聽(tīng)器希望監(jiān)聽(tīng)的邏輯隊(duì)列的名字(URI)。當(dāng)注冊(cè)請(qǐng)求中沒(méi)有由nqQueueName值命名的隊(duì)列時(shí),隊(duì)列服務(wù)可生成適當(dāng)?shù)腻e(cuò)誤[Code]s12Sender[Subcode]nqNoSuchQueue[Reason]“no such queue exists”/sEnvelope/sHeader/nqVolatile元素可用于指示隊(duì)列監(jiān)聽(tīng)器對(duì)被認(rèn)為是易失性的應(yīng)用程序會(huì)話感興趣。即,指示對(duì)其消息可能不被寫(xiě)入持久存儲(chǔ)的應(yīng)用程序會(huì)話的興趣。如果該元素未出現(xiàn),則僅向監(jiān)聽(tīng)器通知持久應(yīng)用程序會(huì)話。/sEnvelope/sBody/*/nqFilter元素可用于指示隊(duì)列監(jiān)聽(tīng)器用于限制它所感興趣的應(yīng)用程序會(huì)話的XML路徑語(yǔ)言(“XPath”)判定。該判定可應(yīng)用于應(yīng)用程序會(huì)話中的第一條消息,并且僅通知隊(duì)列監(jiān)聽(tīng)器該判定是否求值為真。如果該元素不出現(xiàn),則可向隊(duì)列監(jiān)聽(tīng)器通知所有的應(yīng)用程序會(huì)話。
響應(yīng)于從隊(duì)列監(jiān)聽(tīng)器接收注冊(cè)消息,對(duì)應(yīng)的隊(duì)列管理器118可生成并發(fā)送注冊(cè)響應(yīng)。例如,響應(yīng)于接收注冊(cè)消息191,隊(duì)列管理器118可向隊(duì)列監(jiān)聽(tīng)器113發(fā)送注冊(cè)響應(yīng)192。注冊(cè)響應(yīng)192指示成功的注冊(cè)。一般而言,注冊(cè)響應(yīng)可以是以下格式(在保護(hù)之前)<sEnvelope...><sHeader>
<wsaAction>
http//schemas.microsoft.com/queuing/ListenResponse</wsaAction>
<wsaTo>xsanyURI</wsaTo>
<wsaRelatesTo>request message ID</wsaRelatesTo>
<wsaMessageID>xsanyURI</wsaMessageID>
...</sHeader><sBody>
<nqListenResponse>
<nqIdentifier>xsanyURI</nqIdentifier>
</nqListenResponse></sBody></sEnvelope>
一般而言,注冊(cè)響應(yīng)中的元素具有與先前相對(duì)于入隊(duì)消息、入隊(duì)響應(yīng)、傳輸消息、存儲(chǔ)和轉(zhuǎn)發(fā)消息、存儲(chǔ)和轉(zhuǎn)發(fā)響應(yīng)、以及注冊(cè)消息相同的意義。另外,/sEnvelope/sBody/*/nqIdentifier元素可用于包含標(biāo)識(shí)特定監(jiān)聽(tīng)上下文的URI。例如,它與監(jiān)聽(tīng)請(qǐng)求中提供的過(guò)濾器相關(guān)。當(dāng)向監(jiān)聽(tīng)器通知新應(yīng)用程序會(huì)話或會(huì)話消息的可用性,并且當(dāng)監(jiān)聽(tīng)器接受應(yīng)用程序會(huì)話時(shí),使用該標(biāo)識(shí)符。
此外,應(yīng)用程序消息131可以是通信會(huì)話中的初始消息。由此,響應(yīng)于接收應(yīng)用程序消息131(隊(duì)列監(jiān)聽(tīng)器113所注冊(cè)的消息),隊(duì)列管理器118可確定隊(duì)列監(jiān)聽(tīng)器113注冊(cè)了對(duì)應(yīng)用程序消息131的興趣。例如,隊(duì)列管理器118可將消息118與注冊(cè)消息191中包括的XPath判定進(jìn)行匹配。由此,響應(yīng)于接收消息131,隊(duì)列管理器118可配置會(huì)話可用消息172并將其發(fā)送到隊(duì)列監(jiān)聽(tīng)器113。一般而言,會(huì)話可用消息(例如,SOAP信封)可包括以下格式的頭部<nqSessionAvailable><nqQueueName>xsanyURI</nqQueueName><nqIdentifier>xsanyURI</nqIdentifier><nqSessionAvailable>
一般而言,會(huì)話可用消息中的元素具有與先前相對(duì)于入隊(duì)消息、入隊(duì)響應(yīng)、傳輸消息、存儲(chǔ)和轉(zhuǎn)發(fā)消息、存儲(chǔ)和轉(zhuǎn)發(fā)響應(yīng)、注冊(cè)消息、以及注冊(cè)響應(yīng)所描述的相同的意義。另外,nqSessionAvailable/nqQueueName元素可用于指示對(duì)會(huì)話在其上可用的邏輯隊(duì)列進(jìn)行命名的URI。nqSessionAvailable/nqIdentifier可用于指示在對(duì)隊(duì)列監(jiān)聽(tīng)器的注冊(cè)響應(yīng)中返回的標(biāo)識(shí)符,隊(duì)列監(jiān)聽(tīng)器已成功地接受該會(huì)話并且消息在會(huì)話上是可用的。
隊(duì)列監(jiān)聽(tīng)器113可接收會(huì)話可用消息172。響應(yīng)于會(huì)話可用消息172,隊(duì)列監(jiān)聽(tīng)器配置并發(fā)送會(huì)話接受消息173。接受消息173包含用于將消息出隊(duì)的枚舉上下文(例如,依照WS枚舉)。一般而言,會(huì)話接受消息可以是以下格式(在保護(hù)之前)<sEnvelope...><sHeader>
<wsaAction>
http//schemas.microsoft.com/queuing/Accept</wsaAction>
<wsaTo>xsanyURI</wsaTo>
<wsaReplyTo>wsaEndpointReference</wsaReplyTo>
<wsaMessageID>xsanyURI</wsaMessageID>
<nqQueueName>xsanyURI</nqQueueName>
...</sHeader><sBody>
<nqAccept>
<nqIdentifier>xsanyURI</nqIdentifier>
<nqMaxTime>xsduration</nqMaxTime>?</nqAccept></sBody></sEnvelope>
一般而言,會(huì)話接受消息中的元素具有與先前相對(duì)于入隊(duì)消息、入隊(duì)響應(yīng)、傳輸消息、存儲(chǔ)和轉(zhuǎn)發(fā)消息、存儲(chǔ)和轉(zhuǎn)發(fā)響應(yīng)、注冊(cè)消息、注冊(cè)響應(yīng)以及會(huì)話可用消息所描述的相同的意義。另外,/sEnvelope/sHeader/nqQueueName元素包含監(jiān)聽(tīng)器期望在其上接收消息的邏輯隊(duì)列的名字(URI)。如果注冊(cè)請(qǐng)求中沒(méi)有由nqQueueName值命名的隊(duì)列,則隊(duì)列管理器可生成以下適當(dāng)?shù)腻e(cuò)誤[Code]s12Sender[Subcode]nqNoSuchQueue[Reason]“no such queue exists”/sEnvelope/sBody/*/nqIdentifier元素可用于包含對(duì)隊(duì)列監(jiān)聽(tīng)器的注冊(cè)響應(yīng)中返回的標(biāo)識(shí)符。如果請(qǐng)求中的nqIdentifier值不被接收隊(duì)列服務(wù)識(shí)別,則隊(duì)列服務(wù)可生成以下適當(dāng)?shù)腻e(cuò)誤[Code]s12Sender[Subcode]nqNoSuchListener[Reason]“no such Listen identifier exists”/sEnvelope/sBody/*/nqMaxTime元素可用于指示配置隊(duì)列監(jiān)聽(tīng)器等待應(yīng)用程序會(huì)話變得可用的最大時(shí)間量。當(dāng)該元素存在時(shí),如果在持續(xù)時(shí)間結(jié)束(從接收隊(duì)列服務(wù)處理會(huì)話接受消息開(kāi)始測(cè)量)沒(méi)有匹配注冊(cè)標(biāo)識(shí)符的應(yīng)用程序會(huì)話變得可用,則接收隊(duì)列服務(wù)可生成以下適當(dāng)?shù)腻e(cuò)誤[Code]s12Receiver[Subcode]nqNoSessionAvailable[Reason]“no matching application session available”
注意,隊(duì)列監(jiān)聽(tīng)器可以不依賴(lài)于這一錯(cuò)誤的精確定時(shí),因?yàn)榻邮贞?duì)列服務(wù)可能無(wú)法在持續(xù)時(shí)間過(guò)去之后立即檢測(cè)到該情況并發(fā)出錯(cuò)誤。
響應(yīng)于會(huì)話接受消息173,隊(duì)列管理器118可配置并發(fā)送會(huì)話接受響應(yīng)193。一般而言,會(huì)話接受響應(yīng)可以是以下格式(在保護(hù)之前)<sEnvelope...><sHeader>
<wsaAction>
http//schemas.microsofi.com/queuing/AcceptResponse</wsaAction>
<wsaTo>xsanyURI</wsaTo>
<wsaReplyTo>wsaEndpointReference</wsaReplyTo>
<wsaMessageID>xsanyURI</wsaMessageID>
...</sHeader><sBody>
<nqAcceptResponse>
<wsenEnumerationContext>...</wsenEnumerationContext>
</nqAcceptResponse></sBody></sEnvelope>
一般而言,會(huì)話接受響應(yīng)中的元素具有與先前相對(duì)于入隊(duì)消息、入隊(duì)響應(yīng)、傳輸消息、存儲(chǔ)和轉(zhuǎn)發(fā)消息、存儲(chǔ)和轉(zhuǎn)發(fā)響應(yīng)、注冊(cè)消息、注冊(cè)響應(yīng)、會(huì)話可用消息以及會(huì)話接受消息所描述的相同的意義。此外,/sEnvelope/sBody/*/wsenEnumerationContext元素可用于包含例如依照WS枚舉的新枚舉上下文的XML表示。接收應(yīng)用程序可在對(duì)該應(yīng)用程序會(huì)話的出隊(duì)消息請(qǐng)求中傳遞該XML數(shù)據(jù),直到且除非出隊(duì)響應(yīng)更新枚舉上下文。
現(xiàn)在回頭參考圖4,步驟420包括發(fā)送消息可用消息的動(dòng)作(動(dòng)作409)。例如,隊(duì)列管理器118可向隊(duì)列監(jiān)聽(tīng)器113發(fā)送(可能加密和/或數(shù)字地簽署的)消息可用消息174。消息可用消息174向隊(duì)列監(jiān)聽(tīng)器113指示已編碼應(yīng)用程序消息131已被排隊(duì)。消息可用消息174可在隊(duì)列監(jiān)聽(tīng)器113注冊(cè)了對(duì)消息隊(duì)列117中排隊(duì)的消息的興趣之后和/或在隊(duì)列監(jiān)聽(tīng)器113接受了對(duì)應(yīng)的會(huì)話之后被發(fā)送到隊(duì)列監(jiān)聽(tīng)器113。一般而言,消息可用消息(例如,SOAP信封)可包括以下格式的消息可用頭部<nqMessageAvailable><nqQueueName>xsanyURI</nqQueueName><nqIdentifier>xsanyURI</nqIdentifier><nqMessageAvailable>
nqMessageAvailable/nqQueueName元素可用于指示對(duì)其上消息可用的邏輯隊(duì)列進(jìn)行命名的URI。nqMessageAvailable/nqIdentifier可用于指示在對(duì)隊(duì)列監(jiān)聽(tīng)器的注冊(cè)響應(yīng)中返回的標(biāo)識(shí)符,隊(duì)列監(jiān)聽(tīng)器已成功地接受該會(huì)話,且在該會(huì)話上消息可用。在某些實(shí)施例中,消息可用頭部可被添加到會(huì)話接受響應(yīng)或出隊(duì)響應(yīng),或者它可作為獨(dú)立的單向消息用空主體來(lái)發(fā)送。如果它作為獨(dú)立的消息來(lái)發(fā)送,則它可以用http//schemas.testcorp.com/queuing/MessageAvailable的wsaAction來(lái)發(fā)送。如果它作為另一消息的頭部來(lái)發(fā)送,則可在單個(gè)消息中包括多個(gè)MessageAvailable頭部;它們也可與一個(gè)或多個(gè)會(huì)話可用頭部混合。
方法400包括用于送達(dá)來(lái)自發(fā)送計(jì)算機(jī)系統(tǒng)的應(yīng)用程序消息的功能性的面向結(jié)果的步驟(步驟421)。步驟421可包括用于實(shí)現(xiàn)送達(dá)來(lái)自發(fā)送計(jì)算機(jī)系統(tǒng)的應(yīng)用程序消息的結(jié)果的任何對(duì)應(yīng)的動(dòng)作。然而,在圖4所示的示例中,步驟421包括接收消息可用消息的對(duì)應(yīng)動(dòng)作(動(dòng)作410)。例如,隊(duì)列監(jiān)聽(tīng)器113可接收指示消息131可用于送達(dá)應(yīng)用程序112的消息可用消息174。在適當(dāng)時(shí),隊(duì)列監(jiān)聽(tīng)器可解密消息可用消息174和/或驗(yàn)證其完整性。
步驟421包括發(fā)送出隊(duì)消息的對(duì)應(yīng)動(dòng)作(動(dòng)作411)。例如,隊(duì)列監(jiān)聽(tīng)器112可向隊(duì)列管理器118發(fā)送(可能加密和/或數(shù)字地簽署的)出隊(duì)消息176。出隊(duì)消息176可指示將要把應(yīng)用程序消息131出隊(duì)以送達(dá)應(yīng)用程序112。出隊(duì)消息176可包括標(biāo)識(shí)消息隊(duì)列117的元素(例如,nqQueueName)以及標(biāo)識(shí)應(yīng)用程序消息131的元素(例如,nqSequence)。一般而言,出隊(duì)消息(例如,SOAP信封)可以是具有附加約束的WS枚舉拉消息的格式。
一般而言,出隊(duì)消息中的元素具有與先前相對(duì)于入隊(duì)消息、入隊(duì)響應(yīng)、傳輸消息、存儲(chǔ)和轉(zhuǎn)發(fā)消息、存儲(chǔ)和轉(zhuǎn)發(fā)響應(yīng)、注冊(cè)消息、注冊(cè)響應(yīng)、會(huì)話可用消息、會(huì)話接受消息、以及消息可用消息所描述的相同的意義。此外,出隊(duì)消息可包括/sEnvelope/sHeader/nqAbortCount元素,它可用于指示中毒消息檢測(cè)的重試計(jì)數(shù)。出隊(duì)消息可包括/sEnvelope/sHeader/wscoorCoordinationContext元素,它可用于指示原子事務(wù)競(jìng)爭(zhēng)(例如,當(dāng)出隊(duì)消息176和出隊(duì)響應(yīng)177是兩階段提交協(xié)議的一部分時(shí))。出隊(duì)消息可包括/sEnvelope/sBody/*/wsenMaxElements元素,它可用于指示在一個(gè)出隊(duì)請(qǐng)求中是否可出隊(duì)多個(gè)元素。
如果出隊(duì)消息中傳遞的枚舉上下文不是有效的,則接收隊(duì)列服務(wù)可使該請(qǐng)求失敗,并如WS枚舉中所指定的那樣生成以下錯(cuò)誤[Code]s12Sender[Subcode]wsenInvalidEnumerationContext[Reason]“invalid enumeration context”步驟420包括接收出隊(duì)消息的對(duì)應(yīng)動(dòng)作(動(dòng)作412)。例如,隊(duì)列管理器118可從隊(duì)列監(jiān)聽(tīng)器113接收出隊(duì)消息176。在適當(dāng)時(shí),隊(duì)列管理器118可解密出隊(duì)消息176和/或驗(yàn)證其完整性。步驟420包括配置消息響應(yīng)的對(duì)應(yīng)動(dòng)作(動(dòng)作413)。例如,隊(duì)列管理器118可配置出隊(duì)響應(yīng)177。出隊(duì)響應(yīng)177可依照與應(yīng)用程序消息131相同的消息通信協(xié)議來(lái)配置。因此,出隊(duì)響應(yīng)也可包括SOAP信封。隊(duì)列管理器118在配置出隊(duì)響應(yīng)177時(shí)可依照WS尋址和WS協(xié)調(diào)來(lái)處理傳輸消息151B。隊(duì)列管理器118可將會(huì)話ID頭部(如果存在)從傳輸消息151B的nqTransferHeader元素復(fù)制到出隊(duì)響應(yīng)177。如果會(huì)話ID頭部具有LastMessage標(biāo)志,則隊(duì)列管理器118可向出隊(duì)響應(yīng)177的主體添加wsenEndOfSequence元素。
由于應(yīng)用程序消息131的組成協(xié)議元素(例如,尋址、安全性、可靠性和事務(wù)協(xié)議元素)都被編碼,應(yīng)用程序消息131的組成協(xié)議元素不干涉出隊(duì)響應(yīng)177的配置。因此,包括在應(yīng)用程序消息131中的任何組成協(xié)議元素可在出隊(duì)響應(yīng)177中重用。
一般而言,出隊(duì)響應(yīng)(例如,SOAP信封)可以是具有附加約束的WS枚舉拉響應(yīng)消息的格式。一般而言,出隊(duì)響應(yīng)中的元素具有與先前相對(duì)于入隊(duì)消息、入隊(duì)響應(yīng)、傳輸消息、存儲(chǔ)和轉(zhuǎn)發(fā)消息、存儲(chǔ)和轉(zhuǎn)發(fā)響應(yīng)、注冊(cè)消息、注冊(cè)響應(yīng)、會(huì)話可用消息、會(huì)話接受消息、消息可用消息以及出隊(duì)消息中所描述的相同的意義。此外,出隊(duì)響應(yīng)可包括/sEnvelope/sHeader/nqSequence元素,它可包含對(duì)包含在出隊(duì)消息中的枚舉上下文是否與應(yīng)用程序會(huì)話相關(guān)聯(lián)的指示。出隊(duì)響應(yīng)可包括/sEnvelope/sBody/wsenPullResponse/wsenItems/nqApplicationMessage/nqWrappedXmlBase64元素,它包含適當(dāng)?shù)匕b的應(yīng)用程序消息的應(yīng)用程序SOAP信封。出隊(duì)響應(yīng)可包括/sEnvelope/sBody/wsenPullResponse/wsenEndOfSequence元素,它可用于指示序列中的最后一個(gè)消息或者由于其它原因在該上下文中將不會(huì)有額外的消息。
步驟420包括將已編碼應(yīng)用程序消息封裝在出隊(duì)響應(yīng)中的對(duì)應(yīng)動(dòng)作(動(dòng)作414)。例如,隊(duì)列管理器118可將已編碼應(yīng)用程序消息131E封裝在出隊(duì)響應(yīng)177中。在封裝了已編碼應(yīng)用程序消息131E之后,出隊(duì)響應(yīng)177可被加密和/或數(shù)字地簽署。數(shù)字地簽署出隊(duì)響應(yīng)177向隊(duì)列監(jiān)聽(tīng)器113提供了對(duì)出隊(duì)響應(yīng)177的真實(shí)性的某種保證。出隊(duì)響應(yīng)177可以使用各種不同的安全機(jī)制中的任一種來(lái)保護(hù),包括WS安全或諸如安全套接字層(“SSL”)等傳輸層安全。
步驟420包括發(fā)送出隊(duì)響應(yīng)以送達(dá)應(yīng)用程序的對(duì)應(yīng)動(dòng)作(動(dòng)作415)。例如,隊(duì)列管理器118可向隊(duì)列監(jiān)聽(tīng)器113發(fā)送出隊(duì)響應(yīng)177。步驟421包括接收封裝了已編碼應(yīng)用程序消息的出隊(duì)響應(yīng)的對(duì)應(yīng)動(dòng)作(動(dòng)作416)。例如,隊(duì)列監(jiān)聽(tīng)器113可接收封裝了已編碼應(yīng)用程序消息131E的出隊(duì)響應(yīng)177。在適當(dāng)時(shí),隊(duì)列監(jiān)聽(tīng)器113可解密出隊(duì)響應(yīng)177和/或驗(yàn)證其完整性。
步驟421包括解碼已編碼應(yīng)用程序消息的對(duì)應(yīng)動(dòng)作(動(dòng)作417)。例如,隊(duì)列監(jiān)聽(tīng)器113可將已編碼應(yīng)用程序消息131E解碼成應(yīng)用程序消息131。隊(duì)列監(jiān)聽(tīng)器113可執(zhí)行一解包算法,該算法采取編碼類(lèi)型(例如,base64)、內(nèi)容類(lèi)型(例如,字符串)以及已編碼應(yīng)用程序消息作為輸入,并返回(未編碼)應(yīng)用程序消息作為輸出。
步驟421包括將應(yīng)用程序消息發(fā)送到應(yīng)用程序的對(duì)應(yīng)動(dòng)作(動(dòng)作418)。例如,隊(duì)列監(jiān)聽(tīng)器113可將應(yīng)用程序消息131發(fā)送到應(yīng)用程序112。如果應(yīng)用程序112不是活動(dòng)的,則隊(duì)列監(jiān)聽(tīng)器113可將喚醒通知178發(fā)送到管理應(yīng)用程序112的容器環(huán)境。
隊(duì)列監(jiān)聽(tīng)器103也可以可任選地加密和/或數(shù)字地簽署應(yīng)用程序131。加密和/或數(shù)字地簽署應(yīng)用程序消息131有助于確保應(yīng)用程序消息131在傳輸期間不被修改或截取。應(yīng)用程序消息131E可以使用各種不同的安全機(jī)制中的任一種,諸如WS安全來(lái)保護(hù)。
應(yīng)用程序112接收并處理應(yīng)用程序消息112。在適當(dāng)時(shí),應(yīng)用程序112可解密應(yīng)用程序消息131,以揭露應(yīng)用程序消息131的明文。應(yīng)用程序112也可解碼對(duì)應(yīng)的數(shù)字簽名來(lái)驗(yàn)證應(yīng)用程序消息131的完整性。
從隊(duì)列中讀取消息的應(yīng)用程序可主宿于容器中。應(yīng)用程序可能由于各種原因而不運(yùn)行,例如應(yīng)用程序失敗、應(yīng)用程序空閑、應(yīng)用程序被回收等。喚醒通知能夠向宿主環(huán)境通知隊(duì)列中的消息的可用性。宿主環(huán)境可使用喚醒通知來(lái)啟動(dòng)應(yīng)用程序、啟動(dòng)應(yīng)用程序的另一實(shí)例、或調(diào)度應(yīng)用程序運(yùn)行。一般而言,喚醒通知可以是以下格式(在保護(hù)之前)<sEnvelope...><sHeader>
<wsaAction>
http//schemas.testcoep.com/queuing/wakeup</wsaAction>
<wsaTo>xsanyURI</wsaTo>
<nqQueueName>xsanyURI</nqQueueName>
<nqVolatile/>?...</sHeader><sBody/></sEnvelope>
一般而言,喚醒通知中的元素具有與先前相對(duì)于入隊(duì)消息、入隊(duì)響應(yīng)、傳輸消息、存儲(chǔ)和轉(zhuǎn)發(fā)消息、存儲(chǔ)和轉(zhuǎn)發(fā)響應(yīng)、注冊(cè)消息、注冊(cè)響應(yīng)、會(huì)話可用消息、會(huì)話接受消息、消息可用消息、出隊(duì)消息以及出隊(duì)響應(yīng)所描述的相同的意義。另外,喚醒通知消息可包括/sEnvelope/sHeader/nqQueueName元素,它可包含包括要處理的消息的邏輯隊(duì)列的名字(URI)。喚醒通知消息可包括/sEnvelope/sHeader/nqVolatile元素,它可用于指示正在等待處理的隊(duì)列消息是易失性的。
在適當(dāng)時(shí),發(fā)送方隊(duì)列管理器(例如,隊(duì)列管理器108)可向接收方隊(duì)列管理器(例如,隊(duì)列管理器118)發(fā)送取消傳輸消息,以關(guān)閉確認(rèn)序列中的孔。發(fā)送方隊(duì)列管理器在確定WS-ReliableMessaging序列中的一個(gè)或多個(gè)MessageNumbers將永遠(yuǎn)不會(huì)在接收方隊(duì)列管理器處接收到時(shí)生成一取消傳輸操作。當(dāng)接收隊(duì)列管理器接收取消傳輸消息時(shí),接收方隊(duì)列管理器如同已接收到所標(biāo)識(shí)的消息那樣繼續(xù)處理。接收方隊(duì)列管理器可確認(rèn)WS-ReliableMessaging序列中的一個(gè)或多個(gè)MessageNumbers為實(shí)際已被接收。一般而言,取消傳輸消息可以是以下格式(在保護(hù)之前)<sEnvelope><sHeader>
<wsaAction>
http//schemas.microsoft.com/queuing/CancelTransfer</wsaAction>
<wsaTo>xsanyURI</wsaTo>
<nqQueueName>xsanyURI</nqQueueName>
<wsaReplyTo>wsaEndpointReferenceType</wsaReplyTo>
<wsaMessageID>xsanyURI</wsaMessageID></sHeader><sBody>
<nqCancelTransfer>
<wsuIdentifier>xsanyURI</wsuIdentifier>
<wsrmAcknowledgementRangeUpper=″unsignedLong″Lower=″unsignedLong″/>+</nqCancelTransfer></sBody></sEnvelope>
一般而言,取消傳輸消息中的元素與先前相對(duì)于入隊(duì)消息、入隊(duì)響應(yīng)、傳輸消息、存儲(chǔ)和轉(zhuǎn)發(fā)消息、存儲(chǔ)和轉(zhuǎn)發(fā)響應(yīng)、注冊(cè)消息、注冊(cè)響應(yīng)、會(huì)話可用消息、會(huì)話接受消息、消息可用消息、出隊(duì)消息、出隊(duì)響應(yīng)、以及喚醒通知所描述的具有相同的意義。此外,取消傳輸消息可被配置成遵守為傳輸消息指定的約束。
取消傳輸消息可包括/sEnvelope/sBody/*/wsuIdentifier元素,它可包含與[RFC2396]相一致的URI,該URI唯一地標(biāo)識(shí)了由該消息所引用的WS-RM序列。取消傳輸消息可包括/sEnvelope/sBody/*/wsrmAcknowledgementRange元素,它可用于指示W(wǎng)S-RM消息序列MessageNumbers的范圍,在該范圍內(nèi),接收隊(duì)列服務(wù)應(yīng)當(dāng)如同它們被接收到那樣來(lái)處理它們,因?yàn)樗鼈冇肋h(yuǎn)不會(huì)被發(fā)送。取消傳輸消息可包括一個(gè)或多個(gè)Envelope/sBody/*/wsrmAcknowledgementRange元素。取消傳輸消息可包括/sEnvelope/sBody/*/wsrmAcknowledgementRange/@Upper元素,它可用于指示序列范圍中最高連續(xù)消息的消息數(shù)。取消傳輸消息可包括/sEnvelope/sBody/*/wsrmAcknowledgementRange/@Lower,它可用于指示序列范圍中最低連續(xù)消息的消息數(shù)。
在會(huì)話的應(yīng)用程序消息傳輸完成之后,隊(duì)列通道可關(guān)閉。然而,隊(duì)列通道可向發(fā)送方隊(duì)列管理器發(fā)送分離消息(例如,包括會(huì)話標(biāo)識(shí)符和隊(duì)列名),以指示會(huì)話要保持打開(kāi)。發(fā)送方隊(duì)列管理器可保持會(huì)話打開(kāi),并可發(fā)送確認(rèn)會(huì)話保持打開(kāi)的分離響應(yīng)。
為標(biāo)記會(huì)話的結(jié)束,隊(duì)列通道可向會(huì)話的最后一條消息的nqSequence頭部添加LastMessage元素。響應(yīng)于檢測(cè)到LastMessage元素,發(fā)送方隊(duì)列管理器可在發(fā)送了最后一條消息之后丟棄為應(yīng)用程序會(huì)話維持的任何狀態(tài)。響應(yīng)于檢測(cè)到LastMessage元素,接收方隊(duì)列管理器可使用MessageNumber元素來(lái)檢測(cè)它接收到會(huì)話的所有消息。當(dāng)會(huì)話完成時(shí),接收方隊(duì)列管理器可在出隊(duì)響應(yīng)中送達(dá)該會(huì)話的最后一條消息,并可在出隊(duì)響應(yīng)主體中包括wsenEndOfSequence元素。在送達(dá)最后一條消息之后,接收方隊(duì)列管理器可丟棄為應(yīng)用程序會(huì)話維持的任何狀態(tài)。當(dāng)隊(duì)列監(jiān)聽(tīng)器接收wsenEndOfSequence元素時(shí),枚舉上下文變得無(wú)效,并且可被丟棄。
圖5示出了發(fā)送計(jì)算機(jī)系統(tǒng)處的不同的可靠消息通信狀態(tài)的示例狀態(tài)圖500。應(yīng)當(dāng)理解,狀態(tài)圖500中所描繪的狀態(tài)是基于每一消息的。隊(duì)列管理器可具有所傳輸?shù)亩鄠€(gè)消息,并且可將唯一的狀態(tài)機(jī)與多個(gè)消息中的每一個(gè)相關(guān)聯(lián)。
例如,由諸如隊(duì)列管理器108等發(fā)送方隊(duì)列管理器控制的消息可在捕捉501之后轉(zhuǎn)移到已捕捉狀態(tài)511(即,在捕捉消息之后)。在啟動(dòng)傳輸之后,發(fā)送方隊(duì)列管理器等待存儲(chǔ)和轉(zhuǎn)發(fā)確認(rèn)。在接收到存儲(chǔ)和轉(zhuǎn)發(fā)確認(rèn)之前,發(fā)送方隊(duì)列管理器不斷重試發(fā)送。
當(dāng)接收到存儲(chǔ)和轉(zhuǎn)發(fā)確認(rèn)502,受控制的消息轉(zhuǎn)移到已發(fā)送狀態(tài)512。發(fā)送方隊(duì)列管理器然后等待傳輸確認(rèn)。當(dāng)接收到傳輸確認(rèn)506,受控制的消息轉(zhuǎn)移到已傳輸狀態(tài)514。發(fā)送方隊(duì)列管理器然后等待來(lái)自目標(biāo)隊(duì)列管理器的送達(dá)確認(rèn)。當(dāng)接收到送達(dá)確認(rèn)507(肯定確認(rèn)),控制消息轉(zhuǎn)移到已送達(dá)狀態(tài)515,并且可從對(duì)應(yīng)的隊(duì)列中刪除。
在受控制的消息轉(zhuǎn)移到已捕捉狀態(tài)511之后,發(fā)送方隊(duì)列管理器可被配置成等待一段指定的時(shí)間以接收存儲(chǔ)和轉(zhuǎn)發(fā)確認(rèn)。當(dāng)指定的用于接收存儲(chǔ)和轉(zhuǎn)發(fā)確認(rèn)的時(shí)間段過(guò)期(503)時(shí),受控制的消息轉(zhuǎn)移到錯(cuò)誤狀態(tài)513。在受控制的消息轉(zhuǎn)移到已發(fā)送狀態(tài)512之后,發(fā)送方隊(duì)列管理器可被配置成等待一段指定的時(shí)間以接收傳輸確認(rèn)。當(dāng)指定的用于接收傳輸確認(rèn)的時(shí)間段過(guò)期(504)時(shí),受控制的消息轉(zhuǎn)移到錯(cuò)誤狀態(tài)513。此外,發(fā)送方隊(duì)列管理器可接收導(dǎo)致受控制的消息轉(zhuǎn)移到錯(cuò)誤狀態(tài)513的傳輸否定確認(rèn)524。
在受控制的消息轉(zhuǎn)移到已傳輸狀態(tài)514之后,發(fā)送方隊(duì)列管理器可被配置成等待一段指定的時(shí)間以接收送達(dá)確認(rèn)。當(dāng)指定的用于接收送達(dá)確認(rèn)的時(shí)間段過(guò)期(505)時(shí),受控制的消息轉(zhuǎn)移到錯(cuò)誤狀態(tài)513。此外,發(fā)送方隊(duì)列管理器可接收導(dǎo)致受控制的消息轉(zhuǎn)移到錯(cuò)誤狀態(tài)513的送達(dá)否定確認(rèn)525。傳輸和送達(dá)確認(rèn)以及否定確認(rèn)可被發(fā)送到運(yùn)行在發(fā)送方隊(duì)列管理器中的出錯(cuò)服務(wù)。如果用戶(hù)沒(méi)有請(qǐng)求傳輸保證,則受控制的消息可在接收到存儲(chǔ)和轉(zhuǎn)發(fā)確認(rèn)之后被刪除。
圖6示出了在接收計(jì)算機(jī)系統(tǒng)處不同的可靠消息通信狀態(tài)的示例狀態(tài)圖。應(yīng)當(dāng)理解,狀態(tài)圖600中所描繪的狀態(tài)是基于每一消息的。例如,由諸如隊(duì)列管理器118等接收方隊(duì)列管理器控制的消息可在正常的接收601(即,對(duì)消息的正常接收)之后轉(zhuǎn)移到已接收狀態(tài)611。成功地接收的消息可在消息隊(duì)列中捕捉。接收方隊(duì)列管理器還可將存儲(chǔ)和轉(zhuǎn)發(fā)確認(rèn)624發(fā)回前一存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)或存儲(chǔ)和轉(zhuǎn)發(fā)層。在發(fā)送存儲(chǔ)和轉(zhuǎn)發(fā)確認(rèn)624之后,接收方隊(duì)列管理器可發(fā)送傳輸確認(rèn)604。接收方隊(duì)列管理器然后將消息排隊(duì)。
在發(fā)送存儲(chǔ)和轉(zhuǎn)發(fā)確認(rèn)624以及傳輸確認(rèn)604之后,受控制的消息轉(zhuǎn)移到確認(rèn)已發(fā)送狀態(tài)614。當(dāng)消息被出隊(duì)(605),接收方隊(duì)列管理器可轉(zhuǎn)移到已送達(dá)狀態(tài)。在消息由接收應(yīng)用程序使用之后,受控制的消息可轉(zhuǎn)移到已送達(dá)狀態(tài)615。
另一方面,在錯(cuò)誤地接收602之后(即,有錯(cuò)誤地接收消息,例如,沒(méi)有這樣的隊(duì)列或發(fā)送者未被授權(quán)來(lái)發(fā)送到該隊(duì)列),受控制的消息可轉(zhuǎn)移到錯(cuò)誤狀態(tài)612。接收方隊(duì)列管理器還可將存儲(chǔ)和轉(zhuǎn)發(fā)確認(rèn)623發(fā)回前一存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)或存儲(chǔ)和轉(zhuǎn)發(fā)層。在發(fā)送存儲(chǔ)和轉(zhuǎn)發(fā)確認(rèn)603之后,接收方隊(duì)列管理器可發(fā)送傳輸否定確認(rèn)603(用于可能的提示重發(fā))。在發(fā)送存儲(chǔ)和轉(zhuǎn)發(fā)確認(rèn)624以及傳輸否定確認(rèn)603之后,受控制的消息可轉(zhuǎn)移到否定確認(rèn)已發(fā)送狀態(tài)613。傳輸和送達(dá)ACK(確認(rèn))和NACK(否定確認(rèn))可被發(fā)送到主宿在發(fā)送方隊(duì)列管理器中的出錯(cuò)服務(wù)。
圖7示出了適用于本發(fā)明的原理的操作環(huán)境。圖7及以下討論提供了對(duì)適于在其中實(shí)現(xiàn)本發(fā)明的計(jì)算環(huán)境的簡(jiǎn)要概括描述。盡管并非所需,但本發(fā)明將在諸如由計(jì)算機(jī)系統(tǒng)執(zhí)行的程序模塊等計(jì)算機(jī)可執(zhí)行指令的一般上下文環(huán)境中描述。一般而言,程序模塊包括例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等等,它們執(zhí)行特定的任務(wù)或?qū)崿F(xiàn)特定的抽象數(shù)據(jù)類(lèi)型。計(jì)算機(jī)可執(zhí)行指令、相關(guān)聯(lián)的數(shù)據(jù)結(jié)構(gòu)以及程序模塊表示了用于執(zhí)行此處所揭示的方法的步驟的程序代碼裝置的示例。
參考圖7,用于實(shí)現(xiàn)本發(fā)明的示例系統(tǒng)包括計(jì)算機(jī)系統(tǒng)720形式的通用計(jì)算設(shè)備,包括處理單元721、系統(tǒng)存儲(chǔ)器722以及將包括系統(tǒng)存儲(chǔ)器722的各類(lèi)系統(tǒng)組件耦合至處理單元721的系統(tǒng)總線723。處理單元721可執(zhí)行被設(shè)計(jì)成實(shí)現(xiàn)計(jì)算機(jī)系統(tǒng)720的特征,包括本發(fā)明的特征的計(jì)算機(jī)可執(zhí)行指令。系統(tǒng)總線723可以是若干種總線結(jié)構(gòu)類(lèi)型的任一種,包括存儲(chǔ)器總線或存儲(chǔ)器控制器、外圍總線以及使用各類(lèi)總線體系結(jié)構(gòu)的局部總線。系統(tǒng)存儲(chǔ)器包括只讀存儲(chǔ)器(“ROM”)724和隨機(jī)存取存儲(chǔ)器(“RAM”)725?;据斎?輸出系統(tǒng)(BIOS)726,包含如在啟動(dòng)時(shí)協(xié)助在計(jì)算機(jī)720內(nèi)的元件之間傳輸信息的基本例程,可儲(chǔ)存在ROM 724中。
計(jì)算機(jī)720也可包括用于對(duì)磁硬盤(pán)739進(jìn)行讀寫(xiě)的磁硬盤(pán)驅(qū)動(dòng)器727、用于對(duì)可移動(dòng)磁盤(pán)729進(jìn)行讀寫(xiě)的磁盤(pán)驅(qū)動(dòng)器728以及用于對(duì)可移動(dòng)光盤(pán)731,如CD-ROM或其它光介質(zhì)進(jìn)行讀寫(xiě)的光盤(pán)驅(qū)動(dòng)器730。磁硬盤(pán)驅(qū)動(dòng)器727、磁盤(pán)驅(qū)動(dòng)器728以及光盤(pán)驅(qū)動(dòng)器730分別通過(guò)硬盤(pán)驅(qū)動(dòng)器接口732、磁盤(pán)驅(qū)動(dòng)器接口733和光盤(pán)驅(qū)動(dòng)器接口737連接至系統(tǒng)總線723。驅(qū)動(dòng)器及其相關(guān)聯(lián)的計(jì)算機(jī)可讀介質(zhì)為計(jì)算機(jī)720提供了計(jì)算機(jī)可執(zhí)行指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊和其它數(shù)據(jù)的非易失性存儲(chǔ)。盡管這里描述的示例環(huán)境采用了磁硬盤(pán)739、可移動(dòng)磁盤(pán)729以及可移動(dòng)光盤(pán)731,然而也可以使用用于儲(chǔ)存數(shù)據(jù)的其它類(lèi)型的計(jì)算機(jī)可讀介質(zhì),包括盒式磁帶、閃存卡、數(shù)字多功能盤(pán)、Bernoulli盒式磁盤(pán)、RAM、ROM等等。
包括一個(gè)或多個(gè)程序模塊的程序代碼裝置可儲(chǔ)存在硬盤(pán)739、磁盤(pán)729、光盤(pán)731、ROM 724或RAM 725中,包括操作系統(tǒng)735、一個(gè)或多個(gè)應(yīng)用程序736、其它程序模塊737以及程序數(shù)據(jù)738。用戶(hù)可以通過(guò)鍵盤(pán)740、定位設(shè)備742或其它輸入設(shè)備(未示出),如麥克風(fēng)、操縱桿、游戲墊、圓盤(pán)式衛(wèi)星天線、掃描儀等等向計(jì)算機(jī)720輸入命令和信息。這些和其它輸入設(shè)備通常通過(guò)耦合至系統(tǒng)總線723的輸入/輸出接口746連接到處理單元721。輸入/輸出接口746在邏輯上表示各種各樣不同的接口中的任一種,諸如串行端口接口、PS/2接口、并行端口接口、通用串行總線(“USB”)接口、或電子與電氣工程師協(xié)會(huì)(“IEEE”)1394接口(即,火線接口),或甚至可以在邏輯上表示不同接口的組合。
監(jiān)視器747或其它顯示設(shè)備也通過(guò)視頻接口748連接到系統(tǒng)總線723。其它外圍輸出設(shè)備(未示出),如揚(yáng)聲器和打印機(jī)也可被連接到計(jì)算機(jī)系統(tǒng)720。
計(jì)算機(jī)系統(tǒng)720可連接到網(wǎng)絡(luò),如辦公室范圍或企業(yè)范圍計(jì)算機(jī)網(wǎng)絡(luò)、家庭網(wǎng)絡(luò)、內(nèi)聯(lián)網(wǎng)和/或因特網(wǎng)。計(jì)算機(jī)系統(tǒng)720可通過(guò)這類(lèi)網(wǎng)絡(luò)與諸如遠(yuǎn)程計(jì)算機(jī)系統(tǒng)、遠(yuǎn)程應(yīng)用程序和/或遠(yuǎn)程數(shù)據(jù)庫(kù)等外部源交換數(shù)據(jù)。
計(jì)算機(jī)系統(tǒng)720包括網(wǎng)絡(luò)接口753,通過(guò)該接口,計(jì)算機(jī)系統(tǒng)720從外部源接收數(shù)據(jù)和/或向外部源發(fā)送數(shù)據(jù)。如圖7所示,網(wǎng)絡(luò)接口753便于通過(guò)鏈路751與遠(yuǎn)程計(jì)算機(jī)系統(tǒng)783交換數(shù)據(jù)。網(wǎng)絡(luò)接口753邏輯上可表示一個(gè)或多個(gè)軟件和/或硬件模塊,諸如網(wǎng)絡(luò)接口卡和對(duì)應(yīng)的網(wǎng)絡(luò)驅(qū)動(dòng)程序接口規(guī)范(“NDIS”)棧。鏈路751表示網(wǎng)絡(luò)的一部分(例如,以太網(wǎng)段),而遠(yuǎn)程計(jì)算機(jī)系統(tǒng)783表示網(wǎng)絡(luò)的節(jié)點(diǎn)。
同樣,計(jì)算機(jī)系統(tǒng)720包括輸入/輸出接口746,通過(guò)該接口,計(jì)算機(jī)系統(tǒng)720從外部源接收數(shù)據(jù)和/或向外部源發(fā)送數(shù)據(jù)。輸入/輸出接口746通過(guò)鏈路759耦合到調(diào)制解調(diào)器754(例如,標(biāo)準(zhǔn)調(diào)制解調(diào)器、線纜調(diào)制解調(diào)器或數(shù)字用戶(hù)線(“DSL”)調(diào)制解調(diào)器),通過(guò)該調(diào)制解調(diào)器,計(jì)算機(jī)系統(tǒng)720從外部源接收數(shù)據(jù)和/或向外部源發(fā)送數(shù)據(jù)。如圖7所示,輸入/輸出接口746和調(diào)制解調(diào)器754便于通過(guò)鏈路752與遠(yuǎn)程計(jì)算機(jī)系統(tǒng)793交換數(shù)據(jù)。鏈路752表示網(wǎng)絡(luò)的一部分,而遠(yuǎn)程計(jì)算機(jī)系統(tǒng)793表示網(wǎng)絡(luò)的節(jié)點(diǎn)。
盡管圖7表示了適用于本發(fā)明的原理的操作環(huán)境,然而本發(fā)明的原理可在能夠在有必要時(shí)在適當(dāng)?shù)男薷南聦?shí)現(xiàn)本發(fā)明的原理的任何系統(tǒng)中使用。圖7所示的環(huán)境僅是說(shuō)明性的,并且決不表示其中可實(shí)現(xiàn)本發(fā)明的原理的各種各樣環(huán)境的甚至一小部分。
依照本發(fā)明,包括應(yīng)用程序、隊(duì)列通道、隊(duì)列監(jiān)聽(tīng)器、隊(duì)列管理器、傳輸層、存儲(chǔ)和轉(zhuǎn)發(fā)層、以及存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)及相關(guān)聯(lián)的數(shù)據(jù)(包括應(yīng)用程序消息、已編碼應(yīng)用程序消息、入隊(duì)消息、入隊(duì)響應(yīng)、傳輸消息、已編碼傳輸頭部、存儲(chǔ)和轉(zhuǎn)發(fā)消息、存儲(chǔ)和轉(zhuǎn)發(fā)響應(yīng)、會(huì)話可用消息、接受消息、消息可用消息、出隊(duì)消息、出隊(duì)響應(yīng)、喚醒通知、以及活動(dòng)會(huì)話ID)的模塊可儲(chǔ)存在與計(jì)算機(jī)系統(tǒng)720相關(guān)聯(lián)的任何計(jì)算機(jī)可讀介質(zhì)中并可從其中訪問(wèn)。例如,這些模塊的各部分和相關(guān)聯(lián)程序數(shù)據(jù)的各部分可被包括在操作系統(tǒng)735、應(yīng)用程序736、程序模塊737和/或程序數(shù)據(jù)738中,用于存儲(chǔ)在系統(tǒng)存儲(chǔ)器722中。
當(dāng)諸如磁硬盤(pán)739等大容量存儲(chǔ)設(shè)備被耦合到計(jì)算機(jī)系統(tǒng)720時(shí),這類(lèi)模塊和相關(guān)聯(lián)的程序數(shù)據(jù)也可被儲(chǔ)存在大容量存儲(chǔ)設(shè)備中。在聯(lián)網(wǎng)環(huán)境中,相對(duì)于計(jì)算機(jī)系統(tǒng)720所描述的程序模塊或其部分可儲(chǔ)存在遠(yuǎn)程存儲(chǔ)器存儲(chǔ)設(shè)備中,諸如與遠(yuǎn)程計(jì)算機(jī)系統(tǒng)783和/或遠(yuǎn)程計(jì)算機(jī)系統(tǒng)793相關(guān)聯(lián)的系統(tǒng)存儲(chǔ)器和/或大容量存儲(chǔ)設(shè)備。這類(lèi)模塊的執(zhí)行可以在如上所述的分布式環(huán)境中實(shí)現(xiàn)。
本發(fā)明可以用其它特定的形式來(lái)實(shí)施而不脫離其精神或本質(zhì)特征。所描述的實(shí)施例在所有方面都被認(rèn)為是說(shuō)明性而非限制性的。因此,本發(fā)明的范圍由所附權(quán)利要求書(shū)而非以上描述來(lái)指示。落入權(quán)利要求書(shū)的等效技術(shù)方案的意義和范圍之內(nèi)的所有改變被包含在其范圍之內(nèi)。
權(quán)利要求
1.在可連同一個(gè)或多個(gè)其它計(jì)算機(jī)系統(tǒng)一起網(wǎng)絡(luò)連接到網(wǎng)絡(luò)的計(jì)算機(jī)系統(tǒng)中,一種可靠地使消息入隊(duì)的方法,所述方法包括接收依照消息通信協(xié)議配置的應(yīng)用程序消息的動(dòng)作;將所述應(yīng)用程序消息編碼成對(duì)應(yīng)的已編碼應(yīng)用程序消息的動(dòng)作;依照所述消息通信協(xié)議配置入隊(duì)消息的動(dòng)作,所述入隊(duì)消息標(biāo)識(shí)了要排隊(duì)所述應(yīng)用程序消息的消息隊(duì)列;將所述已編碼應(yīng)用程序消息封裝在所述入隊(duì)消息中的動(dòng)作;以及將所述入隊(duì)消息發(fā)送到控制所標(biāo)識(shí)的隊(duì)列的隊(duì)列管理器,使得所述應(yīng)用程序消息可被排隊(duì)以送達(dá)接收計(jì)算機(jī)系統(tǒng)的動(dòng)作。
2.如權(quán)利要求1所述的方法,其特征在于,接收依照消息通信協(xié)議配置的應(yīng)用程序消息的動(dòng)作包括隊(duì)列通道接收包括所述應(yīng)用程序消息的子例程調(diào)用的動(dòng)作。
3.如權(quán)利要求1所述的方法,其特征在于,接收依照消息通信協(xié)議配置的應(yīng)用程序消息的動(dòng)作包括接收SOAP信封的動(dòng)作。
4.如權(quán)利要求1所述的方法,其特征在于,將所述應(yīng)用程序消息編碼成對(duì)應(yīng)的已編碼應(yīng)用程序消息的動(dòng)作包括對(duì)所述應(yīng)用程序消息進(jìn)行二進(jìn)制編碼的動(dòng)作。
5.如權(quán)利要求4所述的方法,其特征在于,對(duì)所述應(yīng)用程序消息進(jìn)行二進(jìn)制編碼的動(dòng)作包括對(duì)所述應(yīng)用程序消息進(jìn)行base64編碼的動(dòng)作。
6.如權(quán)利要求1所述的方法,其特征在于,將所述應(yīng)用程序消息編碼成對(duì)應(yīng)的已編碼應(yīng)用程序消息的動(dòng)作包括對(duì)所述應(yīng)用程序消息進(jìn)行文本編碼的動(dòng)作。
7.如權(quán)利要求1所述的方法,其特征在于,將所述應(yīng)用程序消息編碼成對(duì)應(yīng)的已編碼應(yīng)用程序消息的動(dòng)作包括提供所接收的應(yīng)用程序消息、編碼類(lèi)型以及內(nèi)容類(lèi)型作為包裝算法的輸入的動(dòng)作;以及接收已編碼應(yīng)用程序消息作為來(lái)自所述包裝算法的輸出的動(dòng)作。
8.如權(quán)利要求1所述的方法,其特征在于,還包括連同所述應(yīng)用程序消息一起對(duì)會(huì)話標(biāo)識(shí)符進(jìn)行編碼的動(dòng)作。
9.如權(quán)利要求1所述的方法,其特征在于,依照所述消息通信協(xié)議配置入隊(duì)消息的動(dòng)作包括配置SOAP信封的動(dòng)作。
10.如權(quán)利要求1所述的方法,其特征在于,依照所述消息通信協(xié)議配置入隊(duì)消息的動(dòng)作包括配置所述入隊(duì)消息以標(biāo)識(shí)對(duì)應(yīng)于所述應(yīng)用程序消息的消息會(huì)話的動(dòng)作。
11.如權(quán)利要求1所述的方法,其特征在于,依照所述消息通信協(xié)議配置入隊(duì)消息的動(dòng)作包括重用來(lái)自SOAP應(yīng)用程序消息的至少一個(gè)組成協(xié)議元素的動(dòng)作。
12.如權(quán)利要求1所述的方法,其特征在于,將所述已編碼應(yīng)用程序消息封裝在所述入隊(duì)消息中的動(dòng)作包括將已編碼SOAP應(yīng)用程序消息封裝在SOAP入隊(duì)消息中的動(dòng)作。
13.如權(quán)利要求12所述的方法,其特征在于,將已編碼SOAP應(yīng)用程序消息封裝在SOAP入隊(duì)消息中的動(dòng)作包括在所述SOAP入隊(duì)消息中包括用于解碼已編碼SOAP應(yīng)用程序消息的解碼信息的動(dòng)作。
14.如權(quán)利要求1所述的方法,其特征在于,將所述入隊(duì)消息發(fā)送到控制所標(biāo)識(shí)的隊(duì)列的隊(duì)列管理器的動(dòng)作包括使用原子事務(wù)上下文以將所述應(yīng)用程序消息的入隊(duì)與其它應(yīng)用程序狀態(tài)改變進(jìn)行協(xié)調(diào)的動(dòng)作。
15.如權(quán)利要求1所述的方法,其特征在于,將所述入隊(duì)消息發(fā)送到控制所標(biāo)識(shí)的隊(duì)列的隊(duì)列管理器的動(dòng)作包括參與兩階段提交的動(dòng)作。
16.如權(quán)利要求1所述的方法,其特征在于,將所述入隊(duì)消息發(fā)送到控制所標(biāo)識(shí)的隊(duì)列的隊(duì)列管理器的動(dòng)作包括使用可靠消息通信協(xié)議來(lái)發(fā)送所述入隊(duì)消息的動(dòng)作。
17.如權(quán)利要求1所述的方法,其特征在于,還包括在封裝所述應(yīng)用程序消息之前執(zhí)行加密和數(shù)字地簽署所述已編碼應(yīng)用程序消息中的至少一項(xiàng)的動(dòng)作。
18.如權(quán)利要求1所述的方法,其特征在于,還包括在發(fā)送所述入隊(duì)消息之前執(zhí)行加密和數(shù)字地簽署所述入隊(duì)消息中的至少一項(xiàng)的動(dòng)作。
19.如權(quán)利要求1所述的方法,其特征在于,還包括從所述隊(duì)列管理器接收入隊(duì)響應(yīng)的動(dòng)作。
20.如權(quán)利要求19所述的方法,其特征在于,接收入隊(duì)響應(yīng)的動(dòng)作包括使用可靠消息通信協(xié)議來(lái)接收所述入隊(duì)響應(yīng)的動(dòng)作。
21.如權(quán)利要求19所述的方法,其特征在于,接收入隊(duì)響應(yīng)的動(dòng)作包括使用原子事務(wù)上下文以將所述應(yīng)用程序消息的入隊(duì)與其它應(yīng)用程序狀態(tài)改變進(jìn)行協(xié)調(diào)的動(dòng)作。
22.如權(quán)利要求19所述的方法,其特征在于,接收入隊(duì)響應(yīng)的動(dòng)作包括參與兩階段提交的動(dòng)作。
23.如權(quán)利要求19所述的方法,其特征在于,接收入隊(duì)響應(yīng)的動(dòng)作包括接收已加密和已數(shù)字簽署中的至少一種的入隊(duì)響應(yīng)的動(dòng)作。
24.在可連同一個(gè)或多個(gè)其它計(jì)算機(jī)系統(tǒng)一起網(wǎng)絡(luò)連接到網(wǎng)絡(luò)的計(jì)算機(jī)系統(tǒng)中,一種可靠地傳輸消息的方法,所述方法包括接收指示依照消息通信協(xié)議配置的應(yīng)用程序消息可用于送達(dá)應(yīng)用程序的消息可用消息的動(dòng)作;響應(yīng)于所述消息可用消息發(fā)送出隊(duì)消息的動(dòng)作,所述出隊(duì)消息指示所述應(yīng)用程序消息要被出隊(duì)以送達(dá)所述應(yīng)用程序;接收出隊(duì)響應(yīng)的動(dòng)作,所述出隊(duì)響應(yīng)是依照所述消息通信協(xié)議來(lái)配置的,所述出隊(duì)響應(yīng)封裝了已編碼應(yīng)用程序消息;將所述已編碼應(yīng)用程序消息解碼成所述應(yīng)用程序消息的動(dòng)作;將所述應(yīng)用程序消息發(fā)送到所述應(yīng)用程序的動(dòng)作。
25.如權(quán)利要求24所述的方法,其特征在于,接收指示應(yīng)用程序消息可用于送達(dá)的消息可用消息的動(dòng)作包括隊(duì)列監(jiān)聽(tīng)器接收消息可用消息的動(dòng)作。
26.如權(quán)利要求24所述的方法,其特征在于,接收指示應(yīng)用程序消息可用于送達(dá)的消息可用消息的動(dòng)作包括接收指示SOAP應(yīng)用程序消息可用于送達(dá)的SOAP消息可用消息的動(dòng)作。
27.如權(quán)利要求24所述的方法,其特征在于,響應(yīng)于所述消息可用消息發(fā)送出隊(duì)消息的動(dòng)作包括發(fā)送標(biāo)識(shí)消息隊(duì)列和所述應(yīng)用程序消息的出隊(duì)消息的動(dòng)作。
28.如權(quán)利要求24所述的方法,其特征在于,響應(yīng)于所述消息可用消息發(fā)送出隊(duì)消息的動(dòng)作包括使用原子事務(wù)上下文以將所述應(yīng)用程序消息的出隊(duì)與其它應(yīng)用程序狀態(tài)改變進(jìn)行協(xié)調(diào)的動(dòng)作。
29.如權(quán)利要求24所述的方法,其特征在于,響應(yīng)于所述消息可用消息發(fā)送出隊(duì)消息的動(dòng)作包括參與兩階段提交的動(dòng)作。
30.如權(quán)利要求24所述的方法,其特征在于,響應(yīng)于所述消息可用消息發(fā)送出隊(duì)消息的動(dòng)作包括使用可靠消息通信協(xié)議來(lái)發(fā)送所述出隊(duì)消息的動(dòng)作。
31.如權(quán)利要求24所述的方法,其特征在于,接收出隊(duì)響應(yīng)的動(dòng)作包括接收封裝已編碼SOAP應(yīng)用程序消息的SOAP出隊(duì)響應(yīng)的動(dòng)作。
32.如權(quán)利要求24所述的方法,其特征在于,接收出隊(duì)響應(yīng)的動(dòng)作包括接收包括用于解碼所述出隊(duì)響應(yīng)中的已編碼應(yīng)用程序消息的信息的出隊(duì)響應(yīng)的動(dòng)作。
33.如權(quán)利要求24所述的方法,其特征在于,接收出隊(duì)響應(yīng)的動(dòng)作包括接收重用來(lái)自封裝在所述出隊(duì)響應(yīng)中的已編碼SOAP應(yīng)用程序消息的至少一個(gè)組成協(xié)議元素的SOAP出隊(duì)響應(yīng)的動(dòng)作。
34.如權(quán)利要求24所述的方法,其特征在于,接收出隊(duì)響應(yīng)的動(dòng)作包括使用原子事務(wù)上下文以將所述應(yīng)用程序消息的出隊(duì)與其它應(yīng)用程序狀態(tài)改變進(jìn)行協(xié)調(diào)的動(dòng)作。
35.如權(quán)利要求24所述的方法,其特征在于,接收出隊(duì)響應(yīng)的動(dòng)作包括參與兩階段提交的動(dòng)作。
36.如權(quán)利要求24所述的方法,其特征在于,接收出隊(duì)響應(yīng)的動(dòng)作包括使用可靠消息通信協(xié)議來(lái)接收所述出隊(duì)響應(yīng)的動(dòng)作。
37.如權(quán)利要求24所述的方法,其特征在于,將所述已編碼應(yīng)用程序消息解碼成所述應(yīng)用程序消息的動(dòng)作包括對(duì)文本編碼的應(yīng)用程序消息進(jìn)行解碼的動(dòng)作。
38.如權(quán)利要求24所述的方法,其特征在于,將所述已編碼應(yīng)用程序消息解碼成所述應(yīng)用程序消息的動(dòng)作包括對(duì)二進(jìn)制編碼的應(yīng)用程序消息進(jìn)行解碼的動(dòng)作。
39.如權(quán)利要求38所述的方法,其特征在于,對(duì)二進(jìn)制編碼的應(yīng)用程序消息進(jìn)行解碼的動(dòng)作包括對(duì)base64編碼的應(yīng)用程序消息進(jìn)行解碼的動(dòng)作。
40.如權(quán)利要求24所述的方法,其特征在于,將所述已編碼應(yīng)用程序消息解碼成所述應(yīng)用程序消息的動(dòng)作包括提供所述已編碼應(yīng)用程序消息、編碼類(lèi)型以及內(nèi)容類(lèi)型作為解包算法的輸入的動(dòng)作;以及接收所述應(yīng)用程序消息作為來(lái)自所述解包算法的輸出的動(dòng)作。
41.如權(quán)利要求24所述的方法,其特征在于,還包括執(zhí)行解密所述出隊(duì)響應(yīng)和驗(yàn)證所述出隊(duì)響應(yīng)的完整性中的至少一項(xiàng)的動(dòng)作。
42.如權(quán)利要求24所述的方法,其特征在于,還包括在對(duì)所述已編碼應(yīng)用程序消息進(jìn)行解碼之前執(zhí)行解密所述已編碼應(yīng)用程序消息以及驗(yàn)證所述已編碼應(yīng)用程序消息的完整性中的至少一項(xiàng)的動(dòng)作。
43.如權(quán)利要求24所述的方法,其特征在于,將所述應(yīng)用程序消息發(fā)送到所述應(yīng)用程序的動(dòng)作包括將SOAP消息發(fā)送到所述應(yīng)用程序的動(dòng)作。
44.如權(quán)利要求24所述的方法,其特征在于,還包括在將所述應(yīng)用程序消息送達(dá)所述應(yīng)用程序之前向所述應(yīng)用程序發(fā)送喚醒通知的動(dòng)作。
45.如權(quán)利要求24所述的方法,其特征在于,還包括在接收所述消息可用消息之前接收會(huì)話可用消息的動(dòng)作,所述會(huì)話可用消息指示該消息是應(yīng)用程序會(huì)話的一部分;響應(yīng)于所述會(huì)話可用消息發(fā)送會(huì)話接受消息的動(dòng)作;以及在發(fā)送所述會(huì)話接受消息之后接收會(huì)話接受響應(yīng)的動(dòng)作。
46.如權(quán)利要求24所述的方法,其特征在于,還包括在接收所述消息可用消息之前發(fā)送指示對(duì)于對(duì)應(yīng)于所述應(yīng)用程序的消息的興趣的注冊(cè)消息的動(dòng)作;以及接收指示所述注冊(cè)成功的注冊(cè)響應(yīng)的動(dòng)作。
47.一種在可連同一個(gè)或多個(gè)其它計(jì)算機(jī)系統(tǒng)一起網(wǎng)絡(luò)連接到網(wǎng)絡(luò)的計(jì)算機(jī)系統(tǒng)中使用的計(jì)算機(jī)程序產(chǎn)品,所述計(jì)算機(jī)程序產(chǎn)品用于實(shí)現(xiàn)可靠地使消息入隊(duì)的方法,所述計(jì)算機(jī)程序產(chǎn)品包括其上儲(chǔ)存有計(jì)算機(jī)可執(zhí)行指令的一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì),當(dāng)由處理器執(zhí)行時(shí),所述計(jì)算機(jī)可執(zhí)行指令使所述計(jì)算機(jī)系統(tǒng)執(zhí)行以下動(dòng)作接收依照消息通信協(xié)議配置的應(yīng)用程序消息;將所述應(yīng)用程序消息編碼成對(duì)應(yīng)的已編碼應(yīng)用程序消息;依照所述消息通信協(xié)議配置入隊(duì)消息,所述入隊(duì)消息標(biāo)識(shí)了要排隊(duì)所述應(yīng)用程序消息的消息隊(duì)列;將所述已編碼應(yīng)用程序消息封裝在所述入隊(duì)消息中;以及將所述入隊(duì)消息發(fā)送到控制所標(biāo)識(shí)的隊(duì)列的隊(duì)列管理器,使得所述應(yīng)用程序消息可被排隊(duì)以送達(dá)接收計(jì)算機(jī)系統(tǒng)。
48.一種在可連同一個(gè)或多個(gè)其它計(jì)算機(jī)系統(tǒng)一起網(wǎng)絡(luò)連接到網(wǎng)絡(luò)的計(jì)算機(jī)系統(tǒng)中使用的計(jì)算機(jī)程序產(chǎn)品,所述計(jì)算機(jī)程序產(chǎn)品用于實(shí)現(xiàn)可靠地傳輸消息的方法,所述計(jì)算機(jī)程序產(chǎn)品包括其上儲(chǔ)存有計(jì)算機(jī)可執(zhí)行指令的一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì),當(dāng)由處理器執(zhí)行時(shí),所述計(jì)算機(jī)可執(zhí)行指令使所述計(jì)算機(jī)系統(tǒng)執(zhí)行以下動(dòng)作接收指示依照消息通信協(xié)議配置的消息可用于送達(dá)應(yīng)用程序的消息可用消息;響應(yīng)于所述消息可用消息發(fā)送出隊(duì)消息,所述出隊(duì)消息指示所述應(yīng)用程序消息要被出隊(duì)以送達(dá)所述應(yīng)用程序;接收出隊(duì)響應(yīng),所述出隊(duì)響應(yīng)是依照所述消息通信協(xié)議來(lái)配置的,所述出隊(duì)響應(yīng)封裝了已編碼應(yīng)用程序消息;將所述已編碼應(yīng)用程序消息解碼成所述應(yīng)用程序消息;將所述應(yīng)用程序消息發(fā)送到所述應(yīng)用程序。
全文摘要
本發(fā)明涉及用于可靠且安全地傳輸排隊(duì)的應(yīng)用程序消息的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品。應(yīng)用程序消息被編碼(例如,二進(jìn)制或文本編碼),然后被封裝在傳輸消息、入隊(duì)消息和出隊(duì)響應(yīng)中,使得應(yīng)用程序消息中使用的組成協(xié)議元素可在傳輸消息、入隊(duì)消息和出隊(duì)響應(yīng)中重用。傳輸消息頭部被編碼,然后連同已編碼應(yīng)用程序消息一起封裝,使得傳輸頭部和應(yīng)用程序消息中使用的組成協(xié)議元素可在存儲(chǔ)和轉(zhuǎn)發(fā)消息中重用。應(yīng)用程序消息、傳輸消息、入隊(duì)消息、出隊(duì)響應(yīng)以及存儲(chǔ)和轉(zhuǎn)發(fā)消息都可依照同一消息通信協(xié)議,諸如簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議來(lái)配置。由于封裝的元素被編碼,因此封裝的元素不干涉包裝消息的配置。
文檔編號(hào)H04L29/06GK1787495SQ200510120170
公開(kāi)日2006年6月14日 申請(qǐng)日期2005年11月10日 優(yōu)先權(quán)日2004年12月10日
發(fā)明者A·S·格勒, C·A·克利奇雷, D·O·德萊弗, K·斯瑞尼瓦薩恩, R·D·希爾, R·T·利姆普蘭切特, U·S·赫吉 申請(qǐng)人:微軟公司