專利名稱:一種任務判重方法及系統的制作方法
一種任務判重方法及系統
技術領域:
本發明涉及互聯網領域的網站開發技術,尤其涉及一種任務判重方法及系統。背景技術:
目前,網站開發過程中,前端會向中間處理器發送服務請求,中間處理器再將服務請求轉發給后端,在收到服務請求后,后端會直接處理該服務請求,執行相應的操作。如果后端沒有及時向中間處理器返回服務請求的響應,或中間處理器沒有收到響應,例如,由于網絡出現波動或中斷,導致中間服務器沒有成功將服務請求發送到后端,后端沒有收到服務請求就不會返回響應;或服務請求對應的任務執行過程比較復雜,后端執行任務的時間較長,沒有及時返回響應,或后端返回響應時,網絡出現波動或中斷,后端沒有成功返回響應。如果發生上述情況,中間處理器會由于沒有收到后端返回的響應,而認為服務請求沒有提交成功,會重復提交該服務請求給后端;如果后端正在處理之前收到的相·同的服務請求或已經處理完該服務請求,此時又收到同一服務請求,則會重復執行相應的操作,給后端帶來多余的處理負擔,浪費后端的處理資源。而且,針對不同的服務,后端重復執行任務將帶來很多問題,例如,如果重復提交扣除款項的服務請求,后端將重復執行款項的扣除,將給用戶帶來經濟損失;如果重復提交發送消息的服務請求,后端將向用戶重復發送消息,給用戶帶來較差的用戶體驗。
發明內容本發明提供了一種任務判重方法及系統,能夠解決后端重復執行相同任務的問題,節省后端的處理資源。本發明的具體技術方案如下根據本發明一優選實施例,一種任務判重方法,后端在執行中間處理器發送的服務請求中命令標識對應的任務時,記錄任務的執行狀態與服務請求中序列號之間的對應關系;還包括當后端依據中間處理器發送的服務請求中的序列號,判斷出所述服務請求中命令標識對應的任務的執行狀態為執行中或已執行完畢時,拒絕再次執行所述任務。上述方法中,所述序列號是所述中間處理器在接收到前端發送的服務請求后,依據服務請求的接收順序,為收到的服務請求中攜帶的命令標識分配的唯一的序列號。上述方法中,該方法還包括當判斷出所述服務請求中命令標識對應的任務的執行狀態為未執行時,后端依據命令標識,從配置文件中命令標識、模塊名稱、執行的任務的映射關系中找到所述模塊名稱對應的處理模塊;由所述處理模塊依據所述映射關系找到需要執行的任務,并執行找到的任務;當任務執行成功時,后端將任務執行成功的提示信息通過中間處理器返回給前端;當任務執行失敗時,后端將任務執行失敗的提示信息通過中間處理器返回給前端。
上述方法中,如果所述后端記錄的任務的執行狀態與服務請求中序列號之間的對應關系中,不存在所述服務請求中的序列號,則判斷出所述服務請求中命令標識對應的任務的執行狀態為未執行;當所述任務執行失敗時,該方法還包括刪除記錄的該任務的執行狀態與服務請求中序列號之間的對應關系。上述方法中,當判斷出所述服務請求中命令標識對應的任務的執行狀態為執行中時,后端將任務執行錯誤的提示信息返回給中間處理器;當判斷出所述服務請求中命令標識對應的任務的執行狀態為已執行完畢時,后端將任務執行成功的提示信息返回給中間處理器。上述方法中,當前端向中間處理器發送攜帶命令標識的服務請求時,或當中間處理器沒有收到后端返回的響應時,中間處理器向后端發送攜帶命令標識和序列號的服務請求;所述響應包括任務執行失敗的提示信息、任務執行成功的提示信息或任務執行錯誤·的提示信息。一種任務判重系統,包括中間處理器、后端;所述后端進一步包括調度模塊;其中,調度模塊,用于在執行中間處理器發送的服務請求中命令標識對應的任務時,記錄任務的執行狀態與服務請求中序列號之間的對應關系;還用于當依據中間處理器發送的服務請求中的序列號,判斷出所述服務請求中命令標識對應的任務的執行狀態為執行中或已執行完畢時,拒絕再次執行所述任務。上述系統中,所述序列號是所述中間處理器在接收到前端發送的服務請求后,依據服務請求的接收順序,為收到的服務請求中攜帶的命令標識分配的唯一的序列號。上述系統中,所述后端還包括處理模塊;所述調度模塊,還用于當判斷出所述服務請求中命令標識對應的任務的執行狀態為未執行時,依據命令標識,從配置文件中命令標識、模塊名稱、執行的任務的映射關系中找到所述模塊名稱對應的處理模塊;處理模塊,用于依據所述映射關系找到需要執行的任務,并執行找到的任務;當任務執行成功時,將任務執行成功的提示信息返回給調度模塊;當任務執行失敗時,將任務執行失敗的提示信息返回給調度模塊;調度模塊,還用于將任務執行成功的提示信息或任務執行失敗的提示信息,通過中間處理器返回給前端。上述系統中,所述調度模塊,還用于如果所述后端記錄的任務的執行狀態與服務請求中序列號之間的對應關系中,不存在所述服務請求中的序列號,判斷出所述服務請求中命令標識對應的任務的執行狀態為未執行;當所述任務執行失敗時,調度模塊還用于刪除記錄的該任務的執行狀態與服務請求中序列號之間的對應關系。上述系統中,所述調度模塊,還用于當判斷出所述服務請求中命令標識對應的任務的執行狀態為執行中時,將任務執行錯誤的提示信息返回給中間處理器;當判斷出所述服務請求中命令標識對應的任務的執行狀態為已執行完畢時,將任務執行成功的提示信息返回給中間處理器。
上述系統中,所述中間處理器,還用于當前端向自身發送攜帶命令標識的服務請求時,或當自身沒有收到后端返回的響應時,向后端發送攜帶命令標識和序列號的服務請求;所述響應包括任務執行失敗的提示信息、任務執行成功的提示信息或任務執行錯誤的提示信息。由以上技術方案可以看出,本發明提供的具有以下有益效果對于從中間處理器收到的服務請求,后端會進行任務的判重處理,依據判重結果決定是否執行任務;如此,避免后端重復處理服務請求對應的任務,降低后端的處理負擔,節省后端的處理資源。
圖I是本發明實現任務判重系統的優選實施例的結構示意圖; 圖2是本發明實現任務判重方法的優選實施例的流程示意圖。
具體實施方式本發明的基本思想是后端在執行中間處理器發送的服務請求中命令標識對應的任務時,記錄任務的執行狀態與服務請求中序列號之間的對應關系;當后端依據中間處理器發送的服務請求中的序列號,判斷出所述服務請求中命令標識對應的任務的執行狀態為執行中或已執行完畢時,拒絕再次執行所述任務。為了使本發明的目的、技術方案和優點更加清楚,下面結合附圖和具體實施例對本發明進行詳細描述。本發明提供一種任務判重系統,圖I是本發明實現任務判重系統的優選實施例的結構不意圖,如圖I所不,該系統包括如端10、中間處理器20、后端30 ;后端30進一步包括調度模塊301和一個以上處理模塊302 30η,η為大于等于3的正整數。基于上述系統,本發明還提供一種任務判重方法,圖2是本發明實現任務判重方法的優選實施例的流程示意圖,如圖2所示,該優選實施例包括以下步驟步驟201,前端發送攜帶命令標識的服務請求給中間處理器。具體的,前端與后端的開發人員預先協商命令標識key、模塊名稱、執行的任務的映射關系,前端接收前端開發人員輸入的命令標識key,然后將該命令標識key攜帶在服務請求中發送給中間處理器;其中,命令標識key可以為任意的字符串,如abc,也可以利用模塊名稱、執行的任務或模塊名稱+執行的任務來組成命令標識key,后端可以依據命令標識key獲取對應的模塊和執行的任務;例如,命令標識key可以為msg-insertWebBroadcastMsg,其中 msg 為消息,insertffebBroadcastMsg 為執行的任務。步驟202,中間處理器在收到前端發送的服務請求后,依據服務請求的接收順序,為收到的服務請求中攜帶的命令標識分配唯一的序列號,并將分配的序列號和命令標識通過服務請求發送給后端。具體的,中間處理器收到前端發送的服務請求后,從該服務請求中提取出攜帶的命令標識key,然后依據服務請求的接收順序,為服務請求中的命令標識key分配一個唯一的序列號,并將分配的序列號和命令標識key攜帶在服務請求中發送給后端;同時,中間處理器中需要存儲分配的序列號及對應的命令標識key,用于中間處理器在一段時間內沒有收到后端針對該服務請求的響應時,再次將服務請求發送給后端。其中,中間處理器可以依據服務請求的接收順序,為其中的命令標識key分配一個唯一的序列號,例如,收到的第一個服務請求后,為其中的命令標識key分配序列號001,收到的第二個服務請求后,為其中的命令標識key分配序列號002,以此類推;例如,如果命令標識key為msg-insertWebBroadcastMsg,中間處理器發送給后端的服務請求中攜帶命令標識key和序列號,即服務請求中攜帶msg-insertWebBroadcastMsg-001,其中insertffebBroadcastMsg為命令標識key, 001為中間處理器為命令標識key分配的序列號。步驟203,后端在執行中間處理器發送的服務請求中命令標識對應的任務時,記錄任務的執行狀態與服務請求中序列號之間的對應關系;當后端依據中間處理器發送的服務請求中的序列號,判斷出所述服務請求中命令標識對應的任務的執行狀態為執行中或已執行完畢時,拒絕再次執行所述任務。具體的,前端與后端的開發人員協商好命令標識key、模塊名稱、執行的任務的映射關系后,在后端的存儲器中存儲的配置文件中寫入命令標識key、模塊名稱、執行的任務的映射關系,例如,可以在配置文件中寫入如下表示映射關系的字段[· msg-insertffebBroadcastMsg][. . param]webid: intmsgtype: intmagdetaiI: string[· . self]class:Service_RpcPage_Broadcastmethod:insertffebBroadcastMsg其中,上述映射關系中,msg-insertWebBroadcastMsg表不命令標識key, class字段名的賦值Service_RpcPage_Broadcast表示該命令標識key對應的模塊名稱,method字段名的賦值insertWebBroadcastMsg表示該命令標識key對應需要執行的任務。調度模塊在觸發處理模塊執行中間處理器發送的服務請求中命令標識對應的任務時,記錄任務的執行狀態與服務請求中序列號之間的對應關系;如此,后端的調度模塊收到中間處理器發來的服務請求后,從該服務請求中提取出命令標識key和序列號,依據該序列號,讀取后端的存儲器中存儲的任務的執行狀態與序列號之間的對應關系,在該對應關系中,查找該序列號及對應的任務的執行狀態;如果調度模塊在任務的執行狀態與序列號之間的對應關系中,沒有找到收到的服務請求中的序列號,表示該序列號的鎖定狀態是未加鎖,判斷出服務請求中命令標識key對應的任務的執行狀態是未執行,則調度模塊先在對應關系中添加該序列號及對應的任務的執行狀態,然后將該序列號加鎖,將對應的任務的執行狀態設置為正在執行中,并設置該序列號的加鎖計時器,該加鎖計時器到時后,將對應的任務的執行狀態設置為已執行完畢,且序列號解鎖;然后調度模塊需要依據從服務請求中提取的命令標識key,在配置文件中命令標識key、fe;塊名稱、執行的任務的映射關系中,找到對應的|吳塊名稱,然后將提取的命令標識key發送給對應的處理模塊;該處理模塊收到命令標識key后,讀取配置文件,在配置文件中命令標識key、模塊名稱、執行的任務的映射關系中,找到需要執行的任務,并執行該任務;如果任務執行成功,則向調度模塊返回任務執行成功的提示信息,調度模塊將任務執行成功的提示信息返回給中間處理器,中間處理器再轉發給前端,由于加鎖計時器到時后,自動為該命令標識key對應的序列號解鎖,將序列號的鎖定狀態設置為已加鎖且已經執行完畢,所以調度模塊不需要修改序列號與鎖定狀態的映射關系表中該序列號的鎖定狀態;如果處理模塊的任務執行失敗,則處理模塊向調度模塊返回任務執行失敗的提示信息,調度模塊將任務執行失敗的提示信息返回給中間處理器,中間處理器再轉發給前端,同時調度模塊刪除對應關系中該序列號及對應的任務的執行狀態的對應關系項,如此,如果再從中間處理器收到包含該序列號的服務請求,處理模塊可以重新執行對應的任務。如果調度模塊在任務的執行狀態與序列號之間的對應關系中,找到該序列號,且該序列號的鎖定狀態為已加鎖且正在執行中,判斷出攜帶該序列號的服務請求中命令標識key對應的任務已經有處理模塊正在執行中,因此拒絕再次執行該任務,調度模塊將任務執行錯誤的提示信息返回給中間處理器,中間處理器就不會在沒收到后端返回的提示信息時,在發送周期內再次發送同樣的服務請求給后端。如果調度模塊在任務的執行狀態與序列號之間的對應關系中找到該序列號,且該 序列號的鎖定狀態為已加鎖且已經執行完畢,判斷出該序列號的服務請求中命令標識key對應的任務已經由處理模塊執行完畢,且任務執行成功,因此拒絕再次執行該任務,則調度模塊將任務執行成功的提示信息返回給中間處理器,中間處理器將任務執行成功的提示信息返回給前端。在上述方法的過程中,中間處理器如果接收到后端返回的任務執行成功的提示信息、任務執行失敗的提示信息或任務執行錯誤的提示信息并返回給前端后,如果沒有再次接收到攜帶相同命令標識key的服務請求,則不會重復發送攜帶相同命令標識key的服務請求給后端。也就是說,中間處理器只有在設定時間內沒有收到來自后端的響應時才會重復發送攜帶相同命令標識key的服務請求給后端。實際應用中,存在一個任務需要多次執行的情況,此時前端會向中間處理器重復發送攜帶相同命令標識key的服務請求,用來指示后端重復執行同一個任務,利用本發明優選實施例,中間處理器即使從前端先后收到攜帶相同命令標識的服務請求,也會依據接收順序不同為命令標識key分配不同的序列號,后端依據服務請求中的序列號判斷該序列號的鎖定狀態,進一步依據鎖定狀態判斷是否執行相應的任務,而不是依據命令標識key判斷是否執行相應的任務,因此,前端向中間處理器重復發送攜帶相同命令標識key的服務請求后,中間處理器依據接收順序不同為命令標識分配不同的序列號,后端保存的序列號中不會有新收到的序列號,因此即使命令標識key相同,也可以重復執行相應的任務;利用上述技術方案,針對前端重復提交的服務請求,后端會執行相應的處理,針對中間處理器由于沒有收到響應而重復提交的服務請求,后端會進任務的判重,依據判重結果決定是否執行處理;如此,既不影響前端指示后端重復執行同一任務,又可以避免中間處理器重復發送服務請求帶來的重復執行任務,解決后端重復處理服務請求對應的任務的問題,降低后端的處理負擔,節省后端的處理資源;同時能夠減少中間處理器重復發送服務請求的次數,降低中間處理器的處理負擔,節省中間處理器的處理資源;將上述技術方案應用于支付網站等各種業務網站時,能夠避免由于用戶重復提交服務請求,給用戶帶來的經濟損失,提高用戶體驗。
為實現上述方法,如圖I所示的系統調度模塊301,用于在執行中間處理器20發送的服務請求中命令標識對應的任務時,記錄任務的執行狀態與服務請求中序列號之間的對應關系;還用于當依據中間處理器發送的服務請求中的序列號,判斷出所述服務請求中命令標識對應的任務的執行狀態為執行中或已執行完畢時,拒絕再次執行所述任務。其中,所述序列號是所述中間處理器20在接收到前端10發送的服務請求后,依據服務請求的接收順序,為收到的服務請求中攜帶的命令標識分配的唯一的序列號。其中,所述調度模塊301,還用于當判斷出所述服務請求中命令標識對應的任務的執行狀態為未執行時,依據命令標識,從配置文件中命令標識、模塊名稱、執行的任務的映射關系中找到所述模塊名稱對應的處理模塊302 30n ;處理模塊302 30n,用于依據所述映射關系找到需要執行的任務,并執行找到的任務;當任務執行成功時,將任務執行成功的提示信息返回給調度模塊301 ;當任務執行失敗時,將任務執行失敗的提示信息返回給調度模塊301 ;調度模塊301,還用于將任務執行成功的提示信息或任務執行失敗的提示信息,通過中間處理器20返回給前端10。其中,所述調度模塊301,還用于如果所述后端30記錄的任務的執行狀態與服務請求中序列號之間的對應關系中,不存在所述服務請求中的序列號,判斷出所述服務請求中命令標識對應的任務的執行狀態為未執行;當所述任務執行失敗時,調度模塊301還用于刪除記錄的該任務的執行狀態與服務請求中序列號之間的對應關系。其中,所述調度模塊301,還用于當判斷出所述服務請求中命令標識對應的任務的執行狀態為執行中時,將任務執行錯誤的提示信息返回給中間處理器20 ;當判斷出所述服務請求中命令標識對應的任務的執行狀態為已執行完畢時,將任務執行成功的提示信息返回給中間處理器20。其中,所述中間處理器20,還用于當前端10向自身發送攜帶命令標識的服務請求時,或當自身沒有收到后端返回的響應時,向后端30發送攜帶命令標識和序列號的服務請求;所述響應包括任務執行失敗的提示信息、任務執行成功的提示信息或任務執行錯誤的提示信息。以上所述僅為本發明的較佳實施例而已,并不用以限制本發明,凡在本發明的精神和原則之內,所做的任何修改、等同替換、改進等,均應包含在本發明保護的范圍之內。
權利要求
1.一種任務判重方法,其特征在于,后端在執行中間處理器發送的服務請求中命令標識對應的任務時,記錄任務的執行狀態與服務請求中序列號之間的對應關系;該方法還包括當后端依據中間處理器發送的服務請求中的序列號,判斷出所述服務請求中命令標識對應的任務的執行狀態為執行中或已執行完畢時,拒絕再次執行所述任務。
2.根據權利要求I所述的方法,其特征在于,所述序列號是所述中間處理器在接收到前端發送的服務請求后,依據服務請求的接收順序,為收到的服務請求中攜帶的命令標識分配的唯一的序列號。
3.根據權利要求I所述的方法,其特征在于,該方法還包括當判斷出所述服務請求中命令標識對應的任務的執行狀態為未執行時,后端依據命令標識,從配置文件中命令標識、模塊名稱、執行的任務的映射關系中找到所述模塊名稱對應的處理模塊;由所述處理模塊依據所述映射關系找到需要執行的任務,并執行找到的任務;當任務執行成功時,后端將任務執行成功的提示信息通過中間處理器返回給前端;當任務執行失敗時,后端將任務執行失敗的提示信息通過中間處理器返回給前端。
4.根據權利要求3所述的方法,其特征在于,如果所述后端記錄的任務的執行狀態與服務請求中序列號之間的對應關系中,不存在所述服務請求中的序列號,則判斷出所述服務請求中命令標識對應的任務的執行狀態為未執行;當所述任務執行失敗時,該方法還包括刪除記錄的該任務的執行狀態與服務請求中序列號之間的對應關系。
5.根據權利要求I所述的方法,其特征在于,當判斷出所述服務請求中命令標識對應的任務的執行狀態為執行中時,后端將任務執行錯誤的提示信息返回給中間處理器;當判斷出所述服務請求中命令標識對應的任務的執行狀態為已執行完畢時,后端將任務執行成功的提示信息返回給中間處理器。
6.根據權利要求I所述方法,其特征在于,當前端向中間處理器發送攜帶命令標識的服務請求時,或當中間處理器沒有收到后端返回的響應時,中間處理器向后端發送攜帶命令標識和序列號的服務請求;所述響應包括任務執行失敗的提不/[目息、任務執行成功的提不/[目息或任務執行錯誤的提不/[目息。
7.一種任務判重系統,其特征在于,該系統包括中間處理器、后端;所述后端進一步包括調度模塊;其中,調度模塊,用于在執行中間處理器發送的服務請求中命令標識對應的任務時,記錄任務的執行狀態與服務請求中序列號之間的對應關系;還用于當依據中間處理器發送的服務請求中的序列號,判斷出所述服務請求中命令標識對應的任務的執行狀態為執行中或已執行完畢時,拒絕再次執行所述任務。
8.根據權利要求7所述的系統,其特征在于,所述序列號是所述中間處理器在接收到前端發送的服務請求后,依據服務請求的接收順序,為收到的服務請求中攜帶的命令標識分配的唯一的序列號。
9.根據權利要求7所述的系統,其特征在于,所述后端還包括處理模塊;所述調度模塊,還用于當判斷出所述服務請求中命令標識對應的任務的執行狀態為未執行時,依據命令標識,從配置文件中命令標識、模塊名稱、執行的任務的映射關系中找到所述模塊名稱對應的處理模塊; 處理模塊,用于依據所述映射關系找到需要執行的任務,并執行找到的任務;當任務執行成功時,將任務執行成功的提示信息返回給調度模塊;當任務執行失敗時,將任務執行失敗的提示信息返回給調度模塊; 調度模塊,還用于將任務執行成功的提示信息或任務執行失敗的提示信息,通過中間處理器返回給前端。
10.根據權利要求9所述的系統,其特征在于,所述調度模塊,還用于如果所述后端記錄的任務的執行狀態與服務請求中序列號之間的對應關系中,不存在所述服務請求中的序列號,判斷出所述服務請求中命令標識對應的任務的執行狀態為未執行; 當所述任務執行失敗時,調度模塊還用于刪除記錄的該任務的執行狀態與服務請求中序列號之間的對應關系。
11.根據權利要求7所述的系統,其特征在于,所述調度模塊,還用于當判斷出所述服務請求中命令標識對應的任務的執行狀態為執行中時,將任務執行錯誤的提示信息返回給中間處理器;當判斷出所述服務請求中命令標識對應的任務的執行狀態為已執行完畢時,將任務執行成功的提示信息返回給中間處理器。
12.根據權利要求7所述的系統,其特征在于,所述中間處理器,還用于當前端向自身發送攜帶命令標識的服務請求時,或當自身沒有收到后端返回的響應時,向后端發送攜帶命令標識和序列號的服務請求;所述響應包括任務執行失敗的提示信息、任務執行成功的提示信息或任務執行錯誤的提示信息。
全文摘要
本發明提供了一種任務判重方法,包括后端在執行中間處理器發送的服務請求中命令標識對應的任務時,記錄任務的執行狀態與服務請求中序列號之間的對應關系;當后端依據中間處理器發送的服務請求中的序列號,判斷出所述服務請求中命令標識對應的任務的執行狀態為執行中或已執行完畢時,拒絕再次執行所述任務;本發明還提供一種任務判重系統。根據本發明提供的技術方案,能夠解決后端重復執行相同任務的問題,節省后端的處理資源。
文檔編號G06F9/46GK102929698SQ20121037969
公開日2013年2月13日 申請日期2012年9月29日 優先權日2012年9月29日
發明者李鵬, 陳建森, 李哲, 黃彥彬, 廖迪青 申請人:北京百度網訊科技有限公司