一種異常處理方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,特別是涉及一種異常處理方法和一種異常處理裝 置。
【背景技術(shù)】
[0002] 隨著計(jì)算機(jī)技術(shù)及通信技術(shù)的發(fā)展,越來越多的平臺(tái)或系統(tǒng)會(huì)利用消息平臺(tái)發(fā)送 消息,以達(dá)到增加訪問量或者增強(qiáng)溝通等目的。例如,游戲平臺(tái)利用消息平臺(tái)向游戲用戶發(fā) 送消息,以避免用戶流失;購物網(wǎng)站利用消息平臺(tái)向網(wǎng)站注冊用戶發(fā)送消息,以增加用戶消 費(fèi)額等。
[0003] 但是,以現(xiàn)有的技術(shù),可能會(huì)出現(xiàn)消息平臺(tái)在發(fā)送消息的過程中發(fā)生異常的情況, 如調(diào)用信息發(fā)送接口失敗導(dǎo)致消息發(fā)送失敗,或者消息未能成功發(fā)送至對應(yīng)的消息接收對 象等情況。而且,對于上述的異常情況,目前常用的處理方式是不做處理,則會(huì)降低消息平 臺(tái)發(fā)送消息的有效性,或者是由人工判斷異常情況是否需要重新執(zhí)行,則會(huì)導(dǎo)致操作繁瑣, 且人工判斷的過程也會(huì)浪費(fèi)較多時(shí)間,或者是不經(jīng)過人工判斷直接重復(fù)發(fā)送全部消息,同 樣會(huì)導(dǎo)致耗時(shí)較長。
【發(fā)明內(nèi)容】
[0004] 鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上 述問題的異常處理方法和相應(yīng)的異常處理裝置。
[0005] 依據(jù)本發(fā)明的一個(gè)方面,提供了一種異常處理方法,包括:
[0006] 預(yù)先將待處理任務(wù)的第一狀態(tài)與觸發(fā)所述第一狀態(tài)的執(zhí)行方法進(jìn)行對應(yīng);
[0007] 在待處理任務(wù)被各進(jìn)程執(zhí)行的過程中,根據(jù)各進(jìn)程調(diào)用的執(zhí)行方法與第一狀態(tài)的 對應(yīng)關(guān)系修改待處理任務(wù)的第一狀態(tài),并在相應(yīng)狀態(tài)下記錄所述待處理任務(wù)的處理進(jìn)度;
[0008] 當(dāng)處理一待處理任務(wù)的進(jìn)程出現(xiàn)異常,重啟所述進(jìn)程后,讀取記錄的待處理任務(wù) 的第一狀態(tài)及待處理任務(wù)的處理進(jìn)度;
[0009] 所述進(jìn)程從觸發(fā)所述第一狀態(tài)的執(zhí)行方法開始執(zhí)行,并從所述處理進(jìn)度處開始處 理所述待處理任務(wù)。
[0010] 優(yōu)選地,所述待處理任務(wù)包括發(fā)送任務(wù)和發(fā)送任務(wù)的發(fā)送子任務(wù);所述發(fā)送任務(wù) 包括至少一種信息類型、平臺(tái)標(biāo)識(shí);
[0011] 所述第一狀態(tài)包括待執(zhí)行狀態(tài)、執(zhí)行中狀態(tài)和已完成狀態(tài)。
[0012] 優(yōu)選地,所述在待處理任務(wù)被各進(jìn)程執(zhí)行的過程中,根據(jù)各進(jìn)程調(diào)用的執(zhí)行方法 與第一狀態(tài)的對應(yīng)關(guān)系修改待處理任務(wù)的第一狀態(tài),并在相應(yīng)狀態(tài)下記錄所述待處理任務(wù) 的處理進(jìn)度的步驟包括:
[0013] 接收由客戶端提交的發(fā)送任務(wù)并存入第一任務(wù)隊(duì)列,并將所述發(fā)送任務(wù)的第一狀 態(tài)更新為待執(zhí)行狀態(tài);
[0014] 由第一進(jìn)程從第一任務(wù)隊(duì)列中提取發(fā)送任務(wù),并將所述發(fā)送任務(wù)的第一狀態(tài)更新 為執(zhí)行中狀態(tài);
[0015] 由第一進(jìn)程從根據(jù)所述發(fā)送任務(wù)中的平臺(tái)標(biāo)識(shí),調(diào)用對于平臺(tái)標(biāo)識(shí)的待發(fā)送對象 獲取接口,從相應(yīng)的平臺(tái)中獲取各待發(fā)送對象;
[0016] 由第一進(jìn)程基于從相應(yīng)的平臺(tái)中獲取各待發(fā)送對象,將所述發(fā)送任務(wù)拆分為至少 兩個(gè)發(fā)送子任務(wù),并將所述發(fā)送子任務(wù)放入第二任務(wù)隊(duì)列;其中,在發(fā)送任務(wù)的執(zhí)行中狀態(tài) 下記錄發(fā)送任務(wù)的處理進(jìn)度,并將所述發(fā)送子任務(wù)的第一狀態(tài)更新為待處理狀態(tài);
[0017] 由多個(gè)消費(fèi)進(jìn)程從所述第二任務(wù)隊(duì)列中提取發(fā)送子任務(wù),并將被提取的發(fā)送子任 務(wù)的第一狀態(tài)更新為執(zhí)行中狀態(tài);
[0018] 每個(gè)消費(fèi)進(jìn)程調(diào)用與信息類型相應(yīng)的發(fā)送接口,向各待發(fā)送對象發(fā)送待發(fā)送信 息;其中在發(fā)送子任務(wù)的執(zhí)行中狀態(tài)下記錄發(fā)送子任務(wù)的進(jìn)度;在發(fā)送子任務(wù)的待發(fā)送信 息發(fā)送完畢之后,將發(fā)送子任務(wù)的狀態(tài)更新為已完成狀態(tài),并所述發(fā)送任務(wù)的所有發(fā)送子 任務(wù)全部為已完成狀態(tài)后,將發(fā)送任務(wù)的狀態(tài)更新為已完成狀態(tài)。
[0019] 優(yōu)選地,所述發(fā)送任務(wù)還包括:發(fā)送時(shí)間策略;
[0020] 進(jìn)一步的,所述由第一進(jìn)程從第一任務(wù)隊(duì)列中提取發(fā)送任務(wù)的步驟,包括:
[0021] 由第一進(jìn)程掃描所述第一任務(wù)隊(duì)列,提取發(fā)送時(shí)間策略達(dá)到預(yù)設(shè)條件的發(fā)送任 務(wù)。
[0022] 優(yōu)選地,所述發(fā)送任務(wù)還包括:業(yè)務(wù)標(biāo)識(shí)和/或用戶范圍條件;
[0023] 進(jìn)一步的,在由第一進(jìn)程從根據(jù)所述發(fā)送任務(wù)中的平臺(tái)標(biāo)識(shí),調(diào)用對于平臺(tái)標(biāo)識(shí) 的待發(fā)送對象獲取接口,從相應(yīng)的平臺(tái)中獲取各待發(fā)送對象的步驟之后,還包括:
[0024] 在從相應(yīng)的平臺(tái)中獲取的各待發(fā)送對象中,篩選業(yè)務(wù)標(biāo)識(shí)下的待發(fā)送對象和/或 在所述用戶范圍條件之內(nèi)的待發(fā)送對象。
[0025] 優(yōu)選地,所述第一狀態(tài)還包括停止?fàn)顟B(tài)和/或暫停狀態(tài);
[0026] 進(jìn)一步的,所述在待處理任務(wù)被各進(jìn)程執(zhí)行的過程中,根據(jù)各進(jìn)程調(diào)用的執(zhí)行方 法與第一狀態(tài)的對應(yīng)關(guān)系修改待處理任務(wù)的第一狀態(tài),并在相應(yīng)狀態(tài)下記錄所述待處理任 務(wù)的處理進(jìn)度的步驟,還包括:
[0027]在接收到對發(fā)送任務(wù)的終止指令后,將所述發(fā)送任務(wù)的第一狀態(tài)更新為已停止?fàn)?態(tài);
[0028]和/或,在接收到對發(fā)送任務(wù)的暫停指令后,將所述發(fā)送任務(wù)的第一狀態(tài)更新為暫 停狀態(tài)。
[0029]優(yōu)選地,每個(gè)消費(fèi)進(jìn)程調(diào)用與信息類型相應(yīng)的發(fā)送接口,向各待發(fā)送對象發(fā)送待 發(fā)送信息的步驟時(shí),還包括:
[0030] 判斷所述發(fā)送子任務(wù)所屬的發(fā)送任務(wù)的第一狀態(tài)是否為已停止?fàn)顟B(tài);
[0031] 如果所述發(fā)送子任務(wù)所屬的發(fā)送任務(wù)的第一狀態(tài)為已停止?fàn)顟B(tài),則停止從第二任 務(wù)隊(duì)列中獲取所述發(fā)送任務(wù)的發(fā)送子任務(wù),以獲取其他的發(fā)送任務(wù)的發(fā)送子任務(wù),并將所 述發(fā)送子任務(wù)的第一狀態(tài)更新為已停止?fàn)顟B(tài);
[0032] 和/或,判斷所述發(fā)送子任務(wù)所屬的發(fā)送任務(wù)的第一狀態(tài)是否為已暫停狀態(tài);
[0033] 如果所述發(fā)送子任務(wù)所屬的發(fā)送任務(wù)的第一狀態(tài)為已暫停狀態(tài),則暫停從第二任 務(wù)隊(duì)列中獲取所述發(fā)送任務(wù)的發(fā)送子任務(wù),并將所述發(fā)送子任務(wù)的第一狀態(tài)更新為已暫停 狀態(tài)。
[0034] 優(yōu)選地,所述每個(gè)消費(fèi)進(jìn)程調(diào)用與信息類型相應(yīng)的發(fā)送接口,向各待發(fā)送對象發(fā) 送待發(fā)送信息的步驟,包括:
[0035] 每個(gè)消費(fèi)進(jìn)程在不超過預(yù)定的發(fā)送信息速度下,調(diào)用與信息類型相應(yīng)的發(fā)送接 口,向各待發(fā)送對象發(fā)送待發(fā)送消息;所述發(fā)送信息速度包括在指定時(shí)間周期內(nèi)待發(fā)送信 息的發(fā)送條數(shù)。
[0036] 優(yōu)選地,所述發(fā)送任務(wù)中還包括:個(gè)性化信息模板;
[0037] 進(jìn)一步的,在由第一進(jìn)程從根據(jù)所述發(fā)送任務(wù)中的平臺(tái)標(biāo)識(shí),調(diào)用對于平臺(tái)標(biāo)識(shí) 的待發(fā)送對象獲取接口,從相應(yīng)的平臺(tái)中獲取各待發(fā)送對象的步驟之后,還包括:
[0038] 由第一進(jìn)程針對不同的待發(fā)送對象,依據(jù)預(yù)設(shè)的個(gè)性化信息模版,為每個(gè)待發(fā)送 對象生成個(gè)性化的待發(fā)送信息。
[0039]優(yōu)選地,所述由第一進(jìn)程針對不同的待發(fā)送對象,依據(jù)預(yù)設(shè)的個(gè)性化信息模版,為 每個(gè)待發(fā)送對象生成個(gè)性化的待發(fā)送信息的步驟,包括:
[0040]針對每個(gè)待發(fā)送對象,獲取對應(yīng)各關(guān)鍵字段的數(shù)據(jù);
[0041 ]將各關(guān)鍵字段的數(shù)據(jù)填入所述個(gè)性化信息模版相應(yīng)的關(guān)鍵字段中;
[0042] 為每個(gè)待發(fā)送對象生成個(gè)性化信息。
[0043] 優(yōu)選地,所述將各關(guān)鍵字段的數(shù)據(jù)填入所述個(gè)性化信息模版相應(yīng)的關(guān)鍵字段中的 步驟,包括:
[0044] 將待發(fā)送對象對應(yīng)的用戶稱謂信息,填入所述個(gè)性化信息模版中的稱謂字段;
[0045] 將待發(fā)送對象的個(gè)性化通知信息,寫入所述個(gè)性化信息模版中的個(gè)性化通知字 段。
[0046] 優(yōu)選地,所述信息類型包括:短信、和/或郵件、和/或站內(nèi)信息。
[0047]根據(jù)本發(fā)明的另一方面,提供了一種異常處理裝置,包括:
[0048]關(guān)系對應(yīng)模塊,適于預(yù)先將待處理任務(wù)的第一狀態(tài)與觸發(fā)所述第一狀態(tài)的執(zhí)行方 法進(jìn)行對應(yīng);
[0049] 編輯記錄模塊,適于在待處理任務(wù)被各進(jìn)程執(zhí)行的過程中,根據(jù)各進(jìn)程調(diào)用的執(zhí) 行方法與第一狀態(tài)的對應(yīng)關(guān)系修改待處理任務(wù)的第一狀態(tài),并在相應(yīng)狀態(tài)下記錄所述待處 理任務(wù)的處理進(jìn)度;
[0050] 讀取模塊,適于當(dāng)處理一待處理任務(wù)的進(jìn)程出現(xiàn)異常,重啟所述進(jìn)程后,讀取記錄 的待處理任務(wù)的第一狀態(tài)及待處理任務(wù)的處理進(jìn)度;
[0051 ]再執(zhí)行模塊,適于所述進(jìn)程從觸發(fā)所述第一狀態(tài)的執(zhí)行方法開始執(zhí)行,并從所述 處理進(jìn)度處開始處理所述待處理任務(wù)。
[0052] 優(yōu)選地,所述待處理任務(wù)包括發(fā)送任務(wù)和發(fā)送任務(wù)的發(fā)送子任務(wù);所述發(fā)送任務(wù) 包括至少一種信息類型、平臺(tái)標(biāo)識(shí);
[0053]所述第一狀態(tài)包括待執(zhí)行狀態(tài)、執(zhí)行中狀態(tài)和已完成狀態(tài)。
[0054]優(yōu)選地,所述編輯記錄模塊,包括:
[0055] 發(fā)送任務(wù)獲取子模塊,適于接收由客戶端提交的發(fā)送任務(wù)并存入第一任務(wù)隊(duì)列, 并將所述發(fā)送任務(wù)的第一狀態(tài)更新為待執(zhí)行狀態(tài);
[0056] 發(fā)送任務(wù)提取子模塊,適于由第一進(jìn)程從第一任務(wù)隊(duì)列中提取發(fā)送任務(wù),并將所 述發(fā)送任務(wù)的第一狀態(tài)更新為執(zhí)行中狀態(tài);
[0057] 待發(fā)送對象獲取子模塊,適于由第一進(jìn)程從根據(jù)所述發(fā)送任務(wù)中的平臺(tái)標(biāo)識(shí),調(diào) 用對于平臺(tái)標(biāo)識(shí)的待發(fā)送對象獲取接口,從相應(yīng)的平臺(tái)中獲取各待發(fā)送對象;
[0058] 拆分子模塊,適于由第一進(jìn)程基于從相應(yīng)的平臺(tái)中獲取各待發(fā)送對象,將所述發(fā) 送任務(wù)拆分為至少兩個(gè)發(fā)送子任務(wù),并將所述發(fā)送子任務(wù)放入第二任務(wù)隊(duì)列;其中,在發(fā)送 任務(wù)的執(zhí)行中狀態(tài)下記錄發(fā)送任務(wù)的處理進(jìn)度;
[0059] 發(fā)送子任務(wù)提取子模塊,適于由多個(gè)消費(fèi)進(jìn)程從所述第二任務(wù)隊(duì)列中提取發(fā)送子 任務(wù),并將被提取的發(fā)送子任務(wù)的第一狀態(tài)更新為待執(zhí)行狀態(tài);
[0060] 消息發(fā)送子模塊,適于每個(gè)消費(fèi)進(jìn)程調(diào)用與信息類型相應(yīng)的發(fā)送接口,向各待發(fā) 送對象發(fā)送待發(fā)送信息;其中在發(fā)送子任務(wù)的執(zhí)行中狀態(tài)下記錄發(fā)送子任務(wù)的進(jìn)度;在發(fā) 送子任務(wù)的待發(fā)送信息發(fā)送完畢之后,將發(fā)送子任務(wù)的狀態(tài)更新為已完成狀態(tài),并所述發(fā) 送任務(wù)的所有發(fā)送子任務(wù)全部為已完成狀態(tài)后,將發(fā)送任務(wù)的狀態(tài)更新為已完成狀態(tài)。 [0061 ]優(yōu)選地,所述發(fā)送任務(wù)還包括:發(fā)送時(shí)間策略;
[0062] 進(jìn)一步的,所述發(fā)送任務(wù)提取子模塊,包括:
[0063] 發(fā)送任務(wù)篩選子模塊,適于由第一進(jìn)程掃描所述第一任務(wù)隊(duì)列,提取發(fā)送時(shí)間策 略達(dá)到預(yù)設(shè)條件的發(fā)送任務(wù)。
[0064] 優(yōu)選地,所述發(fā)送任務(wù)還包括:業(yè)務(wù)標(biāo)識(shí)和/或用戶范圍條件;
[0065] 進(jìn)一步的,在待發(fā)送對象獲取子模塊之后,還包括:
[0066] 待發(fā)送對象篩選子模塊,適于在從相應(yīng)的平臺(tái)中獲取的各待發(fā)送對象中,篩選業(yè) 務(wù)標(biāo)識(shí)下的待發(fā)送對象和/或在所述用戶范圍條件之內(nèi)的待發(fā)送對象。
[0067] 優(yōu)選地,所述第一狀態(tài)還包括停止?fàn)顟B(tài)和/或暫停狀態(tài);
[0068]進(jìn)一步的,所述編輯記錄模塊,還包括:
[0069] 已停止?fàn)顟B(tài)更新子模塊,適于在接收到對發(fā)送任務(wù)的終止指令后,將所述發(fā)送任 務(wù)的第一狀態(tài)更新為已停止?fàn)顟B(tài);
[0070] 和/或,已停止?fàn)顟B(tài)更新子模塊,適于在接收到對發(fā)送任務(wù)的暫停指令后,將所述 發(fā)送任務(wù)的第一狀態(tài)更新為暫停狀態(tài)。
[0071 ]優(yōu)選地,消息發(fā)送子模塊,還包括:
[0072]已停止?fàn)顟B(tài)判斷子模塊,適于判斷所述發(fā)送子任務(wù)所屬的發(fā)送任務(wù)的第一狀態(tài)是 否為已停止?fàn)顟B(tài);如果所述發(fā)送子任務(wù)所屬的發(fā)送任務(wù)的第一狀態(tài)為已停止?fàn)顟B(tài),則進(jìn)入 停止獲取子模塊;
[0073]和/或,已暫停狀態(tài)判斷子模塊,適于判斷所述發(fā)送子任務(wù)所屬的發(fā)送任務(wù)的第一 狀態(tài)是否為已暫停狀態(tài);如果所述發(fā)送子任務(wù)所屬的發(fā)送任務(wù)的第一狀態(tài)為已暫停狀態(tài), 則進(jìn)入暫停獲取子模塊;
[0074]停止獲取子模塊,適于停止從第二任務(wù)隊(duì)列中獲取所述發(fā)送任務(wù)的發(fā)送子任務(wù), 以獲取其他的發(fā)送任務(wù)的發(fā)送子任務(wù),并將所述發(fā)送子任務(wù)的第一狀態(tài)更新為已停止?fàn)?態(tài);
[0075] 暫停獲取子模塊,適于暫停從第二任務(wù)隊(duì)列中獲取所述發(fā)送任務(wù)的發(fā)送子任務(wù), 并將所述發(fā)送子任務(wù)的第一狀態(tài)更新為已暫停狀態(tài)。
[0076] 優(yōu)選地,所述消息發(fā)送子任務(wù),包括:
[0077] 限速發(fā)送子模塊,適于每個(gè)消費(fèi)進(jìn)程在不超過預(yù)定的發(fā)送信息速度下,調(diào)用與信 息類型相應(yīng)的發(fā)送接口,向各待發(fā)送對象發(fā)送待發(fā)送消息;所述發(fā)送信息速度包括在指定 時(shí)間周期內(nèi)待發(fā)送信息的發(fā)送條數(shù)。
[0078] 優(yōu)選地,所述發(fā)送任務(wù)中還包括:個(gè)性化信息模板;
[0079] 進(jìn)一步的,在待發(fā)送對象獲取子模塊之后,還包括:
[0080] 個(gè)性化信息生成子模塊,適于由第一進(jìn)程針對不同的待發(fā)送對象,依據(jù)預(yù)設(shè)的個(gè) 性化信息模版,為每個(gè)待發(fā)送對象生成個(gè)性化的待發(fā)送信息。
[0081 ]優(yōu)選地,所述個(gè)性化信息生成子模塊,包括:
[0082]關(guān)鍵字段獲取子模塊,適于針對每個(gè)待發(fā)送對象,獲取對應(yīng)各關(guān)鍵字段的數(shù)據(jù); [0083]關(guān)鍵字段編輯子模塊,適于將各關(guān)鍵字段的數(shù)據(jù)填入所述個(gè)性化信息模版相應(yīng)的 關(guān)鍵字段中;
[0084] 生成子模塊,適于為每個(gè)待發(fā)送對象生成個(gè)性化信息。
[0085] 優(yōu)選地,所述關(guān)鍵字段編輯子模塊,包括: