1.一種消息對列的消費方法,包括:
當(dāng)消費任務(wù)啟動時,獲取所述消費任務(wù)對應(yīng)的消息隊列的最舊數(shù)據(jù)偏移;
將所述消息隊列的最舊數(shù)據(jù)偏移與預(yù)先存儲的該消息隊列的當(dāng)前數(shù)據(jù)偏移進行比較;
當(dāng)所述最舊數(shù)據(jù)偏移小于所述當(dāng)前數(shù)據(jù)偏移時,根據(jù)所述當(dāng)前數(shù)據(jù)偏移讀取該消息隊列中的消息數(shù)據(jù);
每當(dāng)從所述消息隊列中讀取一條消息數(shù)據(jù)后,根據(jù)該條消息數(shù)據(jù)對應(yīng)的偏移地址更新所述預(yù)先存儲的該消息隊列的當(dāng)前數(shù)據(jù)偏移。
2.根據(jù)權(quán)利要求1所述的方法,其中,當(dāng)所述最舊數(shù)據(jù)偏移不小于所述當(dāng)前數(shù)據(jù)偏移時,根據(jù)所述最舊數(shù)據(jù)偏移讀取該消息隊列中的消息數(shù)據(jù)。
3.根據(jù)權(quán)利要求1或2所述的方法,其中,所述消息隊列具有多個消息分區(qū),且所述預(yù)先存儲的該消息隊列的當(dāng)前數(shù)據(jù)偏移包括:該消息隊列的各個消息分區(qū)的當(dāng)前數(shù)據(jù)偏移;
所述獲取所述消息隊列的最舊數(shù)據(jù)偏移具體為:分別獲取所述消息隊列的各個消息分區(qū)的最舊數(shù)據(jù)偏移;
所述將所述消息隊列的最舊數(shù)據(jù)偏移與預(yù)先存儲的該消息隊列的當(dāng)前數(shù)據(jù)偏移進行比較的步驟具體為:分別將所述消息隊列的各個消息分區(qū)的最舊數(shù)據(jù)偏移與預(yù)先存儲的該消息隊列相應(yīng)的消息分區(qū)的當(dāng)前數(shù)據(jù)偏移進行比較;
所述根據(jù)該條消息數(shù)據(jù)對應(yīng)的偏移地址更新所述存儲的該消息隊列的當(dāng)前數(shù)據(jù)偏移的步驟具體為:根據(jù)該條消息數(shù)據(jù)對應(yīng)的偏移地址更新該消息隊列相應(yīng)的消息分區(qū)的當(dāng)前數(shù)據(jù)偏移。
4.根據(jù)權(quán)利要求1-3任一所述的方法,其中,所述根據(jù)該條消息數(shù)據(jù)對應(yīng)的偏移地址更新所述預(yù)先存儲的該消息隊列的當(dāng)前數(shù)據(jù)偏移的步驟具體包括:
創(chuàng)建用于更新當(dāng)前數(shù)據(jù)偏移的事務(wù),該事務(wù)包括:用于寫入該條消息數(shù)據(jù)對應(yīng)的偏移地址的第一操作,以及用于寫入該條消息數(shù)據(jù)的數(shù)據(jù)內(nèi)容的第二操作;
當(dāng)該事務(wù)中包含的第一操作和第二操作都執(zhí)行成功時,向后臺數(shù)據(jù)庫提交該事務(wù);當(dāng)該事務(wù)中包含的第一操作和/或第二操作執(zhí)行失敗時,回滾該事務(wù)。
5.根據(jù)權(quán)利要求1-4任一所述的方法,其中,所述獲取所述消息隊列的最舊數(shù)據(jù)偏移的步驟具體包括:
與用于維護所述消息隊列的隊列服務(wù)器之間建立通信連接,通過所述通信連接獲取所述消息隊列的最舊數(shù)據(jù)偏移。
6.根據(jù)權(quán)利要求1-5任一所述的方法,其中,所述消息隊列為分布式消息隊列。
7.一種消息對列的消費裝置,包括:
獲取模塊,適于當(dāng)消費任務(wù)啟動時,獲取所述消費任務(wù)對應(yīng)的消息隊列的最舊數(shù)據(jù)偏移;
比較模塊,適于將所述消息隊列的最舊數(shù)據(jù)偏移與預(yù)先存儲的該消息隊列的當(dāng)前數(shù)據(jù)偏移進行比較;
讀取模塊,適于當(dāng)所述最舊數(shù)據(jù)偏移小于所述當(dāng)前數(shù)據(jù)偏移時,根據(jù)所述當(dāng)前數(shù)據(jù)偏移讀取該消息隊列中的消息數(shù)據(jù);
更新模塊,適于每當(dāng)從所述消息隊列中讀取一條消息數(shù)據(jù)后,根據(jù)該條消息數(shù)據(jù)對應(yīng)的偏移地址更新所述預(yù)先存儲的該消息隊列的當(dāng)前數(shù)據(jù)偏移。
8.根據(jù)權(quán)利要求7所述的裝置,其中,所述讀取模塊進一步適于:當(dāng)所述最舊數(shù)據(jù)偏移不小于所述當(dāng)前數(shù)據(jù)偏移時,根據(jù)所述最舊數(shù)據(jù)偏移讀取該消息隊列中的消息數(shù)據(jù)。
9.根據(jù)權(quán)利要求7或8所述的裝置,其中,所述消息隊列具有多個消息分區(qū),且所述預(yù)先存儲的該消息隊列的當(dāng)前數(shù)據(jù)偏移包括:該消息隊列的各個消息分區(qū)的當(dāng)前數(shù)據(jù)偏移;
所述獲取模塊具體適于:分別獲取所述消息隊列的各個消息分區(qū)的最舊數(shù)據(jù)偏移;
所述比較模塊具體適于:分別將所述消息隊列的各個消息分區(qū)的最舊數(shù)據(jù)偏移與預(yù)先存儲的該消息隊列相應(yīng)的消息分區(qū)的當(dāng)前數(shù)據(jù)偏移進行比較;
所述更新模塊具體適于:根據(jù)該條消息數(shù)據(jù)對應(yīng)的偏移地址更新該消息隊列相應(yīng)的消息分區(qū)的當(dāng)前數(shù)據(jù)偏移。
10.根據(jù)權(quán)利要求7-9任一所述的裝置,其中,所述更新模塊具體適于:
創(chuàng)建用于更新當(dāng)前數(shù)據(jù)偏移的事務(wù),該事務(wù)包括:用于寫入該條消息數(shù)據(jù)對應(yīng)的偏移地址的第一操作,以及用于寫入該條消息數(shù)據(jù)的數(shù)據(jù)內(nèi)容的第二操作;
當(dāng)該事務(wù)中包含的第一操作和第二操作都執(zhí)行成功時,向后臺數(shù)據(jù)庫提交該事務(wù);當(dāng)該事務(wù)中包含的第一操作和/或第二操作執(zhí)行失敗時,回滾該事務(wù)。