欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種消息重發(fā)方法和系統(tǒng)的制作方法

文檔序號(hào):7958627閱讀:251來(lái)源:國(guó)知局
專利名稱:一種消息重發(fā)方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及數(shù)據(jù)傳輸領(lǐng)域,特別涉及一種消息重發(fā)方法和系統(tǒng)。
背景技術(shù)
在數(shù)據(jù)傳輸領(lǐng)域,以消息通知作為交互模式的應(yīng)用系統(tǒng)越來(lái)越多。在消息傳輸時(shí),由于雙方系統(tǒng)或傳輸鏈路的故障,導(dǎo)致消息在傳輸過(guò)程中丟失而不能及時(shí)、可靠的送達(dá)。針對(duì)這一問(wèn)題,形成了各種不同的消息重發(fā)機(jī)制,用于重新發(fā)送未成功送達(dá)的消息。采用重發(fā)機(jī)制,在第一次發(fā)送不成功的情況下,能夠進(jìn)行多次的發(fā)送嘗試,在很大程度上解決了消息發(fā)送不能送達(dá)的問(wèn)題。但對(duì)于中長(zhǎng)期的通信故障,由于多次的嘗試重發(fā),即浪費(fèi)發(fā)送時(shí)間又占用系統(tǒng)資源,造成了發(fā)送效率的低下。
在網(wǎng)絡(luò)協(xié)議設(shè)計(jì)中,針對(duì)數(shù)據(jù)傳輸失敗進(jìn)行回退重傳的算法很多。其中使用最廣的一個(gè)算法是二進(jìn)制指數(shù)回退(Binary Exponential Backoff,BEB)算法。下面以以太網(wǎng)802.3協(xié)議為例說(shuō)明該算法的詳細(xì)過(guò)程。
802.3協(xié)議使用CSMA/CD算法解決在共享信道上的數(shù)據(jù)幀沖突問(wèn)題。該算法持續(xù)偵聽(tīng)信道,直到信道空閑;一旦信道空閑,立即發(fā)送數(shù)據(jù);若數(shù)據(jù)沖突,立即停止發(fā)送;然后等待一個(gè)重試周期后再次嘗試發(fā)送。計(jì)算重試周期的方法是二進(jìn)制指數(shù)后退算法。它首先將時(shí)間分片,每個(gè)時(shí)間片的長(zhǎng)度是t(51.2微秒)。則在第i次沖突時(shí),重試周期T是在0到(2i-1)*t之間的一個(gè)隨機(jī)的長(zhǎng)度為t的整數(shù)倍的時(shí)間。
二進(jìn)制指數(shù)回退算法使得當(dāng)數(shù)據(jù)傳輸發(fā)生故障時(shí),重試時(shí)間間隔呈指數(shù)迅速增長(zhǎng)。這種針對(duì)隨機(jī)故障模式設(shè)計(jì)的重試時(shí)間間隔計(jì)算方法并不適用于互聯(lián)網(wǎng)系統(tǒng)間消息通信的常見(jiàn)故障模式,往往會(huì)造成故障恢復(fù)時(shí)間過(guò)長(zhǎng)?;ヂ?lián)網(wǎng)系統(tǒng)間消息通信發(fā)生故障的原因一般是網(wǎng)絡(luò)繁忙造成傳輸超時(shí)、網(wǎng)絡(luò)設(shè)備發(fā)生故障、應(yīng)用系統(tǒng)發(fā)生故障、計(jì)劃內(nèi)停機(jī)維護(hù)等等。這些故障的發(fā)生是隨機(jī)的,但故障的恢復(fù)由于人工發(fā)現(xiàn)和維護(hù)的介入,因此不是隨機(jī)的,而是具有一定的模式。此外,互聯(lián)網(wǎng)上的故障的恢復(fù)需要的時(shí)間往往以小時(shí)和天來(lái)計(jì),而在這段時(shí)間內(nèi)會(huì)積累大量未發(fā)出的消息,需要一種高效靈活的消息保存、管理與重傳調(diào)度算法和系統(tǒng)。因此,建立適用于互聯(lián)網(wǎng)消息重傳方法和系統(tǒng),在系統(tǒng)資源占用和消息通知恢復(fù)的及時(shí)性之間取得靈活的平衡,是很有意義的工作。

