本發(fā)明實施例涉及軟件技術(shù)領(lǐng)域,尤其涉及一種消息發(fā)送方法及裝置。
背景技術(shù):
現(xiàn)有的消息通知系統(tǒng)一般采用一個隊列緩沖區(qū)來存放從通知庫中撈取的數(shù)據(jù),然后將隊列緩沖區(qū)的數(shù)據(jù)發(fā)送到對應(yīng)的客戶端。該方法實現(xiàn)簡單,但緩沖區(qū)通過使用隊列來實現(xiàn),數(shù)據(jù)到達時要在隊列尾部分配內(nèi)存,數(shù)據(jù)發(fā)送完成時需要在隊列頭部釋放內(nèi)存。如果系統(tǒng)承載著較大的數(shù)據(jù)流,將面臨著較大的內(nèi)存操作導(dǎo)致的開銷壓力。同時,在多線程環(huán)境下,對隊列中的數(shù)據(jù)進行處理將面臨著頻繁的加解鎖操作,極大地影響系統(tǒng)的TPS。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例提供一種消息發(fā)送方法及裝置,用以提高消息發(fā)送的效率,降低系統(tǒng)開銷。
本發(fā)明實施例提供的一種消息發(fā)送方法,包括:
確定第二消息循環(huán)隊列存儲的消息的數(shù)量;
若所述第二消息循環(huán)隊列存儲的消息的數(shù)量未超過第一閾值,則獲取第一消息循環(huán)隊列存儲的待發(fā)送的消息,并存儲至所述第二消息循環(huán)隊列中;
對所述第二消息循環(huán)隊列中的待發(fā)送的消息進行處理,并將處理之后的待發(fā)送的消息發(fā)送至客戶端。
優(yōu)選地,在將處理之后的待發(fā)送的消息發(fā)送至客戶端之后,還包括:
若所述客戶端反饋所述待發(fā)送的消息未發(fā)送成功,則將所述未發(fā)送成功的消息存儲至第三消息循環(huán)隊列中;
將所述第三消息循環(huán)隊列中的未發(fā)送成功的消息發(fā)送至所述客戶端。
優(yōu)選地,將所述第三消息循環(huán)隊列中的未發(fā)送成功的消息發(fā)送至所述客戶端之后,還包括:
若所述未發(fā)送成功的消息的發(fā)送次數(shù)大于第二閾值,則通知服務(wù)器所述未發(fā)送成功的消息發(fā)送失敗。
優(yōu)選地,在將所述未發(fā)送成功的消息存儲至第三消息循環(huán)隊列中之前,還包括:
若所述第三消息循環(huán)隊列中的未發(fā)送成功的消息的數(shù)量超過第三閾值,則通知服務(wù)器所述待發(fā)送的消息未發(fā)送成功,并在設(shè)定時間之后從所述服務(wù)器中重新?lián)迫∷鑫窗l(fā)送成功的消息至所述第一消息循環(huán)隊列。
優(yōu)選地,還包括:
確定所述第一消息循環(huán)隊列、第二消息循環(huán)隊列和第三消息循環(huán)隊列中存儲的消息的總量是否小于第四閾值;
若是,則從所述服務(wù)器中撈取待發(fā)送的消息;
將從服務(wù)器中撈取的待發(fā)送的消息按序存儲至所述第一消息循環(huán)隊列的尾部。
優(yōu)選地,還包括:
若所述客戶端反饋消息發(fā)送成功,則將消息發(fā)送成功的狀態(tài)通知給服務(wù)器,以使所述發(fā)送成功的消息不被撈取。
優(yōu)選地,還包括:
若所述第一消息循環(huán)隊列存儲的待發(fā)送的消息超過第五閾值,將從所述服務(wù)器撈取的消息丟棄。
相應(yīng)地,本發(fā)明實施例還提供了一種消息發(fā)送裝置,包括:
確定單元,用于確定第二消息循環(huán)隊列存儲的消息的數(shù)量;
獲取單元,用于若所述第二消息循環(huán)隊列存儲的消息的數(shù)量未超過第一閾值,則獲取第一消息循環(huán)隊列存儲的待發(fā)送的消息,并存儲至所述第二消息循環(huán)隊列中;
處理單元,用于對所述第二消息循環(huán)隊列中的待發(fā)送的消息進行處理,并將處理之后的待發(fā)送的消息發(fā)送至客戶端。
優(yōu)選地,所述處理單元還用于:
在將處理之后的待發(fā)送的消息發(fā)送至客戶端之后,若所述客戶端反饋所述待發(fā)送的消息未發(fā)送成功,則將所述未發(fā)送成功的消息存儲至第三消息循環(huán)隊列中;
將所述第三消息循環(huán)隊列中的未發(fā)送成功的消息發(fā)送至所述客戶端。
優(yōu)選地,所述處理單元還用于:
將所述第三消息循環(huán)隊列中的未發(fā)送成功的消息發(fā)送至所述客戶端之后,若所述未發(fā)送成功的消息的發(fā)送次數(shù)大于第二閾值,則通知服務(wù)器所述未發(fā)送成功的消息發(fā)送失敗。
優(yōu)選地,所述處理單元還用于:
在將所述未發(fā)送成功的消息存儲至第三消息循環(huán)隊列中之前,若所述第三消息循環(huán)隊列中的未發(fā)送成功的消息的數(shù)量超過第三閾值,則通知服務(wù)器所述待發(fā)送的消息未發(fā)送成功,并在設(shè)定時間之后從所述服務(wù)器中重新?lián)迫∷鑫窗l(fā)送成功的消息至所述第一消息循環(huán)隊列。
優(yōu)選地,所述確定單元,還用于確定所述第一消息循環(huán)隊列、第二消息循環(huán)隊列和第三消息循環(huán)隊列中存儲的消息的總量是否小于第四閾值;
所述獲取單元,還用于若所述第一消息循環(huán)隊列、第二消息循環(huán)隊列和第三消息循環(huán)隊列中存儲的消息的總量小于第四閾值,則從所述服務(wù)器中撈取待發(fā)送的消息;并將從服務(wù)器中撈取的待發(fā)送的消息按序存儲至所述第一消息循環(huán)隊列的尾部。
優(yōu)選地,所述處理單元還用于:
若所述客戶端反饋消息發(fā)送成功,則將消息發(fā)送成功的狀態(tài)通知給服務(wù)器,以使所述發(fā)送成功的消息不被撈取。
優(yōu)選地,所述處理單元還用于:
若所述第一消息循環(huán)隊列存儲的待發(fā)送的消息超過第五閾值,將從所述服務(wù)器撈取的消息丟棄。
本發(fā)明實施例表明,通過確定第二消息循環(huán)隊列存儲的消息的數(shù)量,若所述第二消息循環(huán)隊列存儲的消息的數(shù)量未超過第一閾值,則獲取第一消息循環(huán)隊列存儲的待發(fā)送的消息,并存儲至所述第二消息循環(huán)隊列中,對所述第二消息循環(huán)隊列中的待發(fā)送的消息進行處理,并將處理之后的待發(fā)送的消息發(fā)送至客戶端。通過多個消息循環(huán)隊列分別存儲不同的消息,避免了采用一個隊列緩沖區(qū)頻繁的進行內(nèi)存分配與釋放的問題,從而提高消息發(fā)送效率,降低系統(tǒng)開銷。
附圖說明
為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡要介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域的普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實施例提供的一種系統(tǒng)架構(gòu)的結(jié)構(gòu)示意圖;
圖2為本發(fā)明實施例提供的一種消息發(fā)送方法的流程示意圖;
圖3為本發(fā)明實施例提供的一種系統(tǒng)部署的示意圖;
圖4為本發(fā)明實施例提供的一種消息發(fā)送方法的流程示意圖;
圖5為本發(fā)明實施例提供的一種消息發(fā)送方法的流程示意圖;
圖6為本發(fā)明實施例提供的一種消息發(fā)送方法的流程示意圖;
圖7為本發(fā)明實施例提供的一種消息發(fā)送裝置的結(jié)構(gòu)示意圖。
具體實施方式
為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合附圖對本發(fā)明作進一步地詳細(xì)描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其它實施例,都屬于本發(fā)明保護的范圍。
圖1示例性的示出了本發(fā)明實施例提供的一種系統(tǒng)架構(gòu),該系統(tǒng)架構(gòu)適用于運行本發(fā)明實施例中提供的一種消息發(fā)送方法。該系統(tǒng)架構(gòu)包括服務(wù)器101、客戶端102、消息撈取裝置103、消息處理發(fā)送裝置104和消息存儲轉(zhuǎn)發(fā)裝置105。該服務(wù)器101用于提供待發(fā)送的消息,消息撈取裝置103用于從服務(wù)器中撈取消息并存儲在循環(huán)隊列1中,消息處理發(fā)送裝置104用于從循環(huán)隊列1中獲取待發(fā)送消息存儲在循環(huán)隊列2中,并對循環(huán)隊列2中的消息進行處理和發(fā)送至客戶端102中,消息存儲轉(zhuǎn)發(fā)裝置105用于發(fā)送消息處理發(fā)送裝置104未發(fā)送成功的消息。
基于上述描述,圖2示出了本發(fā)明實施例提供的一種消息發(fā)送的流程,該流程可以由消息發(fā)送裝置執(zhí)行。
如圖2所示,該方法流程具體步驟包括:
步驟201,確定第二消息循環(huán)隊列存儲的消息的數(shù)量。
步驟202,若所述第二消息循環(huán)隊列存儲的消息的數(shù)量未超過第一閾值,則獲取第一消息循環(huán)隊列存儲的待發(fā)送的消息,并存儲至所述第二消息循環(huán)隊列中。
步驟203,對所述第二消息循環(huán)隊列中的待發(fā)送的消息進行處理,并將處理之后的待發(fā)送的消息發(fā)送至客戶端。
在本發(fā)明實施例中,在對第二消息循環(huán)隊列中的待發(fā)送的消息進行處理之前,需要確定第二消息循環(huán)隊列存儲的消息的數(shù)量,若該第二消息循環(huán)隊列存儲的消息的數(shù)量未超過第一閾值,就可以獲取第一消息循環(huán)隊列存儲的待發(fā)送的消息,并將該獲取的待發(fā)送的消息存儲至第二消息循環(huán)隊列中,然后對該第二消息循環(huán)隊列中的待發(fā)送的消息進行處理,并將處理之后的待發(fā)送的消息發(fā)送至客戶端。其中,該第一消息循環(huán)隊列可以為上述圖1中的循環(huán)隊列1,該第二消息循環(huán)隊列可以為上述圖1中的循環(huán)隊列2,第一閾值可以依據(jù)經(jīng)驗進行設(shè)定。
舉例來說,上述消息處理發(fā)送裝置從循環(huán)隊列1中獲取消息并保存至循環(huán)隊列2中,同時對該消息進行處理和發(fā)送。具體的,當(dāng)循環(huán)隊列1不為空時,如果循環(huán)隊列2未滿,則將循環(huán)隊列1的頭部獲取的消息保存至循環(huán)隊列2中,如果循環(huán)隊列2已滿,則繼續(xù)查詢循環(huán)隊列2是否已滿。在對循環(huán)隊列2中的消息進行處理時,可以是內(nèi)部字段數(shù)據(jù)更新、形變等處理方式。特別地,此時對循環(huán)隊列2中的消息進行處理與循環(huán)隊列1的消息接收隔離開來,無需進行加解鎖操作。
在上述步驟203中將處理之后的待發(fā)送的消息發(fā)送至客戶端之后,若客戶端反饋該待發(fā)送的消息未發(fā)送成功,則將該未發(fā)送成功的消息存儲至第三消息循環(huán)隊列中,并將該第三消息循環(huán)隊列中未發(fā)送成功的消息發(fā)送至客戶端。該待發(fā)送的消息未發(fā)送成功可以表示為發(fā)送失敗或發(fā)送超時。若該客戶端反饋消息發(fā)送成功,則將消息發(fā)送成功的狀態(tài)通知給服務(wù)器,以使該發(fā)送成的消息不被撈取。通過第三消息循環(huán)隊列來存儲未發(fā)送成功的消息,可以預(yù)防因發(fā)送失敗或超時的消息的積壓導(dǎo)致緩沖區(qū)內(nèi)數(shù)據(jù)處理的低效的問題。
進一步地,在將第三消息循環(huán)隊列中的未發(fā)送成功的消息發(fā)送至客戶端之后,若該未發(fā)送成功的消息的發(fā)送次數(shù)大于第二閾值,則通知服務(wù)器該未發(fā)送成功的消息發(fā)送失敗。該第二閾值可以依據(jù)經(jīng)驗進行設(shè)置,該第三消息循環(huán)隊列可以是圖1中的循環(huán)隊列3。
具體的,在循環(huán)隊列3不為空時,從循環(huán)隊列3中獲取消息進行發(fā)送,當(dāng)消息發(fā)送次數(shù)超過配置參數(shù)規(guī)定的次數(shù)時,更新消息發(fā)送失敗至服務(wù)器,否則就是重新發(fā)送消息,直至消息發(fā)送次數(shù)超過配置參數(shù)規(guī)定的次數(shù)。
優(yōu)選地,在上述將未發(fā)送成功的消息存儲至第三消息循環(huán)隊列中之前,若第三消息循環(huán)隊列中的未發(fā)送成功的消息的數(shù)量超過第三閾值,則通知服務(wù)器待發(fā)送的消息未發(fā)送成功,并在設(shè)定時間之后從服務(wù)器中重新?lián)迫≡撐窗l(fā)送成功的消息至該第一消息循環(huán)隊列,避免由于第三消息循環(huán)隊列滿而引起的消息丟失。
為了能更精確的從服務(wù)器中撈取待發(fā)送的消息,還需要確定上述第一消息循環(huán)隊列、第二消息循環(huán)隊列和第三消息循環(huán)隊列中存儲的消息的總量是否小于第四閾值,若是,則從服務(wù)器中撈取待發(fā)送的消息,否則,說明消息總量過多,無法撈取新的待發(fā)送的消息。在撈取之后,將從服務(wù)器中撈取的待發(fā)送的消息按序存儲至第一消息循環(huán)隊列的尾部。
進一步地,在從服務(wù)器中撈取待發(fā)送的消息時,若干第一消息循環(huán)隊列中存儲的待發(fā)送的消息數(shù)量過滿,也就是說若上述第一消息循環(huán)隊列存儲的待發(fā)送的消息超過第五閾值,則將從服務(wù)器撈取的消息丟棄。該第五閾值依據(jù)經(jīng)驗設(shè)置。
為了更好的解釋本發(fā)明實施例,下面將結(jié)合圖1、圖3、圖4、圖5和圖6來,描述本發(fā)明實施例中消息發(fā)送的具體流程。
圖3示例性的示出了本發(fā)明實施例適用的系統(tǒng)部署的結(jié)構(gòu),消息撈取裝置中的消息撈取線程從服務(wù)器撈取消息存儲到循環(huán)隊列1中,消息處理發(fā)送裝置中的消息處理發(fā)送線程從循環(huán)隊列1中獲取消息,并保存至循環(huán)隊列2中,對該循環(huán)隊列2中的消息進行處理,然后通過Internet發(fā)送至客戶端。如果消息未發(fā)送成功,則保存至循環(huán)隊列3中,消息存儲轉(zhuǎn)發(fā)裝置中的消息存儲轉(zhuǎn)發(fā)線程對循環(huán)隊列3中的消息進行發(fā)送。
具體的,消息撈取裝置所執(zhí)行的流程如圖4所示,該流程具體包括:
步驟401,從配置參數(shù)中獲取撈取消息觸發(fā)值n。
步驟402,判斷服務(wù)是否運行,若是,則轉(zhuǎn)入步驟403,若否,則轉(zhuǎn)入步驟408。
步驟403,判斷三個循環(huán)隊列消息總量是否小于n,若是則轉(zhuǎn)入步驟404,若否,則重新執(zhí)行步驟403。
步驟404,從服務(wù)器中撈取m條消息。
步驟405,判斷m是否大于0,若是,則轉(zhuǎn)入步驟406,若否,則轉(zhuǎn)入步驟409。
步驟406,判斷循環(huán)隊列1是否未滿,若是,則轉(zhuǎn)入步驟407,若否,則轉(zhuǎn)入步驟410。
步驟407,將消息保存至循環(huán)隊列1中。
步驟408,結(jié)束服務(wù)。
步驟409,線程休眠。
步驟410,將消息丟棄。
上述消息撈取裝置主要功能為從服務(wù)器獲取消息數(shù)據(jù)并保存至循環(huán)隊列1中,具體的,消息撈取線程啟動,讀取配置參數(shù),獲得線程睡眠時間片大小,撈取消息觸發(fā)值大小等,然后在主服務(wù)保持運行的情況下,分別獲取3個循環(huán)隊列的剩余消息數(shù),其總量小于撈取消息觸發(fā)值時,觸發(fā)消息撈取動作。從服務(wù)器撈取消息,如果撈取不到消息,則線程睡眠一段時間后重新進入步驟b;如果撈取到消息,則將消息按序插入到循環(huán)隊列1中。在將消息保存到循環(huán)隊列1中時,如果配置的循環(huán)隊列1長度較短或撈取到的通知消息較多導(dǎo)致循環(huán)隊列1被塞滿,則將消息丟棄。由于服務(wù)器中消息狀態(tài)未被設(shè)置為成功或失敗,后續(xù)這些消息依然會被重新?lián)迫?,因此該操作并不會?dǎo)致消息真正丟失。
消息處理發(fā)送裝置所執(zhí)行的流程如圖5所示,該流程具體包括:
步驟501,啟動消息處理發(fā)送線程。
步驟502,判斷服務(wù)是否運行,若是,則轉(zhuǎn)入步驟503,否則,轉(zhuǎn)入步驟511。
步驟503,判斷循環(huán)隊列1是否不為空,若是,則轉(zhuǎn)入步驟504,若否,則轉(zhuǎn)入步驟512。
步驟504,判斷循環(huán)隊列2是否未滿,若是,則轉(zhuǎn)入步驟505,若否,則重新執(zhí)行步驟504。
步驟505,從循環(huán)隊列1中的頭部獲取消息并保存至循環(huán)隊列2的尾部。
步驟506,對最新獲取的消息進行處理。
步驟507,將處理后的消息發(fā)送至客戶端。
步驟508,判斷消息發(fā)送是否未成功,若是,則轉(zhuǎn)入步驟509,若否,則轉(zhuǎn)入步驟513。
步驟509,判斷循環(huán)隊列3中未用長度是否大于15%,若是,則轉(zhuǎn)入步驟510,若否,則轉(zhuǎn)入步驟514。
步驟510,將該條消息存儲至循環(huán)隊列3。
步驟511,結(jié)束。
步驟512,等待被喚醒或等待超時。
步驟513,更新消息投遞狀態(tài)至服務(wù)器。
步驟514,通知服務(wù)器更新該消息時間戳以便后續(xù)撈取。
該消息處理發(fā)送裝置主要功能為從循環(huán)隊列1中獲取消息數(shù)據(jù)并保存至循環(huán)隊列2中,同時對該消息進行處理和發(fā)送,具體的,消息處理發(fā)送線程啟動,讀取配置參數(shù),獲得線程超時等待時間片大小等參數(shù)信息。在主服務(wù)保持運行的情況下,如果循環(huán)隊列1為空,則線程阻塞等待被喚醒或等待超時后繼續(xù)查詢循環(huán)隊列1是否為空,當(dāng)循環(huán)隊列1不為空時,如果循環(huán)隊列2未滿,則將循環(huán)隊列1頭部獲取的消息保存到循環(huán)隊列2中。如果循環(huán)隊列2已滿,則繼續(xù)查詢循環(huán)隊列2是否已滿,對最新獲取的消息進行處理,如內(nèi)部字段數(shù)據(jù)更新、形變等等。將處理后的消息發(fā)送至客戶端,如果發(fā)送成功,則更新消息投遞狀態(tài)至服務(wù)器,后續(xù)該條消息將不再被撈取。如果發(fā)送失敗或超時,此時若循環(huán)隊列3的未用長度不足總長度的10%,則直接通知服務(wù)器,設(shè)定此消息在未來幾分鐘之后被再次撈取,從而避免由于循環(huán)隊列3滿而引起的消息丟失。否則,將該條消息存儲至循環(huán)隊列3。
消息存儲轉(zhuǎn)發(fā)裝置所執(zhí)行的流程如圖6所示,該流程具體包括:
步驟601,從配置參數(shù)中獲取消息發(fā)送嘗試次數(shù)T。
步驟602,判斷服務(wù)是否運行,若是,則轉(zhuǎn)入步驟603,若否,則轉(zhuǎn)入步驟609。
步驟603,判斷循環(huán)隊列3是否不為空,若是,則轉(zhuǎn)入步驟604,若否,則轉(zhuǎn)入步驟610。
步驟604,從循環(huán)隊列3中獲取消息進行處理,并令t=T。
步驟605,判斷t是否大于0,若是,則轉(zhuǎn)入步驟606,若否,則轉(zhuǎn)入步驟611。
步驟606,將處理后的消息發(fā)送至客戶端。
步驟607,判斷消息發(fā)送是否未成功,若是,則轉(zhuǎn)入步驟608,若否,則轉(zhuǎn)入步驟612。
步驟608,令t=t-1。
步驟609,結(jié)束。
步驟610,等待被喚醒或等待超時。
步驟611,更新消息投遞狀態(tài)至服務(wù)器。
步驟612,更新消息投遞狀態(tài)至服務(wù)器。
該消息存儲轉(zhuǎn)發(fā)裝置主要功能為將消息處理發(fā)送裝置投遞失敗或超時的消息進行存儲轉(zhuǎn)發(fā),具體的,消息存儲轉(zhuǎn)發(fā)線程啟動,讀取配置參數(shù),獲得消息重復(fù)發(fā)送次數(shù)等參數(shù)信息。在主服務(wù)保持運行的情況下,如果循環(huán)隊列3為空,則線程阻塞等待被喚醒或等待超時后繼續(xù)查詢循環(huán)隊列3是否為空,當(dāng)循環(huán)隊列3不為空時,從循環(huán)隊列3獲取消息等待發(fā)送。當(dāng)消息發(fā)送次數(shù)超過配置參數(shù)規(guī)定的次數(shù)時,更新消息發(fā)送失敗至服務(wù)器,否則,將獲取的消息進行發(fā)送。重復(fù)這個過程,直至發(fā)送次數(shù)滿更新消息發(fā)送失敗至服務(wù)器,或發(fā)送成功后更新消息發(fā)送成功至服務(wù)器。
本發(fā)明實施例表明,通過確定第二消息循環(huán)隊列存儲的消息的數(shù)量,若所述第二消息循環(huán)隊列存儲的消息的數(shù)量未超過第一閾值,則獲取第一消息循環(huán)隊列存儲的待發(fā)送的消息,并存儲至所述第二消息循環(huán)隊列中,對所述第二消息循環(huán)隊列中的待發(fā)送的消息進行處理,并將處理之后的待發(fā)送的消息發(fā)送至客戶端。通過多個消息循環(huán)隊列分別存儲不同的消息,避免了采用一個隊列緩沖區(qū)頻繁的進行內(nèi)存分配與釋放的問題,從而提高消息發(fā)送效率,降低系統(tǒng)開銷。
基于相同的技術(shù)構(gòu)思,圖7示出了本發(fā)明實施例提供的一種消息發(fā)送裝置的結(jié)構(gòu),該裝置可以執(zhí)行消息發(fā)送方法的流程。
如圖7所示,該裝置具體包括:
確定單元701,用于確定第二消息循環(huán)隊列存儲的消息的數(shù)量;
獲取單元702,用于若所述第二消息循環(huán)隊列存儲的消息的數(shù)量未超過第一閾值,則獲取第一消息循環(huán)隊列存儲的待發(fā)送的消息,并存儲至所述第二消息循環(huán)隊列中;
處理單元703,用于對所述第二消息循環(huán)隊列中的待發(fā)送的消息進行處理,并將處理之后的待發(fā)送的消息發(fā)送至客戶端。
優(yōu)選地,所述處理單元703還用于:
在將處理之后的待發(fā)送的消息發(fā)送至客戶端之后,若所述客戶端反饋所述待發(fā)送的消息未發(fā)送成功,則將所述未發(fā)送成功的消息存儲至第三消息循環(huán)隊列中;
將所述第三消息循環(huán)隊列中的未發(fā)送成功的消息發(fā)送至所述客戶端。
優(yōu)選地,所述處理單元703還用于:
將所述第三消息循環(huán)隊列中的未發(fā)送成功的消息發(fā)送至所述客戶端之后,若所述未發(fā)送成功的消息的發(fā)送次數(shù)大于第二閾值,則通知服務(wù)器所述未發(fā)送成功的消息發(fā)送失敗。
優(yōu)選地,所述處理單元703還用于:
在將所述未發(fā)送成功的消息存儲至第三消息循環(huán)隊列中之前,若所述第三消息循環(huán)隊列中的未發(fā)送成功的消息的數(shù)量超過第三閾值,則通知服務(wù)器所述待發(fā)送的消息未發(fā)送成功,并在設(shè)定時間之后從所述服務(wù)器中重新?lián)迫∷鑫窗l(fā)送成功的消息至所述第一消息循環(huán)隊列。
優(yōu)選地,所述確定單元701,還用于確定所述第一消息循環(huán)隊列、第二消息循環(huán)隊列和第三消息循環(huán)隊列中存儲的消息的總量是否小于第四閾值;
所述獲取單元702,還用于若所述第一消息循環(huán)隊列、第二消息循環(huán)隊列和第三消息循環(huán)隊列中存儲的消息的總量小于第四閾值,則從所述服務(wù)器中撈取待發(fā)送的消息;并將從服務(wù)器中撈取的待發(fā)送的消息按序存儲至所述第一消息循環(huán)隊列的尾部。
優(yōu)選地,所述處理單元703還用于:
若所述客戶端反饋消息發(fā)送成功,則將消息發(fā)送成功的狀態(tài)通知給服務(wù)器,以使所述發(fā)送成功的消息不被撈取。
優(yōu)選地,所述處理單元703還用于:
若所述第一消息循環(huán)隊列存儲的待發(fā)送的消息超過第五閾值,將從所述服務(wù)器撈取的消息丟棄。
本發(fā)明是參照根據(jù)本發(fā)明實施例的方法、設(shè)備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些計算機程序指令也可存儲在能引導(dǎo)計算機或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計算機或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設(shè)備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
盡管已描述了本發(fā)明的優(yōu)選實施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對這些實施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實施例以及落入本發(fā)明范圍的所有變更和修改。
顯然,本領(lǐng)域的技術(shù)人員可以對本發(fā)明進行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。