專利名稱:一種異步傳輸數(shù)據(jù)的方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計(jì)算機(jī)及網(wǎng)絡(luò)技術(shù)領(lǐng)域,涉及一種數(shù)據(jù)傳輸方法,尤其涉及一種異步傳輸數(shù)據(jù)的方法。
背景技術(shù):
如今,隨著網(wǎng)絡(luò)應(yīng)用的蓬勃興起,越來越多的互聯(lián)網(wǎng)公司和大型企業(yè)對(duì)數(shù)據(jù)異地備份格外重視。尤其是對(duì)于以數(shù)據(jù)庫為中心的應(yīng)用來說,企業(yè)的數(shù)據(jù)就是生命線。任何數(shù)據(jù)的丟失和損壞,都會(huì)影響到公司的業(yè)務(wù)發(fā)展?,F(xiàn)有的通常做法是利用數(shù)據(jù)庫備份軟件或者系統(tǒng)備份工具在數(shù)據(jù)文件級(jí)別對(duì)于數(shù)據(jù)進(jìn)行按每天的全備份和每小時(shí)的差異備份,并且通過專有網(wǎng)絡(luò)傳輸?shù)疆惖氐臄?shù)據(jù)中心加以備份。這種模式在運(yùn)維上其實(shí)是給業(yè)務(wù)帶來了很大的挑戰(zhàn),首先當(dāng)事故發(fā)生的時(shí)候,所有數(shù)據(jù)的還原點(diǎn)會(huì)由于一小時(shí)內(nèi)的缺少而丟失,無法做到實(shí)時(shí)有效的備份,而且在異地只是備份了數(shù)據(jù)庫文件,運(yùn)維人員在發(fā)生事故后,還需要重新在異地回復(fù)這些數(shù)據(jù)庫文件,從而恢復(fù)業(yè)務(wù),無論是從數(shù)據(jù)損失率還是業(yè)務(wù)恢復(fù)時(shí)間來考量都不是最完美的解決方案。并且這種解決方案需要依賴于數(shù)據(jù)中心之間的專有網(wǎng)絡(luò),才能保證數(shù)據(jù)的傳輸安全和可靠性,是一種十分昂貴的解決方案。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是:提供一種異步傳輸數(shù)據(jù)的方法,使用消息隊(duì)列機(jī)制在底層保證了數(shù)據(jù)可靠。為解決上述技術(shù)問題,本發(fā)明采用如下技術(shù)方案:—種異步傳輸數(shù)據(jù)的方法,所述方法包括如下步驟:步驟S1:在消息初始化數(shù)據(jù)庫和消息目標(biāo)數(shù)據(jù)庫中啟用服務(wù)代理ServiceBroker活動(dòng);步驟S2:創(chuàng)建數(shù)據(jù)庫主密鑰,用于傳輸加密;步驟S3:在初始化數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫中創(chuàng)建消息類型和消息契約;步驟S4:為初始化數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫創(chuàng)建消息隊(duì)列;步驟S5:創(chuàng)建服務(wù)端點(diǎn),然后使用該服務(wù)端點(diǎn)為消息隊(duì)列綁定到一個(gè)或者多個(gè)契約上;服務(wù)使用隊(duì)列和契約用來定義一個(gè)或一組任務(wù);服務(wù)是消息的發(fā)起方和接受方強(qiáng)制約定的規(guī)則,并將消息路由到正確的隊(duì)列;步驟S6:啟動(dòng)對(duì)話,對(duì)話會(huì)話是在服務(wù)之間進(jìn)行消息交換的操作;創(chuàng)建新的會(huì)話、發(fā)送消息,而后結(jié)束會(huì)話;在接收方隊(duì)列中增加一條發(fā)送消息類型;步驟S7:接收方從隊(duì)列中讀取消息;接收的結(jié)果填充到常規(guī)表,或者在局部變量中執(zhí)行其他操作,或者發(fā)送到其他服務(wù)代理Service Broker消息中;步驟S8:接收方使用發(fā)起方的既有會(huì)話句柄,發(fā)送相應(yīng)消息給發(fā)起方,結(jié)束當(dāng)前會(huì)話;在發(fā)起方隊(duì)列中增加確認(rèn)消息類型;步驟S9:發(fā)起方查詢隊(duì)列消息,發(fā)現(xiàn)有確認(rèn)消息類型,則結(jié)束當(dāng)前的會(huì)話;安全的會(huì)話過程到此結(jié)束。作為本發(fā)明的一種優(yōu)選方案,所述方法進(jìn)一步包括步驟S10:對(duì)于遠(yuǎn)程的數(shù)據(jù)庫服務(wù)器,則需要在每個(gè)數(shù)據(jù)庫中創(chuàng)建路由并且聯(lián)合遠(yuǎn)程服務(wù)端點(diǎn)來發(fā)送消息。作為本發(fā)明的一種優(yōu)選方案,所述步驟S6具體包括:啟動(dòng)對(duì)話,對(duì)話會(huì)話是在服務(wù)之間進(jìn)行消息交換的操作;使用Begin Dialog Conversation命令創(chuàng)建新的會(huì)話;使用Send命令來發(fā)送消息;使用End Conversation來結(jié)束會(huì)話;在接收方隊(duì)列中增加一條發(fā)送消息類型。作為本發(fā)明的一種優(yōu)選方案,所述步驟S7具體包括:接收方使用Receive語句從隊(duì)列中讀取消息,也可刪除已經(jīng)讀取的消息Receive的結(jié)果填充到常規(guī)表,或者在局部變量中執(zhí)行其他操作,或者發(fā)送到其他Service Broker消息中。本發(fā)明的有益效果在于:本發(fā)明提出的異步傳輸數(shù)據(jù)的方法,可以讓應(yīng)用程序調(diào)用方擺脫傳統(tǒng)的同步等待機(jī)制,能夠讓應(yīng)用前端去響應(yīng)更多的前端請(qǐng)求,而不需要把時(shí)間浪費(fèi)在等待數(shù)據(jù)庫事務(wù)完成的。異步傳輸數(shù)據(jù)的方式使用消息隊(duì)列機(jī)制在底層保證了數(shù)據(jù)可靠的,并且是按照順序在服務(wù)器之間傳輸,并且由會(huì)話機(jī)制保證了數(shù)據(jù)處理的唯一性,所以只要會(huì)話不丟失,數(shù)據(jù)就不會(huì)消失。消息傳送系統(tǒng)在傳送較大的消息時(shí)常會(huì)碰到網(wǎng)絡(luò)問題,發(fā)送以GB為單位的消息時(shí)候會(huì)花費(fèi)幾分鐘的時(shí)間,如果發(fā)生網(wǎng)絡(luò)錯(cuò)誤會(huì)導(dǎo)致重新發(fā)送很多次,而Servicetooker對(duì)話協(xié)議將大型消息拆分成多個(gè)較小的片段,然后再單獨(dú)發(fā)送。ServiceBroker最多可以支持2GB的數(shù)據(jù)。利用Service Broker機(jī)制所開發(fā)的跨數(shù)據(jù)中心的數(shù)據(jù)復(fù)制技術(shù),可以提供數(shù)據(jù)庫的高可用和自動(dòng)故障轉(zhuǎn)移的功能,幫助企業(yè)更好的保護(hù)數(shù)據(jù),提供服務(wù)。
圖1為本發(fā)明異步傳輸數(shù)據(jù)的示意圖。圖2為本發(fā)明異步傳輸數(shù)據(jù)方法的流程圖。
具體實(shí)施例方式下面結(jié)合附圖詳細(xì)說明本發(fā)明的優(yōu)選實(shí)施例。實(shí)施例一請(qǐng)參閱圖1、圖2,本發(fā)明揭示了一種異步傳輸數(shù)據(jù)的方法,所述方法包括如下步驟:步驟S1:在消息初始化數(shù)據(jù)庫和消息目標(biāo)數(shù)據(jù)庫中啟用服務(wù)代理ServiceBroker活動(dòng)。步驟S2:創(chuàng)建數(shù)據(jù)庫主密鑰,用于傳輸加密。步驟S3:在初始化數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫中創(chuàng)建消息類型和消息契約。步驟S4:為初始化數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫創(chuàng)建消息隊(duì)列。步驟S5:創(chuàng)建服務(wù)端點(diǎn),然后使用該服務(wù)端點(diǎn)為消息隊(duì)列綁定到一個(gè)或者多個(gè)契約上;服務(wù)使用隊(duì)列和契約用來定義一個(gè)或一組任務(wù);服務(wù)是消息的發(fā)起方和接受方強(qiáng)制約定的規(guī)則,并將消息路由到正確的隊(duì)列。步驟S6:啟動(dòng)對(duì)話,對(duì)話會(huì)話是在服務(wù)之間進(jìn)行消息交換的操作;創(chuàng)建新的會(huì)話、發(fā)送消息,而后結(jié)束會(huì)話;在接收方隊(duì)列中增加一條發(fā)送消息類型。本實(shí)施例中,步驟S6具體包括:啟動(dòng)對(duì)話,對(duì)話會(huì)話是在服務(wù)之間進(jìn)行消息交換的操作;使用Begin DialogConversation命令創(chuàng)建新的會(huì)話;使用Send命令來發(fā)送消息;使用End Conversation來結(jié)束會(huì)話;在接收方隊(duì)列中增加一條發(fā)送消息類型。步驟S7:接收方從隊(duì)列中讀取消息;接收的結(jié)果填充到常規(guī)表,或者在局部變量中執(zhí)行其他操作,或者發(fā)送到其他服務(wù)代理Service Broker消息中。本實(shí)施例中,步驟S7具體包括:接收方使用Receive語句從隊(duì)列中讀取消息,也可刪除已經(jīng)讀取的消息;Receive的結(jié)果填充到常規(guī)表,或者在局部變量中執(zhí)行其他操作,或者發(fā)送到其他ServiceBroker消息中。步驟S8:接收方使用發(fā)起方的既有會(huì)話句柄,發(fā)送相應(yīng)消息給發(fā)起方,結(jié)束當(dāng)前會(huì)話;在發(fā)起方隊(duì)列中增加確認(rèn)消息類型。步驟S9:發(fā)起方查詢隊(duì)列消息,發(fā)現(xiàn)有確認(rèn)消息類型,則結(jié)束當(dāng)前的會(huì)話;安全的會(huì)話過程到此結(jié)束。步驟SlO:對(duì)于遠(yuǎn)程的多臺(tái)(如2臺(tái))數(shù)據(jù)庫服務(wù)器,則需要在每個(gè)數(shù)據(jù)庫中創(chuàng)建路由并且聯(lián)合遠(yuǎn)程服務(wù)端點(diǎn)來發(fā)送消息。綜上所述,本發(fā)明提出的異步傳輸數(shù)據(jù)的方法,可以讓應(yīng)用程序調(diào)用方擺脫傳統(tǒng)的同步等待機(jī)制,可以讓應(yīng)用前端去響應(yīng)更多的前端請(qǐng)求,而不需要把時(shí)間浪費(fèi)在等待數(shù)據(jù)庫事務(wù)完成的。異步傳輸數(shù)據(jù)的方式使用消息隊(duì)列機(jī)制在底層保證了數(shù)據(jù)可靠的,并且是按照順序在服務(wù)器之間傳輸,并且由會(huì)話機(jī)制保證了數(shù)據(jù)處理的唯一性,所以只要會(huì)話不丟失,數(shù)據(jù)就不會(huì)消失。消息傳送系統(tǒng)在傳送較大的消息時(shí)常會(huì)碰到網(wǎng)絡(luò)問題,發(fā)送以GB為單位的消息時(shí)候會(huì)花費(fèi)幾分鐘的時(shí)間,如果發(fā)生網(wǎng)絡(luò)錯(cuò)誤會(huì)導(dǎo)致重新發(fā)送很多次,而Service broker對(duì)話協(xié)議將大型消息拆分成多個(gè)較小的片段,然后再單獨(dú)發(fā)送。ServiceBroker最多可以支持2GB的數(shù)據(jù)。利用Service Broker機(jī)制所開發(fā)的跨數(shù)據(jù)中心的數(shù)據(jù)復(fù)制技術(shù),可以提供數(shù)據(jù)庫的高可用和自動(dòng)故障轉(zhuǎn)移的功能,幫助企業(yè)更好的保護(hù)數(shù)據(jù),提供服務(wù)。這里本發(fā)明的描述和應(yīng)用是說明性的,并非想將本發(fā)明的范圍限制在上述實(shí)施例中。這里所披露的實(shí)施例的變形和改變是可能的,對(duì)于那些本領(lǐng)域的普通技術(shù)人員來說實(shí)施例的替換和等效的各種部件是公知的。本領(lǐng)域技術(shù)人員應(yīng)該清楚的是,在不脫離本發(fā)明的精神或本質(zhì)特征的情況下,本發(fā)明可以以其它形式、結(jié)構(gòu)、布置、比例,以及用其它組件、材料和部件來實(shí)現(xiàn)。在不脫離本發(fā)明范圍和精神的情況下,可以對(duì)這里所披露的實(shí)施例進(jìn)行其它變形和改變。
權(quán)利要求
1.一種異步傳輸數(shù)據(jù)的方法,其特征在于,所述方法包括如下步驟: 步驟S1:在消息初始化數(shù)據(jù)庫和消息目標(biāo)數(shù)據(jù)庫中啟用服務(wù)代理Service Broker活動(dòng); 步驟S2:創(chuàng)建數(shù)據(jù)庫主密鑰,用于傳輸加密; 步驟S3:在初始化數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫中創(chuàng)建消息類型和消息契約; 步驟S4:為初始化數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫創(chuàng)建消息隊(duì)列; 步驟S5:創(chuàng)建服務(wù)端點(diǎn),然后使用該服務(wù)端點(diǎn)為消息隊(duì)列綁定到一個(gè)或者多個(gè)契約上;服務(wù)使用隊(duì)列和契約用來定義一個(gè)或一組任務(wù);服務(wù)是消息的發(fā)起方和接受方強(qiáng)制約定的規(guī)則,并將消息路由到正確的隊(duì)列; 步驟S6:啟動(dòng)對(duì)話,對(duì)話會(huì)話是在服務(wù)之間進(jìn)行消息交換的操作;創(chuàng)建新的會(huì)話、發(fā)送消息,而后結(jié)束會(huì)話;在接收隊(duì)列中會(huì)對(duì)應(yīng)增加一條發(fā)送方的消息類型; 步驟S7:接收方從隊(duì)列中讀取消息;接收的結(jié)果填充到常規(guī)表,或者在局部變量中執(zhí)行其他操作,或者發(fā)送到其他服務(wù)代理Service Broker消息中; 步驟S8:接收方使用發(fā)起方的既有會(huì)話句柄,發(fā)送相應(yīng)消息給發(fā)起方,結(jié)束當(dāng)前會(huì)話;在發(fā)起方隊(duì)列中會(huì)對(duì)應(yīng)增加確認(rèn)消息類型; 步驟S9:發(fā)起方查詢隊(duì)列消息,發(fā)現(xiàn)有確認(rèn)消息類型,則結(jié)束當(dāng)前的會(huì)話;安全會(huì)話過程到此結(jié)束。
2.根據(jù)權(quán)利要求1所述的異步傳輸數(shù)據(jù)的方法,其特征在于: 所述方法進(jìn)一步包括步驟SlO:對(duì)于遠(yuǎn)程的數(shù)據(jù)庫服務(wù)器,則需要在每個(gè)數(shù)據(jù)庫中創(chuàng)建路由并且聯(lián)合遠(yuǎn)程服務(wù)端點(diǎn)來發(fā)送消息。
3.根據(jù)權(quán)利要求1所述的異步傳輸數(shù)據(jù)的方法,其特征在于: 所述步驟S6具體包括:啟動(dòng)對(duì)話,對(duì)話會(huì)話是在服務(wù)之間進(jìn)行消息交換的操作;使用Begin Dialog Conversat ion命令創(chuàng)建新的會(huì)話;使用Send命令來發(fā)送消息;使用EndConversation來結(jié)束會(huì)話;在接收方隊(duì)列中增加一條發(fā)送消息類型。
4.根據(jù)權(quán)利要求1所述的異步傳輸數(shù)據(jù)的方法,其特征在于: 所述步驟S7具體包括:接收方使用Receive語句從隊(duì)列中讀取消息,也可刪除已經(jīng)讀取的消息Receive的結(jié)果填充到常規(guī)表,或者在局部變量中執(zhí)行其他操作,或者發(fā)送到其他 Service Broker 消息中。
全文摘要
本發(fā)明揭示了一種異步傳輸數(shù)據(jù)的方法,包括在消息初始化數(shù)據(jù)庫和消息目標(biāo)數(shù)據(jù)庫中啟用服務(wù)代理活動(dòng);在初始化數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫中創(chuàng)建消息類型和消息契約;為初始化數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫創(chuàng)建消息隊(duì)列;創(chuàng)建服務(wù)端點(diǎn),然后使用該服務(wù)端點(diǎn)為消息隊(duì)列綁定到一個(gè)或者多個(gè)契約上;服務(wù)使用隊(duì)列和契約用來定義一個(gè)或一組任務(wù);啟動(dòng)對(duì)話;接收方從隊(duì)列中讀取消息;接收方使用發(fā)起方的既有會(huì)話句柄,發(fā)送相應(yīng)消息給發(fā)起方,結(jié)束當(dāng)前會(huì)話;在發(fā)起方隊(duì)列中增加確認(rèn)消息類型;發(fā)起方查詢隊(duì)列消息,發(fā)現(xiàn)有確認(rèn)消息類型,則結(jié)束當(dāng)前的會(huì)話;安全的會(huì)話過程到此結(jié)束。本發(fā)明可以讓應(yīng)用程序調(diào)用方擺脫傳統(tǒng)的同步等待機(jī)制,能夠讓應(yīng)用前端去響應(yīng)更多的前端請(qǐng)求。
文檔編號(hào)H04L29/06GK103078833SQ20111032944
公開日2013年5月1日 申請(qǐng)日期2011年10月26日 優(yōu)先權(quán)日2011年10月26日
發(fā)明者方敏 申請(qǐng)人:上海訊首軟件有限公司