發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問(wèn)題是提供一種消息重發(fā)方法和系統(tǒng),用盡可能少的重試次數(shù)、盡可能及時(shí)地將消息發(fā)送到消息接收方。特別,本發(fā)明是針對(duì)互聯(lián)網(wǎng)上消息通知失敗的常見(jiàn)原因而設(shè)計(jì)的。
為了解決上述問(wèn)題,本發(fā)明提供了一種消息重發(fā)方法,該方法包括對(duì)需要重試的消息設(shè)置重試周期,以當(dāng)前時(shí)間加上對(duì)應(yīng)的重試周期作為重試時(shí)間;所述重試周期隨著重試次數(shù)的增加而增大;發(fā)送重試時(shí)間到期的消息。
優(yōu)選的,所述重試次數(shù)達(dá)到預(yù)置的值時(shí),放棄自動(dòng)重發(fā)。所述重試周期達(dá)到預(yù)置的值時(shí),放棄自動(dòng)重發(fā)。
優(yōu)選的,所述重試周期的增加值隨著重試次數(shù)的增加而變化;并可以根據(jù)不同的外部系統(tǒng)設(shè)置所述重試周期增加值的大小。
本發(fā)明還提供了一種消息重發(fā)系統(tǒng),該系統(tǒng)包括數(shù)據(jù)庫(kù),用于保存待發(fā)送的新消息和等待重試的消息;通知執(zhí)行器,用于發(fā)送新消息或重試的消息,若消息發(fā)送成功,則從所述數(shù)據(jù)庫(kù)中刪除本條消息;否則對(duì)應(yīng)所述消息設(shè)置重試周期,以當(dāng)前時(shí)間加上對(duì)應(yīng)的重試周期作為重試時(shí)間,并更新所述數(shù)據(jù)庫(kù)中的對(duì)應(yīng)消息;所述重試周期隨著重試次數(shù)的增加而增大;通知恢復(fù)器,用于檢查等待重試的消息,如果存在重試時(shí)間到期的消息,則通知所述通知執(zhí)行器。優(yōu)選的,所述的通知恢復(fù)器定時(shí)運(yùn)行。
本發(fā)明還提供了一種系統(tǒng)間消息通知方法,包括以下步驟將通知消息持久存儲(chǔ);發(fā)送存儲(chǔ)的新通知消息或重試的通知消息;若通知消息發(fā)送成功,則刪除存儲(chǔ)的本條通知消息;否則對(duì)該通知消息設(shè)置重試周期,以當(dāng)前時(shí)間加上對(duì)應(yīng)的重試周期作為重試時(shí)間,并更新存儲(chǔ);所述重試周期隨著重試次數(shù)的增加而增大;檢查等待重試的通知消息,如果存在重試時(shí)間到期的通知消息,則執(zhí)行發(fā)送步驟。
優(yōu)選的,所述系統(tǒng)間消息通知方法還包括同時(shí)發(fā)送新通知消息以及重試的通知消息。優(yōu)選的,所述檢查為定時(shí)檢查。
與現(xiàn)有技術(shù)相比,本發(fā)明具有的優(yōu)點(diǎn)是所述方法和系統(tǒng)針對(duì)短期和中長(zhǎng)期通信故障模式提出現(xiàn)實(shí)、高效的超時(shí)和消息重發(fā)解決方案。隨著重試次數(shù)的增加,其重試周期也越來(lái)越長(zhǎng)。重試周期的變化,兼顧了通知恢復(fù)的及時(shí)性和效率。對(duì)于短期的通信故障,系統(tǒng)能夠在故障恢復(fù)之后及時(shí)將消息通知送達(dá)接收方;對(duì)于中長(zhǎng)期通信故障,系統(tǒng)能夠避免多次重試的開(kāi)銷。


