本發(fā)明涉及通信領域,尤其涉及一種消息管理方法及裝置、消息預讀方法及裝置。
背景技術:
在云計算中,消息管理是非常重要的一個環(huán)節(jié),它影響著整個云計算系統(tǒng)的性能。這里首先說明一下與消息有關的術語:
消息隊列先進先出:先進入隊列的消息優(yōu)先被消費。
消息可靠性:消息進入消息隊列后被持久化到磁盤,保證消息不會因掉電丟失。
至少消費一次:消息只有在消費成功后才會被用戶主動刪除,否則可以一直被消費。
活躍的消息:可以被消費的消息。
不活躍的消息:正在被用戶消費的消息。
刪除的消息:被用戶主動標志為已消費的消息。
消息的處理過程是,首先,消息生產者(也可稱為客戶端)將生產的消息寫入磁盤;在緩存為空時,觸發(fā)一次預讀操作,將消息從磁盤預讀到緩存中;消息消費者(也可稱為客戶端)從緩存中讀取出消息,進行消費。如果消息消費失敗,則復活消息到磁盤中。
可靠消息系統(tǒng)在服務端持久化消息的讀取狀態(tài),來保證消息“至少消費一次”。同時需要返回當前消息隊列中最先入隊的消息,來保證消息隊列先進先出的特性。每個進入消息隊列的消息都會分配一個消息編號(也即消息id),消息編號按照消息入隊的先后有序。如果消息未能被成功消費,將會再次入隊來確保能夠被再次消費。這樣系統(tǒng)當前的最先入隊的消息是動態(tài)變化的。
一種相關技術中,通過如下方式獲取最先入隊的消息:在消息的元數 據信息中增加兩個屬性,一個屬性用來記錄消息是否已經被成功消費,另一個屬性記錄下一個消息的位置。在消息被發(fā)送到消息系統(tǒng)中時將消息的消費狀態(tài)設置為“未消費”,在用戶消費獲取消息后將消息狀態(tài)設置為“正在消費”,用戶成功消費消息后主動將消息的狀態(tài)設置為“已消費”。服務端記錄當前系統(tǒng)中第一個“未消費”消息的位置。該相關技術為了保證消息的先進先出需要順序消費消息,無法支持并發(fā)消費,限制了消息的處理速度,而且該相關技術中,修改消息的屬性還會導致隨機寫磁盤,嚴重影響系統(tǒng)的性能。
另一種相關技術中,通過如下方式獲取最先入隊的消息:將一個消息隊列分成兩部分,即“未消費的消息隊列”和“正在消費的消息隊列”。消息發(fā)送至系統(tǒng)后進入“未消費的消息隊列”。用戶獲取消息后,消息出“未消費的消息隊列”,進入“正在消費的消息隊列”。消費成功后,用戶主動將消息從“正在消費的消息隊列”中刪除。否則,在超出約定的時間后,系統(tǒng)會把消息從“正在消費的消息隊列”移至“未消費的消息隊列”的隊尾,使消息可以被再次消費,來保證消息至少被消費一次。該相關技術在消息消費失敗的時候,系統(tǒng)需要把該消息再次加入“未消費的消息隊列”的隊尾,會嚴重影響消息先進先出的特性。
技術實現要素:
本發(fā)明的目的在于提供一種消息管理方法及裝置、消息預讀方法及裝置,在保證消息先進先出特性的前提下,提高消息預讀速度,提升系統(tǒng)性能。
為實現上述目的,本發(fā)明提出了一種消息管理方法,包括:
在內存中記錄消息隊列中可消費消息的編號范圍;
根據所述消息隊列中消息的狀態(tài)變化情況調整所述編號范圍和管理消息。
進一步地,上述方法還可具有以下特點,所述編號范圍包括至少一個編號區(qū)間,且任意兩個編號區(qū)間不重疊。
進一步地,上述方法還可具有以下特點,所述編號范圍中的各編號區(qū)間按照區(qū)間右端點消息編號從小到大的順序排列。
進一步地,上述方法還可具有以下特點,所述根據所述消息隊列中消息的狀態(tài)變化情況調整所述編號范圍和管理消息,包括:
在從緩存中取出所述消息隊列中被預讀到所述緩存的消息供客戶端消費之后,縮小所述編號范圍,將所述取出的消息的編號排除在所述編號范圍之外,且在所述消息隊列中將所述取出的消息標記為不可消費消息。
進一步地,上述方法還可具有以下特點,所述根據所述消息隊列中消息的狀態(tài)變化情況調整所述編號范圍和管理消息,包括:
在客戶端超時未返回消費結果的情況下,擴大所述編號范圍,使所述超時未返回消費結果的消息的編號包括在所述編號范圍之內,且在所述消息隊列中將所述超時未返回消費結果的消息標記為可消費消息。
進一步地,上述方法還可具有以下特點,所述根據所述消息隊列中消息的狀態(tài)變化情況調整所述編號范圍和管理消息,包括:
在客戶端成功消費消息的情況下,在所述消息隊列將消費成功的消息刪除。
進一步地,上述方法還可具有以下特點,所述根據所述消息隊列中消息的狀態(tài)變化情況調整所述編號范圍和管理消息,包括:
在從所述消息隊列預讀消息到緩存之后,所述編號范圍中的非最大編號區(qū)間對應的全部可消費消息都已被預讀的情況下,從所述編號范圍中刪除所述非最大編號區(qū)間。
本發(fā)明實施例的消息管理方法,通過編號范圍來管理消息隊列中可消費消息的編號,在保證消息先進先出特性的前提下提高了消息預讀速度,提升了消息系統(tǒng)性能。
為實現上述目的,本發(fā)明還提出了一種消息管理裝置,包括:
記錄模塊,用于在內存中記錄消息隊列中可消費消息的編號范圍;
調整模塊,用于根據所述消息隊列中消息的狀態(tài)變化情況調整所述記錄模塊記錄的所述編號范圍和管理消息。
進一步地,上述裝置還可具有以下特點,所述編號范圍包括至少一個編號區(qū)間,且任意兩個編號區(qū)間不重疊。
進一步地,上述裝置還可具有以下特點,所述編號范圍中的各編號區(qū)間按照區(qū)間右端點消息編號從小到大的順序排列。
進一步地,上述裝置還可具有以下特點,所述調整模塊包括:
縮小單元,用于在從緩存中取出所述消息隊列中被預讀到所述緩存的消息供客戶端消費之后,縮小所述編號范圍,將所述取出的消息的編號排除在所述編號范圍之外,且在所述消息隊列中將所述取出的消息標記為不可消費消息。
進一步地,上述裝置還可具有以下特點,所述調整模塊包括:
擴大單元,用于在客戶端超時未返回消費結果的情況下,擴大所述編號范圍,使所述超時未返回消費結果的消息的編號包括在所述編號范圍之內,且在所述消息隊列中將所述超時未返回消費結果的消息標記為可消費消息。
進一步地,上述裝置還可具有以下特點,所述調整模塊包括:
消息刪除單元,用于在客戶端成功消費消息的情況下,在所述消息隊列將消費成功的消息刪除。
進一步地,上述裝置還可具有以下特點,所述調整模塊包括:
區(qū)間刪除單元,用于在從所述消息隊列預讀消息到緩存之后,所述編號范圍中的非最大編號區(qū)間對應的全部可消費消息都已被預讀的情況下,從所述編號范圍中刪除所述非最大編號區(qū)間。
本發(fā)明實施例的消息管理裝置,通過編號范圍來管理消息隊列中可消費消息的編號,在保證消息先進先出特性的前提下提高了消息預讀速度,提升了消息系統(tǒng)性能。
為實現上述目的,本發(fā)明還提出了一種消息預讀方法,包括:
查詢內存中記錄的消息隊列中可消費消息的編號范圍,確定所述消息隊列中編號最小的n個可消費消息的編號,n為自然數;
根據確定的所述n個可消費消息的編號從所述消息隊列中預讀相應的消息到緩存。
進一步地,上述方法還可具有以下特點,所述編號范圍包括至少一個編號區(qū)間,且任意兩個編號區(qū)間不重疊。
進一步地,上述方法還可具有以下特點,所述編號范圍中的各編號區(qū)間按照區(qū)間右端點消息編號從小到大的順序排列。
本發(fā)明實施例的消息預讀方法,能夠根據內存中按照消息編號的順序 記錄的消息隊列中可消費消息的編號范圍快速查詢到消息隊列中編號最小的設定數目個可消費消息的編號,并且還保證了消息的先進先出特性,提高了消息預讀速度,提升了消息系統(tǒng)性能。
為實現上述目的,本發(fā)明還提出了一種消息預讀裝置,包括:
查詢模塊,用于查詢內存中記錄的消息隊列中可消費消息的編號范圍,確定所述消息隊列中編號最小的n個可消費消息的編號,n為自然數;
預讀模塊,用于根據所述查詢模塊確定的所述n個可消費消息的編號從所述消息隊列中預讀相應的消息到緩存。
進一步地,上述裝置還可具有以下特點,所述編號范圍包括至少一個編號區(qū)間,且任意兩個編號區(qū)間不重疊。
進一步地,上述裝置還可具有以下特點,所述編號范圍中的各編號區(qū)間按照區(qū)間右端點消息編號從小到大的順序排列。
本發(fā)明實施例的消息預讀裝置,能夠根據內存中按照消息編號的順序記錄的消息隊列中可消費消息的編號范圍快速查詢到消息隊列中編號最小的設定數目個可消費消息的編號,并且還保證了消息的先進先出特性,提高了消息預讀速度,提升了消息系統(tǒng)性能。
為實現上述目的,本發(fā)明還提出了一種消息管理設備,包括前述任一項所述的消息管理裝置。
本發(fā)明實施例的消息管理設備中包括消息管理裝置,通過編號范圍來管理消息隊列中可消費消息的編號,在保證消息先進先出特性的前提下提高了消息預讀速度,提升了消息系統(tǒng)性能。
為實現上述目的,本發(fā)明還提出了一種消息預讀設備,包括前述任一項所述的消息預讀裝置。
本發(fā)明實施例的消息預讀設備中包括消息預讀裝置,能夠根據內存中按照消息編號的順序記錄的消息隊列中可消費消息的編號范圍快速查詢到消息隊列中編號最小的設定數目個可消費消息的編號,并且還保證了消息的先進先出特性,提高了消息預讀速度,提升了消息系統(tǒng)性能。
附圖說明
圖1為本發(fā)明實施例中消息的處理過程示意圖。
圖2為本發(fā)明實施例一中消息管理方法的流程圖。
圖3為在復活消息msgid時對消息msgid的前驅游標域進行擴大的示意圖。
圖4為本發(fā)明實施例二中消息管理裝置的結構框圖。
圖5為本發(fā)明實施例三中消息預讀方法的流程圖。
圖6為本發(fā)明實施例四中消息預讀裝置的結構框圖。
圖7為本發(fā)明實施例五中消息管理設備的結構框圖。
圖8為本發(fā)明實施例六中消息預讀設備的結構框圖。
圖9為本發(fā)明實施例七中設備900的結構框圖。
具體實施方式
以下結合附圖對本發(fā)明的原理和特征進行描述,所舉實施例只用于解釋本發(fā)明,并非用于限定本發(fā)明的范圍。對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,根據本發(fā)明精神所獲得的所有實施例,都屬于本發(fā)明的保護范圍。
圖1為本發(fā)明實施例中消息的處理過程示意圖。如圖1所示,本發(fā)明實施例中,消息的處理過程是:
客戶端將生成的消息寫入磁盤,消息進入消息隊列;
緩存為空時,從磁盤批量獲取n個最先進入消息隊列的消息到緩存,此為消息預讀操作;
從緩存讀取消息供客戶端進行消費,并在消息隊列中將被讀取的消息標記為不可消費消息;
客戶端消費完成后,向服務器返回消費結果;
管理模塊根據消費結果處理磁盤中的相應消息:如果消費成功,則刪除消息隊列中的相應消息,如果客戶端超時未返回消息消費成功的信息,則認為消息消費失敗,復活該消息,將消息隊列中的該消息標記為可消費消息。
在整個消息的處理過程中,可以在內存中用游標記錄消息隊列中可消費消息的編號范圍。
圖2為本發(fā)明實施例一中消息管理方法的流程圖。如圖2所示,本實 施例中,消息管理方法可以包括如下步驟:
步驟s201,在內存中記錄消息隊列中可消費消息的編號范圍;
其中,該編號范圍可以包括至少一個編號區(qū)間,且任意兩個編號區(qū)間不重疊。
其中,消息編號代表消息進入消息隊列的順序,消息編號越小,表明該消息進入消息隊列越早。例如,消息10是第10個進入消息隊列的消息。
由于可消費消息的編號范圍是按照消息編號的順序記錄的,因此可以保證消息的先進先出特性??上M消息的編號范圍可以作為查詢要預讀的批量消息的依據。通過可消費消息的編號范圍不僅可以快速查找到要預讀到緩存的批量消息,而且保證了消息的先進先出特性。
在本發(fā)明實施例中,編號范圍中的各編號區(qū)間按照區(qū)間右端點消息編號從小到大的順序排列。本文中,將這樣的編號范圍稱為游標域集合,將這樣的編號范圍中的編號區(qū)間稱為游標域。游標域用左閉右開區(qū)間表示。
本文中,將編號范圍的編號區(qū)間的兩個端點處的消息編號分別稱為左端點消息編號和右端點消息編號。
當然,在本發(fā)明其他實施例中,所述的編號范圍可以采用其他形式表示,只要其能夠表明消息隊列中可消費消息的編號范圍,并且能夠表明這些可消費消息的編號順序即可。這樣,就可以保證通過該編號范圍就能查詢到消息隊列中哪些消息可以消費,并保證這些可消費的消息能夠按照先進先出的特性被取出消費。
以下將消息隊列中可消費消息的編號范圍簡稱為編號范圍。
步驟s202,根據消息隊列中消息的狀態(tài)變化情況調整該編號范圍和管理消息。
在本發(fā)明實施例中,根據消息隊列中消息的狀態(tài)變化情況調整編號范圍和管理消息可以包括:在從緩存中取出消息隊列中被預讀到緩存的消息供客戶端消費之后,縮小編號范圍,將取出的消息的編號排除在該編號范圍之外,且在消息隊列中將該取出的消息標記為不可消費消息。
例如,假設編號范圍的初始狀態(tài)為{[1,101)},消息隊列中被預讀到緩存的消息為消息1至消息10這10個消息,在從緩存中取出這10個消息之后,將編號范圍{[1,101)}縮小為{[11,101)},使得消息1至消息10 這10個消息的編號被排除在了可消費消息的編號范圍之外。
消息消費者從緩存中取出的消息進入到非活躍消息隊列,屬于不活躍的消息,也即正在被用戶消費的消息。如果這些消息被消費成功,那么這些消息就屬于不可消費的消息,將被排除出可消費消息的范圍。這里將所有從緩存中取出的消息都先按照消費成功的情況處理,如果消費失敗,再通過后續(xù)的復活機制加入到可消費消息的范圍中。
在本發(fā)明實施例中,根據消息隊列中消息的狀態(tài)變化情況調整編號范圍和管理消息還可以包括:在客戶端超時未返回消費結果的情況下,擴大編號范圍,使超時未返回消費結果的消息的編號包括在該編號范圍之內,且在消息隊列中將該超時未返回消費結果的消息標記為可消費消息。其中,如果客戶端超時未返回消費結果,可以認為消息消費失敗,因此,將超時未返回消費結果的消息稱為消費失敗的消息。這就是消費失敗的消息的復活機制。通過將消費失敗的消息的編號包括到編號范圍之內,使得可以對該消息進行再次消費,并且可以按照先進先出的特性進行消費。
這里,以游標域集合為例,對因消息消費失敗而擴大可消費消息的編號范圍的情況進行說明。
具體地,在消息隊列中的消息消費失敗的情況下,擴大編號范圍,使消費失敗的消息的編號包括在該編號范圍之內,可以通過如下步驟實現:
消費失敗的消息也就是要復活的消息。
步驟a,假設復活的消息的消息id為msgid,根據msgid,在游標域集合中定位游標域[msgid,msgid+1)的上界游標域,記上界游標域為[upper_beginid,upper_endid),其中,msgid的上界游標域是指游標域集合中第一個右端點消息編號大于msgid+1的游標域;
步驟b,如果該上界游標域[upper_beginid,upper_endid)已經包含msgid,則結束流程,不再調整游標域;
步驟c,如果該上界游標域的左端點消息編號upper_beginid>msgid,則進行后續(xù)操作來調整游標域集合以使游標域集合涵蓋msgid;
步驟d,獲取消息msgid的前驅游標域[pre_beginid,pre_endid),其中,消息msgid的前驅游標域是指游標域集合中第一個右端點消息編號小于msgid+1的游標域;
步驟e,如果消息msgid的前驅游標域不存在,則將[msgid,msgid+1)加入游標域集合,然后結束流程;
步驟f,如果消息msgid的前驅游標域存在,則將游標域[pre_beginid,msgid+1)和游標域[msgid,upper_endid)中范圍較小且不超過max_range_size的游標域加入游標域集合,來替換前驅游標域或者上界游標域(如果兩者中游標域[pre_beginid,msgid+1)范圍較小,就用[pre_beginid,msgid+1)替換前驅游標域[pre_beginid,pre_endid),如果兩者中游標域[msgid,upper_endid)范圍較小,就用[msgid,upper_endid)替換上界游標域[upper_beginid,upper_endid)),其中,max_range_size為預設的游標域的最大范圍;
步驟g,如果消息msgid的前驅游標域存在,且將游標域[pre_beginid,msgid+1)和游標域[msgid,upper_endid)的范圍都超過max_range_size,則將[msgid,msgid+1)加入游標域集合。
需要說明的是,在步驟f中,如果游標域集合的規(guī)模達到上限(該上限即游標域集合的最大規(guī)模,用max_count表示),則不能再添加新的游標域,而是選擇上界游標域或者前驅游標域進行擴大。特別的,如果上界游標域是最大游標域,則只能對其前驅游標域進行擴大。即在msgid-pre_beginid<upper_endid-msgid,并且msgid-pre_beginid<max_range_size的情況下,將前驅游標域擴大為[pre_beginid,msgid+1),如圖3所示。圖3為在復活消息msgid時對消息msgid的前驅游標域進行擴大的示意圖,圖3中,pb表示pre_beginid,pe表示pre_endid,ub表示upper_beginid,ue表示upper_endid。其中,max_count表示游標域集合中最多可以包含的游標域的總數目。
在步驟f中,如果游標域[pre_beginid,msgid+1)和游標域[msgid,upper_endid)的范圍相同且都不超過max_range_size,可以隨機選擇游標域[pre_beginid,msgid+1)來替換前驅游標域或者選擇[msgid,upper_endid)來替換上界游標域,也可以默認選擇游標域[pre_beginid,msgid+1)來替換前驅游標域。
這里舉例說明。以下例1至例4假設max_range_size為100,max_count為10。
例1、假設當前游標域集合為{[5,101)},復活的消息編號為6。消息6存在上界游標域[5,101),并且消息6包含在上界游標域[5,101)中,此時不再調整游標域集合,則消息6復活后,游標域集合仍然為{[5,101)}。
例2、假設當前游標域集合為{[11,101)},復活的消息編號為6。消息6存在上界游標域[11,101)且上界游標域[11,101)的左端點消息編號11大于6,不存在前驅游標域,此時將游標域[6,7)添加到游標域集合中,則消息6復活后,游標域集合為{[6,7),[11,101)}。
例3、假設當前游標域集合為{[3,6),[11,101)},復活的消息編號為6。消息6存在上界游標域[11,101)和前驅游標域[3,6)。游標域[3,7)和游標域[6,101)中范圍較小且不超過max_range_size的游標域為[3,7),此時將游標域[3,7)添加到游標域集合替換游標域[3,6),則消息6復活后,游標域集合為{[3,7),[11,101)}。
例4、假設當前游標域集合為{[1,101),[106,206)},復活的消息編號為103。消息103存在上界游標域[106,206)和前驅游標域[1,101)。但游標域[1,104)和游標域[103,206)的范圍都超過了max_range_size(上述假設max_range_size為100),此時將游標域[3,7)添加到游標域集合,則消息103復活后,游標域集合為{[1,101),[103,104),[106,206)}。
也就是說,在消息隊列中的消息消費失敗的情況下,擴大編號范圍,使消費失敗的消息的編號包括在該編號范圍之內,可以包括下面四種情況之一:
一,假設復活的消息編號為msgid,在當前游標域集合中存在消息msgid的上界游標域,且msgid包含在所述上界游標域的情況下,維持當前游標域集合不變。
二,假設復活的消息編號為msgid,在當前游標域集合中存在消息msgid的上界游標域、不存在消息msgid的前驅游標域,且所述上界游標域的開頭消息編號大于msgid的情況下,將游標域[msgid,msgid+1)添加到當前游標域集合中。
三,假設復活的消息編號為msgid,在當前游標域集合中存在消息msgid的上界游標域[ub,ue)和前驅游標域[pb,pe),擴展前驅游標域 [pb,msgid+1)和擴展上界游標域[msgid,ue)兩者之一或全部小于預設的第二閾值的情況下,選擇兩者之中范圍小的游標域替換相應的原游標域;在當前游標域集合的規(guī)模達到上限并且上界游標域[ub,ue)是當前游標域集合中最大游標域的情況下,選擇擴展前驅游標域[pb,msgid+1)替換前驅游標域[pb,pe)。
四,假設復活的消息編號為msgid,在當前游標域集合中存在消息msgid的上界游標域[ub,ue)和前驅游標域[pb,pe),擴展前驅游標域[pb,msgid+1)和擴展上界游標域[msgid,ue全部大于預設的第二閾值的情況下,將游標域[msgid,msgid+1)添加到當前游標域集合中。
在本發(fā)明實施例中,根據消息隊列中消息的狀態(tài)變化情況調整編號范圍和管理消息可以包括:在客戶端成功消費消息的情況下,在消息隊列將消費成功的消息刪除。此處的刪除是指將消息從存儲消息隊列的磁盤中刪除,也即從消息隊列中刪除。
在本發(fā)明實施例中,根據消息隊列中消息的狀態(tài)變化情況調整編號范圍和管理消息還可以包括:在從消息隊列預讀消息到緩存之后,該編號范圍中的非最大編號區(qū)間對應的全部可消費消息都已被預讀的情況下,從該編號范圍中刪除該非最大編號區(qū)間。
刪除這樣的非最大編號區(qū)間后,編號范圍中編號區(qū)間的數目減少了,對編號區(qū)間的搜索次數就減少了,因此能夠縮短查詢編號范圍的時間,進一步提高消息的預讀速度。
為了進一步對編號范圍進行管理,可以為編號范圍設置版本號及版本號更新規(guī)則。例如,設置編號范圍的初始版本號為1;每次修改編號范圍,編號范圍的版本號加1;如果修改編號范圍時需要修改編號區(qū)間,則將修改后的編號范圍的版本號作為編號區(qū)間的版本號。在刪除編號區(qū)間時需要保證編號區(qū)間未被修改,即編號區(qū)間的版本號沒有變化,否則不能刪除。
本發(fā)明實施例的消息管理方法,通過編號范圍來管理消息隊列中可消費消息的編號,并且保證了消息的先進先出特性,在需要預讀批量消息到緩存時,可以根據編號范圍快速查詢到消息隊列中編號最小的設定數目個可消費消息的編號,在保證消息先進先出特性的前提下提高了消息預讀速度,提升了消息系統(tǒng)性能。
本發(fā)明還提出了一種消息管理裝置,用以實施上述的消息管理方法。上述消息管理方法實施例中的原理說明,也同樣適用于下面的消息管理裝置各實施例。
圖4為本發(fā)明實施例二中消息管理裝置的結構框圖。如圖4所示,本實施例中,消息管理裝置400可以包括記錄模塊410和調整模塊420。其中,記錄模塊410用于按照消息編號的順序在內存中記錄消息隊列中可消費消息的編號范圍。調整模塊420用于根據消息隊列中消息的狀態(tài)變化情況調整記錄模塊410記錄的編號范圍和管理消息。
其中,編號范圍可以包括至少一個編號區(qū)間,且任意兩個編號區(qū)間不重疊。
由于可消費消息的編號范圍是按照消息編號的順序記錄的,因此可以保證消息的先進先出特性??上M消息的編號范圍可以作為查詢要預讀的批量消息的依據。通過可消費消息的編號范圍不僅可以快速查找到要預讀到緩存的批量消息,而且保證了消息的先進先出特性。
其中,編號范圍中的各編號區(qū)間可以按照區(qū)間右端點消息編號從小到大的順序排列。
在本發(fā)明實施例中,調整模塊420可以包括縮小單元。縮小單元用于在從緩存中取出消息隊列中被預讀到緩存的消息供客戶端消費之后,縮小該編號范圍,將取出的消息的編號排除在該編號范圍之外,且在消息隊列中將所述取出的消息標記為不可消費消息。
在本發(fā)明實施例中,調整模塊420可以包括擴大單元。擴大單元用于在客戶端超時未返回消費結果的情況下,擴大編號范圍,使超時未返回消費結果的消息的編號包括在該編號范圍之內,且在所述消息隊列中將所述超時未返回消費結果的消息標記為可消費消息。
在本發(fā)明實施例中,調整模塊420可以包括消息刪除單元。消息刪除單元用于在客戶端成功消費消息的情況下,在消息隊列將消費成功的消息刪除。
在本發(fā)明實施例中,調整模塊420可以包括區(qū)間刪除單元。刪除單元用于在從消息隊列預讀消息到緩存之后,編號范圍中的非最大編號區(qū)間對應的全部可消費消息都已被預讀的情況下,從編號范圍中刪除該非最大編 號區(qū)間。
本發(fā)明實施例的消息管理裝置,通過編號范圍來管理消息隊列中可消費消息的編號,并且保證了消息的先進先出特性,在需要預讀批量消息到緩存時,可以根據編號范圍快速查詢到消息隊列中編號最小的設定數目個可消費消息的編號,在保證消息先進先出特性的前提下提高了消息預讀速度,提升了消息系統(tǒng)性能。
圖5為本發(fā)明實施例三中消息預讀方法的流程圖。如圖5所示,本實施例中,消息預讀方法可以包括如下步驟:
步驟s501,查詢內存中記錄的消息隊列中可消費消息的編號范圍,確定消息隊列中編號最小的n個可消費消息的編號,n為自然數;
其中,編號范圍可以包括至少一個編號區(qū)間,且任意兩個編號區(qū)間不重疊。
其中,本步驟中的可消費消息的編號范圍與前述消息管理方法中的編號范圍是相同的。
可消費消息的編號范圍可以作為查詢要預讀的批量消息的依據。通過可消費消息的編號范圍不僅可以快速查找到要預讀到緩存的批量消息,而且保證了消息的先進先出特性。
在本發(fā)明實施例中,所述的編號范圍可以包括至少一個編號區(qū)間,該編號范圍中的各編號區(qū)間可以按照區(qū)間右端點消息編號從小到大的順序排列,且該編號范圍中的任意兩個編號區(qū)間不重疊。本文中,將這樣的編號范圍稱為游標域集合,將這樣的編號范圍中的編號區(qū)間稱為游標域。游標域用左閉右開區(qū)間表示。
步驟s502,根據確定的n個可消費消息的編號從消息隊列中預讀相應的消息到緩存。
該n個可消費消息是消息隊列中編號最小的n個可消費消息,保證了消息的先進先出特性。
下面通過兩個具體示例來對本發(fā)明的消息預讀方法作進一步說明。
示例一
假設內存中按照消息編號的順序記錄的消息隊列中可消費消息的編號范圍為{[6,9),[11,101)},該編號范圍內的所有消息都不是標識為已 刪除的消息。則從消息隊列預讀5個可消費消息到緩存的過程是:查詢編號范圍{[6,9),[11,101)},確定編號最小的5個可消費消息的編號為6、7、8、11、12;從消息隊列中消息6、消息7、消息8、消息11、消息12到緩存。
這里說明一下,標識為已刪除的消息是已經被消費成功的消息,這樣的消息不屬于可消費消息,但是這些消息的編號可能被包括在可消費消息的編號范圍之內。這就需要在根據編號范圍確定預讀消息編號的時候,將這些標識為已刪除的消息的編號排除掉。此種情況請參見如下的示例二。
示例二
仍然假設內存中按照消息編號的順序記錄的消息隊列中可消費消息的編號范圍為{[6,9),[11,101)},該編號范圍內的消息7是標識為已刪除的消息。則從消息隊列預讀5個可消費消息到緩存的過程是:查詢編號范圍{[6,9),[11,101)},確定編號最小的5個可消費消息的編號為6、8、11、12、13(由于消息7是標識為已刪除的消息,編號7被排除掉了);從消息隊列中消息6、消息8、消息11、消息12、消息13到緩存。
本發(fā)明實施例的消息預讀方法,能夠根據內存中記錄的消息隊列中可消費消息的編號范圍快速查詢到消息隊列中編號最小的設定數目個可消費消息的編號,并且還保證了消息的先進先出特性,提高了消息預讀速度,提升了消息系統(tǒng)性能。
本發(fā)明還提出了一種消息預讀裝置,用以實施上述的消息預讀方法。上述消息預讀方法實施例中的原理說明,也同樣適用于下面的消息預讀裝置各實施例。
圖6為本發(fā)明實施例四中消息預讀裝置的結構框圖。如圖6所示,本實施例中,消息預讀裝置600可以包括查詢模塊610和預讀模塊620。其中可,查詢模塊610用于查詢內存中記錄的消息隊列中可消費消息的編號范圍,確定消息隊列中編號最小的n個可消費消息的編號,n為自然數。預讀模塊620用于根據查詢模塊610確定的n個可消費消息的編號從消息隊列中預讀相應的消息到緩存。
其中,可消費消息的編號范圍與前述消息管理方法中的編號范圍是相同的。
其中,編號范圍可以包括至少一個編號區(qū)間,且任意兩個編號區(qū)間不重疊。
由于可消費消息的編號范圍是按照消息編號的順序記錄的,因此可以保證消息的先進先出特性??上M消息的編號范圍可以作為查詢要預讀的批量消息的依據。通過可消費消息的編號范圍不僅可以快速查找到要預讀到緩存的批量消息,而且保證了消息的先進先出特性。
在本發(fā)明實施例中,所述的編號范圍可以包括至少一個編號區(qū)間,該編號范圍中的各編號區(qū)間按照區(qū)間右端點消息編號從小到大的順序排列,且該編號范圍中的任意兩個編號區(qū)間不重疊。本文中,將這樣的編號范圍稱為游標域集合,將這樣的編號范圍中的編號區(qū)間稱為游標域。游標域用左閉右開區(qū)間表示。
本發(fā)明實施例的消息預讀裝置,能夠根據內存中記錄的消息隊列中可消費消息的編號范圍快速查詢到消息隊列中編號最小的設定數目個可消費消息的編號,并且還保證了消息的先進先出特性,提高了消息預讀速度,提升了消息系統(tǒng)性能。
圖7為本發(fā)明實施例五中消息管理設備的結構框圖。如圖7所示,本實施例中,消息管理設備700可以包括消息管理裝置400。該消息管理裝置400可以是前述消息管理裝置實施例中的任意一種消息管理裝置。
其中,消息管理裝置400可以用于按照消息編號的順序在內存中記錄消息隊列中可消費消息的編號范圍,編號范圍包括至少一個編號區(qū)間,且任意兩個編號區(qū)間不重疊;以及,根據消息隊列中消息的狀態(tài)變化情況調整編號范圍和管理消息。
本發(fā)明實施例的消息管理設備,通過編號范圍來管理消息隊列中可消費消息的編號,并且保證了消息的先進先出特性,在需要預讀批量消息到緩存時,可以根據編號范圍快速查詢到消息隊列中編號最小的設定數目個可消費消息的編號,在保證消息先進先出特性的前提下提高了消息預讀速度,提升了消息系統(tǒng)性能。
圖8為本發(fā)明實施例六中消息預讀設備的結構框圖。如圖8所示,本實施例中,消息預讀設備800可以包括消息預讀裝置600。該消息預讀裝置600可以是前述消息預讀裝置實施例中的任意一種消息預讀裝置。
其中,消息預讀裝置600可以用于查詢內存中記錄的消息隊列中可消費消息的編號范圍,確定消息隊列中編號最小的n個可消費消息的編號,n為自然數;根據確定的n個可消費消息的編號從消息隊列中預讀相應的消息到緩存。其中,編號范圍可以包括至少一個編號區(qū)間,且任意兩個編號區(qū)間不重疊。
本發(fā)明實施例的消息預讀設備,能夠根據內存中記錄的消息隊列中可消費消息的編號范圍快速查詢到消息隊列中編號最小的設定數目個可消費消息的編號,并且還保證了消息的先進先出特性,提高了消息預讀速度,提升了消息系統(tǒng)性能。
圖9為本發(fā)明實施例七中設備900的結構框圖。如圖9所示,本實施例中,設備900可以是移動電話,計算機,數字廣播終端,消息收發(fā)設備,游戲控制臺,平板設備,醫(yī)療設備,健身設備,個人數字助理等。
參照圖9,設備900可以包括以下一個或多個組件:處理組件902,存儲器904,電源組件906,多媒體組件908,音頻組件910,輸入/輸出(i/o)的接口912,傳感器組件914,以及通信組件916。
處理組件902通??刂圃O備900的整體操作,諸如與顯示,電話呼叫,數據通信,相機操作和記錄操作相關聯(lián)的操作。處理元件902可以包括一個或多個處理器920來執(zhí)行指令,以完成上述的方法的全部或部分步驟,具體包括:在內存中記錄消息隊列中可消費消息的編號范圍;根據所述消息隊列中消息的狀態(tài)變化情況調整所述編號范圍和管理消息;查詢內存中記錄的消息隊列中可消費消息的編號范圍,確定所述消息隊列中編號最小的n個可消費消息的編號,n為自然數;根據確定的所述n個可消費消息的編號從所述消息隊列中預讀相應的消息到緩存。
此外,處理組件902可以包括一個或多個模塊,便于處理組件902和其他組件之間的交互。例如,處理組件902可以包括多媒體模塊,以方便多媒體組件908和處理組件902之間的交互。
存儲器904被配置為存儲各種類型的數據以支持在設備900的操作。這些數據的示例包括用于在設備900上操作的任何應用程序或方法的指令,聯(lián)系人數據,電話簿數據,消息,圖片,視頻等。存儲器904可以由任何類型的易失性或非易失性存儲設備或者它們的組合實現,如靜態(tài)隨機 存取存儲器(sram),電可擦除可編程只讀存儲器(eeprom),可擦除可編程只讀存儲器(eprom),可編程只讀存儲器(prom),只讀存儲器(rom),磁存儲器,快閃存儲器,磁盤或光盤。
電源組件906為設備900的各種組件提供電力。電源組件906可以包括電源管理系統(tǒng),一個或多個電源,及其他與為設備900生成、管理和分配電力相關聯(lián)的組件。
多媒體組件908包括在所述設備900和用戶之間的提供一個輸出接口的屏幕。在一些實施例中,屏幕可以包括液晶顯示器(lcd)和觸摸面板(tp)。如果屏幕包括觸摸面板,屏幕可以被實現為觸摸屏,以接收來自用戶的輸入信號。觸摸面板包括一個或多個觸摸傳感器以感測觸摸、滑動和觸摸面板上的手勢。所述觸摸傳感器可以不僅感測觸摸或滑動動作的邊界,而且還檢測與所述觸摸或滑動操作相關的持續(xù)時間和壓力。在一些實施例中,多媒體組件908包括一個前置攝像頭和/或后置攝像頭。當設備900處于操作模式,如拍攝模式或視頻模式時,前置攝像頭和/或后置攝像頭可以接收外部的多媒體數據。每個前置攝像頭和后置攝像頭可以是一個固定的光學透鏡系統(tǒng)或具有焦距和光學變焦能力。
音頻組件910被配置為輸出和/或輸入音頻信號。例如,音頻組件910包括一個麥克風(mic),當設備900處于操作模式,如呼叫模式、記錄模式和語音識別模式時,麥克風被配置為接收外部音頻信號。所接收的音頻信號可以被進一步存儲在存儲器904或經由通信組件916發(fā)送。在一些實施例中,音頻組件910還包括一個揚聲器,用于輸出音頻信號。
i/o接口912為處理組件902和外圍接口模塊之間提供接口,上述外圍接口模塊可以是鍵盤,點擊輪,按鈕等。這些按鈕可包括但不限于:主頁按鈕、音量按鈕、啟動按鈕和鎖定按鈕。
傳感器組件914包括一個或多個傳感器,用于為設備900提供各個方面的狀態(tài)評估。例如,傳感器組件914可以檢測到設備900的打開/關閉狀態(tài),組件的相對定位,例如所述組件為設備900的顯示器和小鍵盤,傳感器組件914還可以檢測設備900或設備900一個組件的位置改變,用戶與設備900接觸的存在或不存在,設備900方位或加速/減速和設備900的溫度變化。傳感器組件914可以包括接近傳感器,被配置用來在沒有任何的 物理接觸時檢測附近物體的存在。傳感器組件914還可以包括光傳感器,如cmos或ccd圖像傳感器,用于在成像應用中使用。在一些實施例中,該傳感器組件914還可以包括加速度傳感器,陀螺儀傳感器,磁傳感器,壓力傳感器或溫度傳感器。
通信組件916被配置為便于設備900和其他設備之間有線或無線方式的通信。設備900可以接入基于通信標準的無線網絡,如wifi,2g或3g,或它們的組合。在一個示例性實施例中,通信組件916經由廣播信道接收來自外部廣播管理系統(tǒng)的廣播信號或廣播相關信息。在一個示例性實施例中,所述通信組件916還包括近場通信(nfc)模塊,以促進短程通信。例如,在nfc模塊可基于射頻識別(rfid)技術,紅外數據協(xié)會(irda)技術,超寬帶(uwb)技術,藍牙(bt)技術和其他技術來實現。
在示例性實施例中,設備900可以被一個或多個應用專用集成電路(asic)、數字信號處理器(dsp)、數字信號處理設備(dspd)、可編程邏輯器件(pld)、現場可編程門陣列(fpga)、控制器、微控制器、微處理器或其他電子元件實現,用于執(zhí)行上述方法。
在示例性實施例中,還提供了一種包括指令的非臨時性計算機可讀存儲介質,例如包括指令的存儲器904,上述指令可由設備900的處理器920執(zhí)行以完成上述方法。例如,所述非臨時性計算機可讀存儲介質可以是rom、隨機存取存儲器(ram)、cd-rom、磁帶、軟盤和光數據存儲設備等。
本發(fā)明實施例還提供了一種非臨時性計算機可讀存儲介質,當所述存儲介質中的指令由移動終端的處理器執(zhí)行時,使得移動終端能夠執(zhí)行一種方法,所述方法包括:在內存中記錄消息隊列中可消費消息的編號范圍;根據所述消息隊列中消息的狀態(tài)變化情況調整所述編號范圍;查詢內存中記錄的消息隊列中可消費消息的編號范圍,確定所述消息隊列中編號最小的n個可消費消息的編號,n為自然數;根據確定的所述n個可消費消息的編號從所述消息隊列中預讀相應的消息到緩存。
以上所述僅為本發(fā)明的較佳實施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內。