下面結(jié)合附圖和具體實(shí)施方式
對(duì)本發(fā)明作進(jìn)一步詳細(xì)的說(shuō)明。
圖1是本發(fā)明重試周期確定方法的概念模式圖;圖2是一種可靠的系統(tǒng)間消息通知系統(tǒng)的系統(tǒng)結(jié)構(gòu)示意圖;圖3是本發(fā)明一種消息重發(fā)方法的執(zhí)行步驟流程圖;圖4是消息通知的恢復(fù)流程圖;圖5是一種可靠的系統(tǒng)間消息通知方法的步驟流程圖;
圖6是消息通知的注冊(cè)流程圖;圖7是消息通知的發(fā)送流程圖。
具體實(shí)施例方式
基于互聯(lián)網(wǎng)的電子商務(wù)在當(dāng)今社會(huì)中占據(jù)了越來(lái)越重要的地位。越來(lái)越多的商業(yè)實(shí)體通過(guò)互聯(lián)網(wǎng)組織信息流、資金流和物流,以消息通知作為交互模式的互聯(lián)網(wǎng)應(yīng)用系統(tǒng)也越來(lái)越多。以銀行為例,用戶在銀行完成支付后,銀行需要將用戶支付的情況通過(guò)消息通知的形式告知商戶系統(tǒng);以第三方安全交易平臺(tái)為例,當(dāng)用戶在交易平臺(tái)上推進(jìn)交易流程后,交易平臺(tái)需要將交易的當(dāng)前狀態(tài)通知相關(guān)的外部商戶系統(tǒng)。這些都是典型的基于互聯(lián)網(wǎng)的消息通知。本發(fā)明適用于任何協(xié)作的系統(tǒng)之間,但特別是針對(duì)互聯(lián)網(wǎng)上消息通知失敗的常見(jiàn)原因而設(shè)計(jì)的,因此以下優(yōu)選消息通知為例進(jìn)行說(shuō)明。
互聯(lián)網(wǎng)上跨系統(tǒng)的消息通知失敗的可能原因有以下幾種網(wǎng)絡(luò)暫時(shí)繁忙,造成傳輸協(xié)議超時(shí);網(wǎng)絡(luò)短暫中斷;對(duì)方服務(wù)器暫時(shí)繁忙,造成不響應(yīng)請(qǐng)求;對(duì)方系統(tǒng)存在BUG,造成不響應(yīng)請(qǐng)求或者請(qǐng)求處理出錯(cuò);對(duì)方服務(wù)器宕機(jī),造成不響應(yīng)請(qǐng)求;網(wǎng)絡(luò)長(zhǎng)時(shí)間故障,造成長(zhǎng)達(dá)數(shù)小時(shí)以至于數(shù)天的中斷;對(duì)方系統(tǒng)長(zhǎng)時(shí)間故障,造成長(zhǎng)達(dá)數(shù)小時(shí)以至于數(shù)天不可用;對(duì)方系統(tǒng)不存在或者永久關(guān)閉。
從上述原因可見(jiàn),造成消息通知不成功的原因既有可能在數(shù)分鐘內(nèi)消失或緩解,也有可能長(zhǎng)達(dá)數(shù)小時(shí)或者數(shù)天。消息通知的最佳重試策略應(yīng)為當(dāng)原因可以在數(shù)分鐘內(nèi)消失或緩解時(shí),消息通知能夠及時(shí)地發(fā)送給對(duì)方;而當(dāng)原因需要數(shù)小時(shí)或者數(shù)天才能消失時(shí),系統(tǒng)也能將消息通知發(fā)送給對(duì)方,而且不做太多無(wú)謂的嘗試。因此,本發(fā)明優(yōu)選采用下述的一種重試周期確定方法進(jìn)行重試時(shí)間間隔的確定。所述重試時(shí)間間隔即為重試周期。
參照?qǐng)D1,是本發(fā)明重試周期確定方法的概念模式圖。對(duì)所述確定方法說(shuō)明如下假定有一組編號(hào)從1到n+1的盒子,1到n號(hào)盒子上都綁定一個(gè)定時(shí)器,盒子的編號(hào)越大,定時(shí)間隔越長(zhǎng),例如第一次間隔2分鐘,第二次間隔5分鐘,第3次間隔10分鐘等等。第n+1號(hào)盒子上沒(méi)有定時(shí)器,認(rèn)為消息接收方永久不可達(dá),放棄自動(dòng)重試,等待人工恢復(fù)。
一個(gè)消息通知任務(wù)第i次(i=1..n)發(fā)送不成功,則進(jìn)第i個(gè)盒子;第i個(gè)盒子的定時(shí)器每次觸發(fā)都會(huì)重試本盒子中的所有消息通知任務(wù);當(dāng)一個(gè)消息通知任務(wù)第n+1次發(fā)送不成功時(shí),則進(jìn)第n+1個(gè)盒子,由于第n+1個(gè)盒子上沒(méi)有綁定定時(shí)器,因此系統(tǒng)將會(huì)放棄對(duì)該消息通知任務(wù)的自動(dòng)重試,轉(zhuǎn)入人工處理。
此外,本發(fā)明中的通知系統(tǒng)針對(duì)不同類型外部系統(tǒng)的特點(diǎn),對(duì)盒子上的定時(shí)器進(jìn)行了調(diào)整,使之符合相應(yīng)外部系統(tǒng)的故障模式。
如上所述,本發(fā)明方法的核心思想是重試周期隨著重試次數(shù)的增加而增大。采用圖1所示的重試周期確定方法,如果消息通知任務(wù)重試的次數(shù)較少,說(shuō)明造成消息通知發(fā)送不成功的原因在很短時(shí)間內(nèi)消失了,則由于每次重試的時(shí)間間隔也較小,故可以保證故障恢復(fù)時(shí)消息通知的及時(shí)發(fā)送;如果消息通知任務(wù)重試的次數(shù)較多,說(shuō)明造成消息通知發(fā)送不成功的原因?qū)儆陂L(zhǎng)期通信故障,則后來(lái)重試的時(shí)間間隔也較長(zhǎng),可以有效避免太多無(wú)效的重試嘗試,減少系統(tǒng)資源占用,但也可以保證消息通知的確定送達(dá)。即上述重試周期確定方法確保了短期通信故障能夠及時(shí)恢復(fù)消息通知,而對(duì)于長(zhǎng)期通信故障則能夠避免大量無(wú)效的通知嘗試,兼顧了通知恢復(fù)的及時(shí)性和效率。
在上述說(shuō)明中,放棄自動(dòng)重發(fā)的條件是以重試次數(shù)達(dá)到預(yù)置的值進(jìn)行說(shuō)明的,但本發(fā)明并不局限在這一條件下,當(dāng)重試周期達(dá)到預(yù)置的值時(shí),也會(huì)放棄自動(dòng)重發(fā)。根據(jù)不同的應(yīng)用系統(tǒng)或不同業(yè)務(wù)情況,選擇任一方式設(shè)置預(yù)置值,都是為了避免無(wú)限制的重發(fā)嘗試。
本發(fā)明所述的重試周期確定方法中,優(yōu)選的,重試周期的增加值隨著重試次數(shù)的增加而變化,即當(dāng)前的重發(fā)周期和上次重發(fā)周期的差值與下次重發(fā)周期和當(dāng)前重發(fā)周期的差值是不同的。如在圖1中,第3個(gè)盒子與第2個(gè)盒子的定時(shí)間隔的差值是5分鐘,而第4個(gè)盒子與第3個(gè)盒子的定時(shí)間隔的差值是20分鐘,即重試周期的增加值如5分鐘和20分鐘,并不是固定變化的。當(dāng)然,也不排除采用重試周期的增加值固定變化的方法。對(duì)于優(yōu)選方法,所述重試周期增加值的變化是根據(jù)不同的外部系統(tǒng)設(shè)置的。針對(duì)不同類型外部系統(tǒng)的特點(diǎn),每種情況下重試周期增加值的大小和重試時(shí)間間隔值是不同的。這樣的設(shè)置兼顧了通知恢復(fù)的及時(shí)性和效率,更符合應(yīng)用需求。
參照?qǐng)D2,是一種可靠的系統(tǒng)間消息通知系統(tǒng)的系統(tǒng)結(jié)構(gòu)示意圖,包含本發(fā)明一種消息重發(fā)系統(tǒng)。所述消息重發(fā)系統(tǒng)包括數(shù)據(jù)庫(kù)13,用于保存待發(fā)送的新消息和等待重試的消息;通知執(zhí)行器152,用于發(fā)送新消息或重試的消息,若消息發(fā)送成功,則從數(shù)據(jù)庫(kù)13中刪除本條消息;否則對(duì)應(yīng)所述消息設(shè)置重試周期,以當(dāng)前時(shí)間加上對(duì)應(yīng)的重試周期作為重試時(shí)間,并更新數(shù)據(jù)庫(kù)13中的對(duì)應(yīng)消息;所述重試周期隨著重試次數(shù)的增加而增大;通知恢復(fù)器151,用于檢查等待重試的消息,如果存在重試時(shí)間到期的消息,則通知通知執(zhí)行器152。
如圖2所示,業(yè)務(wù)應(yīng)用11可以為某個(gè)商業(yè)應(yīng)用,它是消息通知的發(fā)起者。外部系統(tǒng)17可以為某個(gè)商業(yè)系統(tǒng),它是消息通知的接收者。本發(fā)明所提供的通知系統(tǒng)用于發(fā)送所述業(yè)務(wù)應(yīng)用11發(fā)來(lái)的通知消息,并能夠確保該通知消息通過(guò)互聯(lián)網(wǎng)可靠到達(dá)所述的外部系統(tǒng)17。
數(shù)據(jù)庫(kù)13可以是任何通用的關(guān)系型數(shù)據(jù)庫(kù),用以保存待發(fā)送的新通知消息和曾經(jīng)發(fā)送不成功等待重發(fā)的通知消息。通知客戶端12可以為供業(yè)務(wù)應(yīng)用11使用的一個(gè)客戶端模塊,嵌入到消息的業(yè)務(wù)系統(tǒng)中,業(yè)務(wù)應(yīng)用11可以使用通知客戶端12注冊(cè)一個(gè)通知消息。一旦通知消息注冊(cè)成功,系統(tǒng)就能夠確保該通知消息到達(dá)消息的接收方,即使此時(shí)消息接收方不在線,或者網(wǎng)絡(luò)暫時(shí)無(wú)法連通。所述注冊(cè)可以為,通知客戶端12將業(yè)務(wù)應(yīng)用11發(fā)來(lái)的通知消息存放到數(shù)據(jù)庫(kù)中,并通過(guò)消息隊(duì)列14觸發(fā)消息即時(shí)發(fā)送。所述業(yè)務(wù)系統(tǒng)是指針對(duì)業(yè)務(wù)應(yīng)用11,進(jìn)行相應(yīng)的業(yè)務(wù)處理的系統(tǒng)。結(jié)合網(wǎng)上銀行與商戶之間的消息通知實(shí)例,所述消息的事務(wù)處理是指用戶在網(wǎng)上銀行進(jìn)行實(shí)際支付,若支付完成則事務(wù)處理提交,否則還處于事務(wù)處理中;所述通知消息指用戶的支付結(jié)果,即是否完成支付。所述事務(wù)是一個(gè)技術(shù)上的專有名詞,表示具有ACID特性的一組操作,事務(wù)的ACID特性是實(shí)現(xiàn)消息通知與業(yè)務(wù)操作100%一致性的關(guān)鍵。當(dāng)創(chuàng)建事務(wù)時(shí),應(yīng)確保事務(wù)具有某些可以自行管理的特性,這些特性就稱為ACID特性。ACID是指原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和持久性(Durability)。
將通知客戶端12嵌入到消息的業(yè)務(wù)系統(tǒng)中,可以在同一個(gè)數(shù)據(jù)庫(kù)事務(wù)中完成業(yè)務(wù)處理以及通知任務(wù)的注冊(cè),完全可以避免業(yè)務(wù)處理和通知任務(wù)不一致的情況。所述一致為一通知消息只有當(dāng)事務(wù)處理完成提交后,該通知消息才注冊(cè)成功,進(jìn)行即時(shí)發(fā)送。所述數(shù)據(jù)庫(kù)事務(wù)中的數(shù)據(jù)庫(kù)可以是系統(tǒng)中保存消息通知請(qǐng)求的數(shù)據(jù)庫(kù)。一般說(shuō)來(lái),這個(gè)數(shù)據(jù)庫(kù)與業(yè)務(wù)系統(tǒng)保存業(yè)務(wù)數(shù)據(jù)的數(shù)據(jù)庫(kù)是同一個(gè)。如果是同一個(gè)數(shù)據(jù)庫(kù),則可以避免使用復(fù)雜低效的分布式事務(wù)機(jī)制就能實(shí)現(xiàn)通知消息的注冊(cè)與業(yè)務(wù)數(shù)據(jù)的處理位于同一數(shù)據(jù)庫(kù)事務(wù)中。但也可以使用不同的數(shù)據(jù)庫(kù),并通過(guò)分布式事務(wù)機(jī)制保證通知消息注冊(cè)與業(yè)務(wù)數(shù)據(jù)處理的一致性。
消息隊(duì)列14是一種標(biāo)準(zhǔn)的用于系統(tǒng)間異步消息通訊的中間件。通過(guò)使用消息隊(duì)列,消息的發(fā)送過(guò)程和接收過(guò)程之間是異步的,同時(shí)使得消息發(fā)送方和消息接收方不直接進(jìn)行通訊,而是通過(guò)消息隊(duì)列進(jìn)行間接通訊。這樣做最大程度地減小了消息發(fā)送方和消息接收方之間的相互依賴,使得消息發(fā)送方與消息接收方之間可以相對(duì)獨(dú)立地進(jìn)行工作。目前的消息隊(duì)列一般都能夠做到當(dāng)接收到消息之后,只要消息接收方工作正常,可以即時(shí)將消息傳遞給消息接收方。本實(shí)施例中,消息隊(duì)列14用以觸發(fā)通知消息的即時(shí)發(fā)送。
通知服務(wù)器15可以為一臺(tái)或一組獨(dú)立運(yùn)行的,用以專門負(fù)責(zé)通知消息發(fā)送和通知消息重發(fā)的服務(wù)器,可以包括通知恢復(fù)器151、通知執(zhí)行器152以及多種協(xié)議適配器153。其中,通知恢復(fù)器151為負(fù)責(zé)調(diào)度未成功發(fā)送的通知消息在恰當(dāng)?shù)臅r(shí)間進(jìn)行重新發(fā)送的模塊;通知執(zhí)行器152為負(fù)責(zé)執(zhí)行實(shí)際的通知消息發(fā)送的模塊;多種協(xié)議適配器153中,每種協(xié)議適配器支持一種傳輸協(xié)議,通過(guò)互聯(lián)網(wǎng)完成與外部系統(tǒng)17的實(shí)際數(shù)據(jù)傳輸。通知業(yè)務(wù)處理插件庫(kù)16為各種業(yè)務(wù)插件161的管理器。業(yè)務(wù)插件161負(fù)責(zé)通知消息發(fā)送前的預(yù)處理和返回的通知結(jié)果處理,所述預(yù)處理和結(jié)果處理均與業(yè)務(wù)應(yīng)用緊密相關(guān),不同的業(yè)務(wù)應(yīng)用,其處理過(guò)程也不相同。
參照?qǐng)D3,是本發(fā)明一種消息重發(fā)方法的執(zhí)行步驟流程圖。當(dāng)消息第一次發(fā)送不成功時(shí),進(jìn)入消息重發(fā)步驟步驟g1,計(jì)算消息的下一次重發(fā)時(shí)間。通知執(zhí)行器根據(jù)重試周期確定方法計(jì)算下一次重試需要等待的時(shí)間間隔,并用該間隔加上當(dāng)前時(shí)間作為下一次消息發(fā)送重試的時(shí)間點(diǎn)。
步驟g2,更新數(shù)據(jù)庫(kù)存儲(chǔ)。通知執(zhí)行器根據(jù)計(jì)算的重試時(shí)間,更新數(shù)據(jù)庫(kù)中對(duì)應(yīng)消息通知請(qǐng)求的發(fā)送時(shí)間,并放棄本輪通知,等待通知恢復(fù)器的重新調(diào)度。
步驟g 3,在定時(shí)時(shí)間點(diǎn)調(diào)度重試時(shí)間到期的消息并發(fā)送。參照?qǐng)D4,是消息通知的恢復(fù)流程圖。當(dāng)所述通知消息需要重新發(fā)送時(shí),進(jìn)入通知恢復(fù)流程。優(yōu)選的,通知恢復(fù)器定時(shí)運(yùn)行,在每一輪運(yùn)行中,執(zhí)行以下步驟步驟c1,通知恢復(fù)器等待定時(shí)時(shí)間,當(dāng)時(shí)間點(diǎn)到開(kāi)始運(yùn)行。
步驟c2,從數(shù)據(jù)庫(kù)中查找重試時(shí)間到期的消息通知請(qǐng)求。檢查需要重試的消息通知請(qǐng)求,將通知執(zhí)行器計(jì)算所得的重試時(shí)間與本輪的定時(shí)時(shí)間相比較,若有重試時(shí)間點(diǎn)小于或等于定時(shí)時(shí)間點(diǎn)的情況,則存在重試時(shí)間到期的消息通知請(qǐng)求,繼續(xù)步驟c3;否則放棄本輪重試,繼續(xù)步驟c4。
步驟c3,對(duì)于重試時(shí)間到期的通知消息,向通知執(zhí)行器發(fā)送重試請(qǐng)求,逐條交給通知執(zhí)行器進(jìn)行通知發(fā)送。
步驟c4,等待下一定時(shí)時(shí)間點(diǎn),進(jìn)行下一輪運(yùn)行。
通知恢復(fù)流程的定時(shí)時(shí)間一般是固定的,比如每隔1分鐘運(yùn)行一次。定時(shí)時(shí)間間隔的大小關(guān)系到通知恢復(fù)的及時(shí)性,因此,這個(gè)時(shí)間間隔一般設(shè)置得越小越好,但必須在通知服務(wù)器能夠承受的性能范圍內(nèi)。此外,這個(gè)定時(shí)時(shí)間間隔與消息通知重試的間隔并不相同,消息通知重試的間隔時(shí)間是通過(guò)重試周期確定方法針對(duì)每一條通知消息單獨(dú)計(jì)算和設(shè)置的。
在步驟g3中,若所述步驟c3的發(fā)送成功,則本次消息重發(fā)成功完成;否則繼續(xù)執(zhí)行步驟g1。
本發(fā)明還提供了一種可靠的系統(tǒng)間消息通知方法,參照?qǐng)D5,是一種可靠的系統(tǒng)間消息通知方法的步驟流程圖。當(dāng)業(yè)務(wù)應(yīng)用需要向外部系統(tǒng)發(fā)送一通知消息時(shí),執(zhí)行以下步驟即可可靠送達(dá)步驟s1,業(yè)務(wù)應(yīng)用將自己的通知需求封裝成一個(gè)消息通知請(qǐng)求,發(fā)送至通知客戶端。
步驟s2,通知客戶端將所述通知消息進(jìn)行注冊(cè)。一旦通知消息注冊(cè)成功,業(yè)務(wù)應(yīng)用就可以繼續(xù)其它業(yè)務(wù)處理,所述系統(tǒng)就能夠確保該通知消息到達(dá)消息的接收方,即使此時(shí)消息接收方不在線,或者網(wǎng)絡(luò)暫時(shí)無(wú)法連通。
步驟s3,當(dāng)通知消息注冊(cè)成功后,通知系統(tǒng)進(jìn)行通知消息的發(fā)送。若發(fā)送成功,則消息通知任務(wù)結(jié)束;否則繼續(xù)步驟s4。
步驟s4,進(jìn)行消息發(fā)送的恢復(fù)處理,調(diào)度未成功發(fā)送的通知消息在恰當(dāng)?shù)臅r(shí)間進(jìn)行重新發(fā)送,繼續(xù)步驟s3。
在此過(guò)程中,步驟s4與步驟s1、步驟s2和步驟s3可以同時(shí)執(zhí)行。步驟s4即上述的步驟g3,可參照?qǐng)D4消息通知的恢復(fù)流程圖。下面分別對(duì)步驟s2和s3進(jìn)行詳細(xì)說(shuō)明。
參照?qǐng)D6,是消息通知的注冊(cè)流程圖,包括以下步驟步驟a1,通知客戶端接收所述業(yè)務(wù)應(yīng)用發(fā)來(lái)的消息通知請(qǐng)求;所述消息通知請(qǐng)求可以包括消息通知的內(nèi)容。
步驟a2,通知客戶端將所述通知請(qǐng)求存放到數(shù)據(jù)庫(kù)中,直到通知消息發(fā)送成功,這樣可以避免在發(fā)送過(guò)程中由于網(wǎng)絡(luò)、服務(wù)器或程序系統(tǒng)不穩(wěn)定造成的通知消息丟失且不可恢復(fù)的問(wèn)題。
步驟a3,通知客戶端判斷所述消息的事務(wù)處理是否完成提交,若還處于事務(wù)處理中,則繼續(xù)執(zhí)行步驟a4、步驟a5和步驟a6;若事務(wù)已完成提交,則通知客戶端自動(dòng)觸發(fā)消息隊(duì)列,直接執(zhí)行步驟a6。結(jié)合網(wǎng)上銀行與商戶之間的消息通知實(shí)例,所述消息的事務(wù)處理是指用戶在網(wǎng)上銀行進(jìn)行實(shí)際支付,若支付完成則事務(wù)處理提交,否則還處于事務(wù)處理中;所述通知消息指用戶的支付結(jié)果,即是否完成支付。本實(shí)施例中,由于通知客戶端嵌入到業(yè)務(wù)系統(tǒng)中,能夠在業(yè)務(wù)事務(wù)內(nèi)完成將通知任務(wù)注冊(cè)到數(shù)據(jù)庫(kù)中,這樣避免使用復(fù)雜的機(jī)制就實(shí)現(xiàn)了業(yè)務(wù)處理和通知注冊(cè)的一致性。
步驟a4,通知客戶端向事務(wù)管理器注冊(cè)一個(gè)事務(wù)同步器。所述事務(wù)管理器是對(duì)事務(wù)進(jìn)行管理的軟件,包括事務(wù)同步器。所述事務(wù)同步器設(shè)置在通知客戶端,用于實(shí)現(xiàn)在事務(wù)提交之后通過(guò)消息隊(duì)列向通知服務(wù)器發(fā)送一個(gè)立即發(fā)送通知消息的請(qǐng)求,可以保證通知的及時(shí)性。
步驟a5,當(dāng)事務(wù)完成提交之后,事務(wù)同步器自動(dòng)觸發(fā)消息隊(duì)列。
步驟a6,消息隊(duì)列向通知執(zhí)行器發(fā)送一個(gè)立即發(fā)送通知消息的請(qǐng)求,驅(qū)動(dòng)通知執(zhí)行器進(jìn)行發(fā)送,保證了通知的即時(shí)性。
參照?qǐng)D7,是消息通知的發(fā)送流程圖,包括以下步驟
步驟b1,通知執(zhí)行器接收到通知客戶端通過(guò)消息隊(duì)列發(fā)來(lái)的新消息通知請(qǐng)求,或者消息恢復(fù)器發(fā)來(lái)的重試消息通知請(qǐng)求。如果同時(shí)收到消息隊(duì)列發(fā)來(lái)的新消息通知請(qǐng)求和消息恢復(fù)器發(fā)來(lái)的重試消息通知請(qǐng)求,則優(yōu)選的,通知執(zhí)行器執(zhí)行多線程處理,可以同時(shí)發(fā)送新通知消息以及重試的通知消息。當(dāng)然,也可以采用確定優(yōu)先級(jí)進(jìn)行發(fā)送。
步驟b2,通知執(zhí)行器根據(jù)消息通知請(qǐng)求的類型,從業(yè)務(wù)插件庫(kù)中找到相應(yīng)的業(yè)務(wù)插件,將消息通知請(qǐng)求交給業(yè)務(wù)插件進(jìn)行預(yù)處理,得到實(shí)際的外部系統(tǒng)通知地址、通知協(xié)議和通知參數(shù)。
步驟b3,通知執(zhí)行器根據(jù)通知協(xié)議選擇合適的協(xié)議適配器,將通知消息內(nèi)容、通知地址和通知參數(shù)交給協(xié)議適配器進(jìn)行實(shí)際的消息發(fā)送。
步驟b4,如果網(wǎng)絡(luò)、雙方服務(wù)器與系統(tǒng)均正常工作,則消息通過(guò)互聯(lián)網(wǎng)到達(dá)外部系統(tǒng),外部系統(tǒng)接收到消息并處理后返回處理結(jié)果;否則所述通知執(zhí)行器能夠自動(dòng)檢測(cè)到通知消息未到達(dá)外部系統(tǒng),繼續(xù)步驟b8和b9。
步驟b5,通知執(zhí)行器將返回結(jié)果交給業(yè)務(wù)插件,由業(yè)務(wù)插件完成相應(yīng)的業(yè)務(wù)處理。在上述例子中,當(dāng)收到外部商戶的返回結(jié)果之后,業(yè)務(wù)插件需要將交易的狀態(tài)變?yōu)橐寻l(fā)貨,并且記錄發(fā)貨單的詳情,通知用戶發(fā)貨情況。由于通知服務(wù)器本身是通用的,與具體業(yè)務(wù)無(wú)關(guān),因此這些處理是由業(yè)務(wù)插件來(lái)完成的。
步驟b6,業(yè)務(wù)插件判斷本次發(fā)送是否需要重試。業(yè)務(wù)插件是根據(jù)是否有返回結(jié)果,以及返回結(jié)果的格式和內(nèi)容是否有效決定。仍以上述例子為例,如果返回結(jié)果中包含有效的商戶發(fā)貨信息,則業(yè)務(wù)插件判斷消息通知是成功的;如果沒(méi)有返回結(jié)果,或者返回結(jié)果格式無(wú)效,或者外部商戶在返回結(jié)果中直接表明暫時(shí)無(wú)法處理,需要過(guò)一段時(shí)間重試,則業(yè)務(wù)插件判斷消息通知未成功,需要重試。
因?yàn)橄l(fā)送不成功的可能原因不但包括網(wǎng)絡(luò)或系統(tǒng)故障,還取決于業(yè)務(wù)處理是否能夠成功,而通用的通知服務(wù)器可以判定網(wǎng)絡(luò)與系統(tǒng)的故障,但無(wú)法判定業(yè)務(wù)處理是否成功,因此將判定職責(zé)交給業(yè)務(wù)插件去完成。當(dāng)然,明顯的網(wǎng)絡(luò)與系統(tǒng)故障是通知服務(wù)器本身能夠判斷的,因此,當(dāng)發(fā)生這種情況時(shí),由通知服務(wù)器直接決定需要重試。
步驟b7,如果業(yè)務(wù)插件表明本次消息不需要重試,則通知執(zhí)行器從數(shù)據(jù)庫(kù)中刪除本條消息通知請(qǐng)求,成功完成通知發(fā)送。
步驟b8,如果由于網(wǎng)絡(luò)等原因發(fā)送的通知消息未到達(dá)外部系統(tǒng),或業(yè)務(wù)插件表明本次消息需要重試,則通知執(zhí)行器根據(jù)重試策略計(jì)算下一次重試需要等待的時(shí)間間隔,并用該間隔加上當(dāng)前時(shí)間作為下一次消息發(fā)送重試的時(shí)間點(diǎn)。
步驟b9,對(duì)于等待重新發(fā)送的通知消息,通知執(zhí)行器根據(jù)計(jì)算的重試時(shí)間,更新數(shù)據(jù)庫(kù)中對(duì)應(yīng)消息通知請(qǐng)求的發(fā)送時(shí)間,并放棄本輪通知,等待通知恢復(fù)器的重新調(diào)度。
在上述通知發(fā)送流程中,通過(guò)擴(kuò)展業(yè)務(wù)插件,可以實(shí)現(xiàn)在同一個(gè)消息通知系統(tǒng)中支持各種類型的業(yè)務(wù)通知;通過(guò)擴(kuò)展協(xié)議處理器,可以實(shí)現(xiàn)在同一個(gè)消息通知系統(tǒng)上支持不同協(xié)議的通知。此外,通知的接收者不需要實(shí)現(xiàn)任何特殊的可靠消息通知協(xié)議,只需要根據(jù)業(yè)務(wù)的要求返回消息處理的結(jié)果,就能夠可靠接收來(lái)自消息提供方的消息。
上述本發(fā)明一種消息重發(fā)方法和系統(tǒng),用盡可能少的重試次數(shù)、盡可能及時(shí)地將消息發(fā)送到消息接收方。所述方法和系統(tǒng)針對(duì)短期和中長(zhǎng)期通信故障模式提出現(xiàn)實(shí)、高效的超時(shí)和消息重發(fā)解決方案。隨著重試次數(shù)的增加,其重試周期也越來(lái)越長(zhǎng)。重試周期的變化,兼顧了通知恢復(fù)的及時(shí)性和效率。對(duì)于短期的通信故障,系統(tǒng)能夠在故障恢復(fù)之后及時(shí)將消息通知送達(dá)接收方;對(duì)于中長(zhǎng)期通信故障,系統(tǒng)能夠避免多次重試的開(kāi)銷。
本發(fā)明還提供了一種可靠的系統(tǒng)間消息通知方法和系統(tǒng),適用于任何協(xié)作的系統(tǒng)之間,尤其解決了系統(tǒng)之間通過(guò)互聯(lián)網(wǎng)進(jìn)行消息通知時(shí),由于網(wǎng)絡(luò)內(nèi)在的不可靠性和系統(tǒng)軟、硬件故障造成的通知消息丟失且不可恢復(fù)的問(wèn)題,確保消息的可靠、及時(shí)到達(dá)。本發(fā)明支持不同系統(tǒng)間的多協(xié)議傳輸,接收方不需要實(shí)現(xiàn)復(fù)雜的交互協(xié)議就能夠可靠接收通知消息,適合廣泛應(yīng)用于互聯(lián)網(wǎng)。所述方法和系統(tǒng)還支持多業(yè)務(wù)處理,可作為一個(gè)通用的業(yè)務(wù)應(yīng)用平臺(tái)。同時(shí),可以進(jìn)行多業(yè)務(wù)和多協(xié)議的靈活擴(kuò)展。
以上對(duì)本發(fā)明所提供的一種消息重發(fā)方法和系統(tǒng)、以及一種可靠的系統(tǒng)間消息通知方法和系統(tǒng)進(jìn)行了詳細(xì)介紹,本文僅以優(yōu)選實(shí)施例對(duì)本發(fā)明進(jìn)行說(shuō)明。特別是,本發(fā)明所述的方法和系統(tǒng)適用于任何協(xié)作的系統(tǒng)之間,并不僅局限在基于互聯(lián)網(wǎng)的系統(tǒng)之間,只是優(yōu)選保證了互聯(lián)網(wǎng)間的消息重發(fā)和可靠消息通知,更適合廣泛應(yīng)用于互聯(lián)網(wǎng)。所以,并不能因此即局限本發(fā)明的權(quán)利范圍,以上實(shí)施例的說(shuō)明只是用于幫助理解本發(fā)明的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實(shí)施方式
及應(yīng)用范圍上均會(huì)有改變之處。綜上所述,本說(shuō)明書內(nèi)容不應(yīng)理解為對(duì)本發(fā)明的限制。
權(quán)利要求
1.一種消息重發(fā)方法,其特征在于對(duì)需要重試的消息設(shè)置重試周期,以當(dāng)前時(shí)間加上對(duì)應(yīng)的重試周期作為重試時(shí)間,所述重試周期隨著重試次數(shù)的增加而增大;發(fā)送重試時(shí)間到期的消息。
2.根據(jù)權(quán)利要求1所述的一種消息重發(fā)方法,其特征在于所述重試次數(shù)達(dá)到預(yù)置的值時(shí),放棄自動(dòng)重發(fā)。
3.根據(jù)權(quán)利要求1所述的一種消息重發(fā)方法,其特征在于所述重試周期達(dá)到預(yù)置的值時(shí),放棄自動(dòng)重發(fā)。
4.根據(jù)權(quán)利要求1所述的一種消息重發(fā)方法,其特征在于所述重試周期的增加值隨著重試次數(shù)的增加而變化。
5.根據(jù)權(quán)利要求4所述的一種消息重發(fā)方法,其特征在于根據(jù)不同的外部系統(tǒng)設(shè)置所述重試周期增加值的大小。
6.一種消息重發(fā)系統(tǒng),其特征在于,包括數(shù)據(jù)庫(kù),用于保存待發(fā)送的新消息和等待重試的消息;通知執(zhí)行器,用于發(fā)送新消息或重試的消息,若消息發(fā)送成功,則從所述數(shù)據(jù)庫(kù)中刪除本條消息;否則對(duì)應(yīng)所述消息設(shè)置重試周期,以當(dāng)前時(shí)間加上對(duì)應(yīng)的重試周期作為重試時(shí)間,并更新所述數(shù)據(jù)庫(kù)中的對(duì)應(yīng)消息;所述重試周期隨著重試次數(shù)的增加而增大;通知恢復(fù)器,用于檢查等待重試的消息,如果存在重試時(shí)間到期的消息,則通知所述通知執(zhí)行器。
7.根據(jù)權(quán)利要求6所述的一種消息重發(fā)系統(tǒng),其特征在于所述的通知恢復(fù)器定時(shí)運(yùn)行。
8.一種系統(tǒng)間消息通知方法,其特征在于,包括以下步驟將通知消息持久存儲(chǔ);發(fā)送存儲(chǔ)的新通知消息或重試的通知消息;若通知消息發(fā)送成功,則刪除存儲(chǔ)的本條通知消息;否則對(duì)該通知消息設(shè)置重試周期,以當(dāng)前時(shí)間加上對(duì)應(yīng)的重試周期作為重試時(shí)間,并更新存儲(chǔ);所述重試周期隨著重試次數(shù)的增加而增大;檢查等待重試的通知消息,如果存在重試時(shí)間到期的通知消息,則執(zhí)行發(fā)送步驟。
9.根據(jù)權(quán)利要求1所述的一種系統(tǒng)間消息通知方法,其特征在于,還包括同時(shí)發(fā)送新通知消息以及重試的通知消息。
10.根據(jù)權(quán)利要求1所述的一種系統(tǒng)間消息通知方法,其特征在于所述檢查為定時(shí)檢查。
全文摘要
本發(fā)明公開(kāi)一種消息重發(fā)方法和系統(tǒng),能夠用盡可能少的重試次數(shù)、盡可能及時(shí)地將消息通知發(fā)送到消息接收方。所述方法包括對(duì)需要重試的消息設(shè)置重試周期,以當(dāng)前時(shí)間加上對(duì)應(yīng)的重試周期作為重試時(shí)間;所述重試周期隨著重試次數(shù)的增加而增大;發(fā)送重試時(shí)間到期的消息。當(dāng)所述重試次數(shù)或所述重試周期達(dá)到預(yù)置的值時(shí),放棄自動(dòng)重發(fā)。本發(fā)明還公開(kāi)一種可靠的系統(tǒng)間消息通知方法和系統(tǒng),能夠保證消息通知的可靠到達(dá)。所述方法和系統(tǒng)支持不同系統(tǒng)間的多協(xié)議傳輸,接收方不需要實(shí)現(xiàn)復(fù)雜的交互協(xié)議就能夠可靠接收通知消息,適合廣泛應(yīng)用于互聯(lián)網(wǎng)。此外,還支持多業(yè)務(wù)處理,可作為一個(gè)通用的業(yè)務(wù)應(yīng)用平臺(tái)。同時(shí),還可以進(jìn)行多業(yè)務(wù)和多協(xié)議的靈活擴(kuò)展。
文檔編號(hào)H04L1/08GK1829139SQ20061006636
公開(kāi)日2006年9月6日 申請(qǐng)日期2006年3月30日 優(yōu)先權(quán)日2006年3月30日
發(fā)明者錢志龍, 程立, 李磊 申請(qǐng)人:阿里巴巴公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
台中县| 巴东县| 北川| 哈巴河县| 泗洪县| 成武县| 普安县| 象山县| 章丘市| 临清市| 宜兰市| 泸水县| 岚皋县| 石城县| 随州市| 丹凤县| 陵水| 洪湖市| 南充市| 隆德县| 遵义县| 乐业县| 秦安县| 台中县| 平安县| 桑日县| 汉源县| 新巴尔虎左旗| 龙口市| 泗洪县| 海原县| 丹寨县| 正定县| 宝应县| 铁力市| 昌图县| 边坝县| 琼海市| 庄浪县| 永济市| 丹凤县|