專利名稱:在分布式消息處理系統(tǒng)中的消息管理設(shè)備和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及消息處理領(lǐng)域,具體涉及一種在分布式消息處理系統(tǒng)中的消息管理設(shè)備和方法。
背景技術(shù):
目前用于消息(如日志)處理的消息系統(tǒng)有很多,比較流行的是分布式消息系統(tǒng)。分布式消息系統(tǒng)的具體形式有很多,如Spread、Kafka等。下面僅以常用的一種分布式消息系統(tǒng)Kafka為例進(jìn)行說明。
Kafka是用于日志處理的分布式消息系統(tǒng),主要針對日志數(shù)據(jù)容量大,但對可靠性要求不是很高的業(yè)務(wù)。這些系統(tǒng)中的日志數(shù)據(jù)主要包括用戶行為,例如,登錄、瀏覽、點(diǎn)擊、分享以及喜歡等,還包括系統(tǒng)運(yùn)行日志,例如,CPU (Central Processing Unit,中央處理器)、內(nèi)存、磁盤、網(wǎng)絡(luò)、系統(tǒng)及進(jìn)程等的運(yùn)行狀態(tài)。圖I為相關(guān)技術(shù)中Kafka系統(tǒng)架構(gòu)示意圖。該Kafka系統(tǒng)包括以下四個角色Producer (消息產(chǎn)生者,簡稱PD) 11、Broker (簡稱BK) 12、Consumer (消息處理者,簡稱CS) 13以及Zooke印er(管理者,簡稱ZK) 14,每個角色都可以是多個。Consumer 13在Kafka系統(tǒng)中負(fù)責(zé)處理消息;Producer 11在Kafka系統(tǒng)中負(fù)責(zé)產(chǎn)生消息;Brokerl2是Kafka系統(tǒng)中用來存放消息的地方,負(fù)責(zé)接收Producer 11發(fā)來的消息,當(dāng)Consumer 13有請求時,將這些消息返回給Consumerl3 ;ZooKeeper 14是一個開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),包含一個簡單的原語集,是Hadoop和Hbase的重要組件,分布式應(yīng)用可以使用它來實(shí)現(xiàn)諸如統(tǒng)一命名服務(wù)、配置管理、分布式鎖服務(wù)、集群管理等功能。Producer 11發(fā)送消息到Broker 12,消息持久化存儲在Brokerl2上,Consumer 13再從Brokerl2取得消息進(jìn)行處理。Zookeeper 14 用來存儲 Producer 11, Consumer 13,與 Brokerl2 的一些狀態(tài)信息。Kafka系統(tǒng)對消息的處理是采用pull (拉)的方式,每次由Consumer 13從Broker12上獲取要處理的消息。成功處理的消息的位置Offset由Consumerl3來保存。在上述消息處理方式中,Consumer 13需要自己對成功處理的消息的位置Offset進(jìn)行管理、保存,Off set—般保存在Consumer 13所屬的消息處理設(shè)備的內(nèi)存或者本地磁盤上,當(dāng)消息處理設(shè)備意外終止或者機(jī)器磁盤壞掉后,之前保存的Offset就丟失了。當(dāng)重新啟動消息處理設(shè)備后,將從最近一次保存的Offset、或者從頭開始消費(fèi),Consumer 13無法緊接上次成功處理的消息的位置繼續(xù)對消息進(jìn)行處理。
發(fā)明內(nèi)容
鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的在分布式消息處理系統(tǒng)中的消息管理設(shè)備和方法。依據(jù)本發(fā)明的一個方面,提供了一種在分布式消息處理系統(tǒng)中的消息管理設(shè)備,該分布式消息處理系統(tǒng)還包括一個或多個消息存儲設(shè)備和一個或多個消息處理設(shè)備,其中每條消息具有相應(yīng)的主題,消息存儲設(shè)備為相應(yīng)主題建立一個或者多個存儲分區(qū),并且根據(jù)消息的主題將消息存儲在相應(yīng)主題的存儲分區(qū)之一中,消息管理設(shè)備包括消息分布狀態(tài)存儲器,被配置為至少存儲每個消息存儲設(shè)備中有關(guān)存儲分區(qū)的信息、以及每個存儲分區(qū)中有關(guān)消息處理設(shè)備當(dāng)前要處理的消息的位置信息;傳輸接口,被配置為接收消息處理設(shè)備發(fā)送的消息處理請求,消息處理請求至少包括所請求處理消息的主題;分區(qū)狀態(tài)查詢器,被配置為在消息分布狀態(tài)存儲器中查詢與消息處理請求中的主題相對應(yīng)的存儲分區(qū)信息,并經(jīng)由傳輸接口將所查詢到的存儲分區(qū)信息發(fā)送給相應(yīng)消息處理設(shè)備;以及消息位置管理器,被配置為處理通過傳輸接口接收的、來自消息處理設(shè)備的消息位置查詢請求,從消息分布狀態(tài)存儲器中獲取與該消息位置查詢請求中的存儲分區(qū)相對應(yīng)的存儲分區(qū)的當(dāng)前要處理消息的位置信息、并經(jīng)由傳輸接口發(fā)送給相應(yīng)消息處理設(shè)備;以及被配置為處理通過傳輸接口接收的、來自消息處理設(shè)備的消息位置更新請求,基于消息位置更新請求中的消息大小,更新消息分布狀態(tài)存儲器中、與消息位置更新請求中的存儲分區(qū)相對應(yīng)的存儲分區(qū)的當(dāng)前要處理消息的位置信息。可選的,消息分布狀態(tài)存儲器中還存儲有消息處理設(shè)備每次所要處理的消息的大小;分區(qū)狀態(tài)查詢器還被配置為在消息分布狀態(tài)存儲器中查詢相應(yīng)消息處理設(shè)備所要處理 的消息的大小,并通過傳輸接口發(fā)送給相應(yīng)消息處理設(shè)備。根據(jù)本發(fā)明的另一個方面,還提供了一種消息管理方法,該方法適于在分布式消息處理系統(tǒng)中的消息管理設(shè)備上執(zhí)行,該分布式消息處理系統(tǒng)還包括一個或多個消息存儲設(shè)備和一個或多個消息處理設(shè)備,其中每條消息具有相應(yīng)的主題,消息存儲設(shè)備為相應(yīng)主題建立一個或者多個存儲分區(qū),并且根據(jù)消息的主題將消息存儲在相應(yīng)主題的存儲分區(qū)之一中,消息管理方法包括接收消息處理設(shè)備發(fā)送的消息處理請求,消息處理請求至少包括所請求處理消息的主題;查詢與消息處理請求中的主題相對應(yīng)的存儲分區(qū)信息,并將所查詢到的存儲分區(qū)信息發(fā)送給相應(yīng)消息處理設(shè)備,其中,消息管理設(shè)備中至少存儲每個消息存儲設(shè)備中有關(guān)存儲分區(qū)的信息、以及每個存儲分區(qū)中有關(guān)消息處理設(shè)備當(dāng)前要處理的消息的位置信息;以及處理來自消息處理設(shè)備的消息位置查詢請求,查詢與該消息位置查詢請求中的存儲分區(qū)相對應(yīng)的存儲分區(qū)的當(dāng)前要處理消息的位置信息、并發(fā)送給相應(yīng)消息處理設(shè)備;以及處理來自消息處理設(shè)備的消息位置更新請求,基于消息位置更新請求中的消息大小,更新與消息位置更新請求中的存儲分區(qū)相對應(yīng)的存儲分區(qū)的當(dāng)前要處理消息的位置信息??蛇x的,上述消息管理方法還包括查詢相應(yīng)消息處理設(shè)備所要處理的消息的大小、并發(fā)送給相應(yīng)消息處理設(shè)備,其中消息管理設(shè)備中還存儲有消息處理設(shè)備每次所要處理的消息的大小。本發(fā)明的技術(shù)方案在消息管理設(shè)備上存儲有每個消息存儲設(shè)備中有關(guān)存儲分區(qū)的信息、以及每個存儲分區(qū)中有關(guān)消息處理設(shè)備當(dāng)前要處理的消息的位置信息,當(dāng)消息處理設(shè)備獲取要處理的消息時,只需從消息管理設(shè)備查詢消息處理設(shè)備處理的主題下的消息在消息存儲設(shè)備上的存儲分區(qū)信息,以及消息處理設(shè)備在相應(yīng)的存儲分區(qū)的當(dāng)前要處理的消息的位置信息,即可發(fā)送請求消息從消息存儲設(shè)備獲取消息進(jìn)行處理,這樣,即使消息處理設(shè)備發(fā)生故障,在消息處理設(shè)備恢復(fù)正常后,仍然可以緊接上次成功處理消息的位置獲取消息進(jìn)行處理,避免了消息的重復(fù)處理或遺漏。上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的具體實(shí)施方式
。
通過閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中圖I示出了一種Kafka系統(tǒng)架構(gòu)示意圖;
圖2示出了根據(jù)本發(fā)明一個實(shí)施例的分布式消息處理系統(tǒng)的示意圖;圖3示出了根據(jù)本發(fā)明一個實(shí)施例的消息存儲設(shè)備內(nèi)部存儲結(jié)構(gòu)的示意圖;圖4示出了根據(jù)本發(fā)明一個實(shí)施例的消息管理方法的流程圖;以及圖5示出了根據(jù)本發(fā)明一個實(shí)施例的消息處理方法的流程圖。
具體實(shí)施例方式下面將參照附圖更詳細(xì)地描述本公開的示例性實(shí)施例。雖然附圖中顯示了本公開的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。圖2示出了根據(jù)本發(fā)明一個實(shí)施例的分布式消息處理系統(tǒng)的示意圖。如圖所示,該分布式消息處理系統(tǒng)包括消息產(chǎn)生設(shè)備100、消息存儲設(shè)備200、消息處理設(shè)備300和消息管理設(shè)備400。消息產(chǎn)生設(shè)備100、消息存儲設(shè)備200和消息處理設(shè)備300分別可以為一個或多個,圖2中僅示例性給出了兩個消息產(chǎn)生設(shè)備100、兩個消息存儲設(shè)備200,以及一個消息處理設(shè)備300和一個消息管理設(shè)備400,本領(lǐng)域技術(shù)人員可以理解,本發(fā)明實(shí)施例對消息產(chǎn)生設(shè)備100、消息存儲設(shè)備200、消息處理設(shè)備300和消息管理設(shè)備400的數(shù)目并沒有限制。消息產(chǎn)生設(shè)備100可以是網(wǎng)絡(luò)設(shè)備、服務(wù)器、計算機(jī)或其它可以產(chǎn)生消息的任何設(shè)備,這里的消息可以是任何種類信息的數(shù)據(jù),如日志數(shù)據(jù)。每條消息具有相應(yīng)的主題,如該主題可以是某種具體的用戶行為,如登錄行為、瀏覽行為、點(diǎn)擊行為、分享行為或者喜歡行為等,又如該主題可以是某種具體的系統(tǒng)運(yùn)行日志,如CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)、系統(tǒng)及進(jìn)程的運(yùn)行狀態(tài)等。例如,在一個實(shí)施例中,消息產(chǎn)生設(shè)備100為網(wǎng)絡(luò)服務(wù)器,在用戶瀏覽該網(wǎng)絡(luò)服務(wù)器的某網(wǎng)絡(luò)頁面時,該網(wǎng)絡(luò)服務(wù)器隨之產(chǎn)生一條主題為瀏覽該網(wǎng)絡(luò)頁面的消息。在消息產(chǎn)生設(shè)備100產(chǎn)生消息后,將產(chǎn)生的消息發(fā)送給消息存儲設(shè)備200。消息產(chǎn)生設(shè)備100向消息存儲設(shè)備200發(fā)送消息時,可以隨機(jī)發(fā)送,也可以根據(jù)用戶指定的回調(diào)函數(shù)進(jìn)行發(fā)送。消息產(chǎn)生設(shè)備100將產(chǎn)生的消息發(fā)送給消息存儲設(shè)備200的一個示例代碼如下$zkCluster = ' Iocalhost:2181;;$msg = array' message content');$topic = ' test';$Producer = new Kafka_Producer($zkCluster);
$Producer- > send (array ($msg), $topic/ );本領(lǐng)域技術(shù)人員可以理解,以上傳遞消息的代碼僅僅是一個示例,任何可以實(shí)現(xiàn)將消息產(chǎn)生設(shè)備100產(chǎn)生的消息發(fā)送到消息存儲設(shè)備200的代碼實(shí)現(xiàn)都在本發(fā)明的保護(hù)范圍內(nèi)。消息存儲設(shè)備200接收到消息產(chǎn)生設(shè)備100發(fā)送的消息后,將接收到的消息進(jìn)行存儲。消息存儲設(shè)備200有多種具體的存儲方式,例如,消息存儲設(shè)備200按照消息的主題進(jìn)行存儲。具體而言,可以為每個消息主題建立一個或多個存儲分區(qū),將接收到的每條消息存儲在相應(yīng)主題的存儲分區(qū)之一中。為了更好的介紹消息存儲設(shè)備200的內(nèi)部存儲結(jié)構(gòu),請同時參看圖3,其為根據(jù)本發(fā)明一個實(shí)施例的消息存儲設(shè)備200內(nèi)部存儲結(jié)構(gòu)的示意圖。在圖3中,示出了第一消息存儲設(shè)備2001、第二消息存儲設(shè)備2002和第三消息存儲設(shè)備2003,以及每個消息存儲設(shè)備內(nèi)部的消息存儲路徑。此外,還示出了與這些消息存儲設(shè)備進(jìn)行信息交互的第一消息產(chǎn) 生設(shè)備1001和第二消息產(chǎn)生設(shè)備1002,以及第一消息處理設(shè)備3001和第二消息處理設(shè)備3002。第一消息產(chǎn)生設(shè)備1001和第二消息產(chǎn)生設(shè)備1002產(chǎn)生的主題為Topicl以及Topic2的消息,會被發(fā)送到可以用來存儲Topicl的消息和Topic2的消息的第一消息存儲設(shè)備2001、第二消息存儲設(shè)備2002和第三消息存儲設(shè)備2003。因?yàn)榉植际较⑻幚硐到y(tǒng)基于消息的主題(Topic)來進(jìn)行消息管理,所以相應(yīng)的,在消息存儲設(shè)備中也是基于Topic來進(jìn)行存儲的。每個Topic的消息可以存儲在一個或多個存儲分區(qū)(Partition)中,當(dāng)存儲在多個存儲分區(qū)時,這些多個存儲分區(qū)可以位于一個消息存儲設(shè)備上,也可以位于多個消息存儲設(shè)備上。在圖3中,主題為Topicl的消息存儲在第一消息存儲設(shè)備2001中Topicl下的存儲分區(qū)parti和存儲分區(qū)part2、第二消息存儲設(shè)備2002中Topicl下的存儲分區(qū)parti和存儲分區(qū)part2,以及第三消息存儲設(shè)備2003中Topicl下的存儲分區(qū)parti。主題為Topic2的消息存儲在第一消息存儲設(shè)備2001中Topic2下的存儲分區(qū)parti、第二消息存儲設(shè)備2002中Topic2下的存儲分區(qū)parti,以及第三消息存儲設(shè)備2003中Topic2下的存儲分區(qū)parti。其中每個存儲分區(qū)具有多條消息,每條消息相對于存儲分區(qū)頭部具有不同的位置。例如,根據(jù)本發(fā)明的一個實(shí)施例,每條消息都具有消息id,消息id由其邏輯位置決定,即從消息id可直接定位到消息的存儲位置,避免id到存儲位置的額外映射。上面通過圖3詳細(xì)介紹了圖2中消息存儲設(shè)備200的一種內(nèi)部存儲結(jié)構(gòu),下面再回到圖2所示的實(shí)施例。消息存儲設(shè)備200在存儲其接收的消息后,可以將每次有關(guān)存儲分區(qū)更新的信息發(fā)送給消息管理設(shè)備400,由消息管理設(shè)備400保存。以上介紹了一個實(shí)施例中的消息產(chǎn)生設(shè)備100和消息存儲設(shè)備200,下面結(jié)合對某個主題下的消息的具體處理過程,繼續(xù)介紹消息處理設(shè)備300和消息管理設(shè)備400。由于消息處理設(shè)備300中的各部件和消息管理設(shè)備400中的各部件信息交互較多,因此下面先概括介紹消息處理設(shè)備300中所包括的各部件,以及消息管理設(shè)備400包括的各部件,然后在具體信息交互過程中對涉及到的各部件再進(jìn)行更詳細(xì)的介紹。消息處理設(shè)備300包括傳輸接口 304、存儲信息獲取器302、消息位置管理器306和消息獲取器308,消息管理設(shè)備400包括傳輸接口 404、消息分布狀態(tài)存儲器402、分區(qū)狀態(tài)查詢器406和消息位置管理器408。當(dāng)消息處理設(shè)備300需要處理某個Topic的消息時,首先通過消息處理設(shè)備300的存儲信息獲取器302生成消息處理請求,該消息處理請求至少包括消息處理設(shè)備300所請求處理消息的主題,然后通過消息處理設(shè)備300的傳輸接口 304將消息處理請求傳送給消息管理設(shè)備400的傳輸接口 404。消息管理設(shè)備400的傳輸接口 404接收到來自消息處理設(shè)備300的消息處理請求后,將該消息處理請求發(fā)送給分區(qū)狀態(tài)查詢器406,然后分區(qū)狀態(tài)查詢器406在消息分布狀態(tài)存儲器402中查詢與該消息處理請求中的主題相對應(yīng)的一個或多個存儲分區(qū)信息。具體而言,由于消息分布狀態(tài)存儲器402中存儲有消息管理設(shè)備400接收的、來自每個消息存儲設(shè)備200的有關(guān)存儲分區(qū)的信息,因此分布狀態(tài)查詢器406可以根據(jù)消息處理請求中指定的消息的主題,從消息分布狀態(tài)存儲器402中查詢該主題下的消息存儲在哪 些或哪個消息存儲設(shè)備200的哪些或哪個存儲分區(qū)上。例如,假定分布狀態(tài)查詢器406查詢到共有5個存儲分區(qū)存儲消息處理請求中指定主題下的消息,每個存儲分區(qū)用bix)ker_id-partition_id 標(biāo)識,分別是bl_pl, bl_p2, b2_pl, b2_p2, b3_pl,則將查詢到的包含該 5個存儲分區(qū)標(biāo)識的存儲分區(qū)信息,通過傳輸接口 404發(fā)送給相應(yīng)的消息處理設(shè)備300的傳輸接口 304。消息處理設(shè)備300的傳輸接口 304接收到來自消息管理設(shè)備400、與消息處理請求中的主題相對應(yīng)的一個或多個存儲分區(qū)信息后,轉(zhuǎn)發(fā)給消息位置管理器306進(jìn)行處理。具體而言,消息位置管理器306從一個或多個存儲分區(qū)信息中依次選擇一個存儲分區(qū)信息,然后從消息管理設(shè)備400中獲取所選擇的存儲分區(qū)信息對應(yīng)的當(dāng)前要處理消息的位置信息。例如,消息位置管理器306包括選擇模塊和消息位置查詢模塊,首先選擇模塊從一個或多個存儲分區(qū)信息中依次選擇一個存儲分區(qū)信息,在選擇存儲分區(qū)信息時,可以是從一個或多個存儲分區(qū)信息中依次隨機(jī)選擇一個存儲分區(qū)信息,也可以是按照消息存儲設(shè)備200的編號及在相應(yīng)的消息存儲設(shè)備200上的存儲分區(qū)的編號依次選擇一個存儲分區(qū)信息。然后消息位置查詢模塊根據(jù)選擇模塊選擇的存儲分區(qū)信息生成相應(yīng)的消息位置查詢請求,消息位置查詢請求中包括選擇模塊所選擇的存儲分區(qū)信息,進(jìn)而通過傳輸接口304將消息位置查詢模塊所生成的消息位置查詢請求發(fā)送給消息管理設(shè)備400的傳輸接口404,以便從消息管理設(shè)備400中獲取該存儲分區(qū)信息對應(yīng)的當(dāng)前要處理的消息的位置信肩、O消息管理設(shè)備400的傳輸接口 404接收到來自消息處理設(shè)備300的消息位置查詢請求后,將該消息位置查詢請求轉(zhuǎn)發(fā)給消息位置管理器408。因?yàn)樵谙⒎植紶顟B(tài)存儲器402中還存儲有每個存儲分區(qū)中有關(guān)消息處理設(shè)備當(dāng)前要處理的消息的位置信息,所以消息位置管理器408接收到消息位置查詢請求后,從消息分布狀態(tài)存儲器402中查詢與該消息位置查詢請求中的存儲分區(qū)相對應(yīng)的存儲分區(qū)的當(dāng)前要處理的消息的位置信息,查詢完畢后將查詢結(jié)果通過傳輸接口 404發(fā)送給相應(yīng)消息處理設(shè)備300的傳輸接口 304。如果消息分布狀態(tài)存儲器402中不存與該消息位置查詢請求中的存儲分區(qū)相對應(yīng)的存儲分區(qū)的當(dāng)前要處理的消息的位置信息,可以由消息位置管理器408將相應(yīng)存儲分區(qū)當(dāng)前要處理的消息的位置信息的初始值設(shè)為0,并發(fā)送給相應(yīng)的消息處理設(shè)備300。另外,也可以由消息位置管理器408將不存在相應(yīng)存儲分區(qū)當(dāng)前要處理的消息的位置信息直接發(fā)送給消息處理設(shè)備300,由消息處理設(shè)備300將相應(yīng)存儲分區(qū)當(dāng)前要處理的消息的位置信息的初始值設(shè)為O。應(yīng)當(dāng)注意的是,在上一個實(shí)施例中,消息處理設(shè)備300的存儲信息獲取器302先向消息管理設(shè)備400發(fā)送消息處理請求,獲得消息管理設(shè)備400返回的結(jié)果后,消息位置管理器306再向消息管理設(shè)備400發(fā)送消息位置查詢請求。在又一個實(shí)施例中,消息處理設(shè)備300的存儲信息獲取器302和消息位置管理器306也可以將消息處理請求和消息位置查詢請求同時發(fā)送給消息管理設(shè)備400。例如,假定消息管理設(shè)備400同時接收到來自消息處理設(shè)備300的消息處理請求和消息位置查詢請求,進(jìn)而分布狀態(tài)查詢器406根據(jù)消息處理請求查詢到共有5個存儲分區(qū)存儲消息處理請求中指定主題下的消息,然后消息位置管理器408根據(jù)分布狀態(tài)查詢器406的查詢結(jié)果以及消息 位置查詢請求,進(jìn)一步查詢這5個存儲分區(qū)當(dāng)前分別要處理的消息的位置信息,最后將這5個存儲分區(qū)當(dāng)前分別要處理的消息的位置信息一并發(fā)送給相應(yīng)的消息處理設(shè)備300。消息處理設(shè)備300的傳輸接口 304在接收到消息管理設(shè)備400返回的、與消息位置查詢請求中的存儲分區(qū)相對應(yīng)的存儲分區(qū)的當(dāng)前要處理的消息的位置信息后,將該位置信息經(jīng)消息位置管理器306轉(zhuǎn)發(fā)給消息獲取器308 ;或者也可由傳輸接口 304將接收到的位置信息直接發(fā)送給消息獲取器308。消息處理設(shè)備300在從消息管理設(shè)備400查詢到所處理主題的消息的存儲分區(qū)信息及在相應(yīng)存儲分區(qū)的當(dāng)前要處理的消息位置信息后,消息獲取器308即可生成消息獲取請求,并通過傳輸接口 304將該消息獲取請求發(fā)送給消息管理器306所選擇的存儲分區(qū)所在的消息存儲設(shè)備200。消息獲取請求中需要指明Topic, Partition, Offset, Fetchsize四個參數(shù),Topic是指要處理什么主題的消息,Partition是指要處理該Topic下哪個存儲分區(qū)的消息,Offset是指從該存儲分區(qū)的哪個位置開始取消息,F(xiàn)etchsize是指從該存儲分區(qū)的Offset處取多少長度的消息。在這四個參數(shù)中,Topic, Partition和Offset參數(shù)已經(jīng)在上面和消息管理設(shè)備400的交互過程中獲得,F(xiàn)etchsize參數(shù)可以由消息獲取器308根據(jù)消息處理設(shè)備300本身的狀況來決定。消息處理設(shè)備300的消息獲取器308將生成的消息獲取請求發(fā)送給相應(yīng)的消息存儲設(shè)備200的一個示例代碼如下SzkCluster = ' Iocalhost:2181;;$topic =' test';$Consumer = new Kafka_Consumer ($zkCluster, $topic);$msg = $ Consumer- > fetchMsg ();本領(lǐng)域技術(shù)人員可以理解,以上傳遞消息獲取請求的代碼僅僅是一個示例,任何可以實(shí)現(xiàn)將消息處理設(shè)備300產(chǎn)生的消息獲取請求發(fā)送到消息存儲設(shè)備200的代碼實(shí)現(xiàn)都在本發(fā)明的保護(hù)范圍內(nèi)。需要說明的是,消息處理設(shè)備300所要處理的消息大小Fetchsize —般是一個固定值,如IM(兆)。Fetchsize可以保存在消息處理設(shè)備300本地,在這種情況下,消息獲取器308在生成消息獲取請求時,只需在消息處理設(shè)備300的本地磁盤中查詢Fetchsize即可。本領(lǐng)域技術(shù)人員可以理解,F(xiàn)etchsize也可保存在消息管理設(shè)備400的消息分布狀態(tài)存儲器402中,這種情況下,可以在分區(qū)狀態(tài)查詢器403從分布狀態(tài)存儲器402查詢信息來處理消息獲取請求時,將Fetchsize與有關(guān)存儲分區(qū)的信息一起獲取并發(fā)送給消息處理設(shè)備300的消息位置管理器306。當(dāng)然,也可由消息處理設(shè)備300的存儲信息獲取器302或消息位置管理器306生成Fetchsize獲取請求,再將Fetchsize獲取請求發(fā)生到消息管理設(shè)備400,進(jìn)而從消息管理設(shè)備400中的消息分布狀態(tài)存儲器402查詢獲取所要處理的消息大小Fetchsize0消息存儲設(shè)備200在接收到消息處理設(shè)備300的消息獲取器308生成的消息獲取請求后,查詢與該消息獲取請求中的Topic和Partition對應(yīng)的存儲分區(qū),并從該存儲分區(qū)從Offset指定的位置開始截取長度為Fetchsize的消息,然后將查詢的消息返回給消息處理設(shè)備300。在又一個實(shí)施例中,消息處理設(shè)備300還包括消息處理器,消息處理器對消息存儲設(shè)備200返回的消息按消息格式進(jìn)行解析,假如解析得到三條消息及其長度分別是msgl, Ienl ;msg2, len2 ;msg3, len3,那么消息處理器依次處理這三條消息。
在又一個實(shí)施例中,消息處理設(shè)備300還包括消息位置更新器。在消息處理器成功處理消息后,消息位置更新器生成消息位置更新請求,并經(jīng)由傳輸接口 304將所生成的消息位置更新請求發(fā)送給消息管理設(shè)備400,消息位置更新請求包括消息處理器最近一次或多次成功處理的消息大小及該消息所在的存儲分區(qū)信息。消息管理設(shè)備400的傳輸接口 404在接收到來自消息處理設(shè)備300的消息位置更新請求后,轉(zhuǎn)發(fā)給消息位置管理器408。消息位置管理器408基于消息位置更新請求中的消息大小,更新消息分布狀態(tài)存儲器402中、與消息位置更新請求中的存儲分區(qū)相對應(yīng)的存儲分區(qū)的當(dāng)前要處理消息的位置信息。在具體實(shí)現(xiàn)當(dāng)前要處理的消息的位置信息offset的更新時,可以有多種方式。例如,消息位置更新器可以在消息處理器每成功處理完一條消息,就生成包含所處理消息大小的消息位置更新請求,如當(dāng)消息處理器成功處理完消息msgl時,消息位置更新器生成包含msgl的大小Ienl的消息位置更新請求,消息管理設(shè)備400的消息位置管理器408將新的位置信息offset+lenl存入到消息分布狀態(tài)存儲器402中的節(jié)點(diǎn)/consumer/offset/bl-pl中。當(dāng)消息處理器成功處理完第二條消息msg2時,消息位置更新器生成包含msg2的大小len2的消息位置更新請求,消息管理設(shè)備400的消息位置管理器408再在新的offset上再加上len2,并更新消息分布狀態(tài)存儲器402中的節(jié)點(diǎn)/consumer/offset/bl-pl 的內(nèi)容。如果對于對安全性要求不高的主題,可以在消息處理器成功處理完多條消息后,再由消息位置更新器生成消息位置更新請求更新消息管理設(shè)備400的消息分布狀態(tài)存儲器402中相應(yīng)存儲分區(qū)的offset。例如,在上面的例子中,也可在消息處理器成功處理完三條消息msgl、msg2、msg3后,消息位置更新器再生成包含三條消息大小Ienl+len2+len3的消息位置更新請求并發(fā)送給消息管理設(shè)備400,消息管理設(shè)備400的消息位置管理器408將新的位置信息offset+lenl+len2+len3存入到消息分布狀態(tài)存儲器402中節(jié)點(diǎn)/consumer/offset/bl-pl中,對offset進(jìn)行更新,這樣可以增加一些效率。通過以上本發(fā)明的多個實(shí)施例可以看出,本發(fā)明實(shí)施例通過將每個存儲分區(qū)中有關(guān)消息處理設(shè)備當(dāng)前要處理的消息的位置信息offset保存在消息管理設(shè)備中,避免了消息處理設(shè)備每次處理消息時需要在本地來計算offset,可以降低消息處理設(shè)備的使用成本,提高其資源的利用效率。進(jìn)一步,因?yàn)樵谙⒐芾碓O(shè)備400上存儲有每個消息存儲設(shè)備200中有關(guān)存儲分區(qū)的信息、以及每個存儲分區(qū)中有關(guān)消息處理設(shè)備300當(dāng)前要處理的消息的位置信息,因此當(dāng)消息處理設(shè)備300獲取要處理的消息時,只需從消息管理設(shè)備400查詢消息處理設(shè)備300處理的主題下的消息在消息存儲設(shè)備200上的存儲分區(qū)信息,以及消息處理設(shè)備300在相應(yīng)的存儲分區(qū)的當(dāng)前要處理的消息的位置信息,即可發(fā)送消息獲取請求從消息存儲設(shè)備200獲取相應(yīng)的消息進(jìn)行處理,這樣,即使消息處理設(shè)備300發(fā)生故障,在消息處理設(shè)備300恢復(fù)正常后,仍然可以緊接上次成功處理消息的位置獲取消息進(jìn)行處理,避免了消息的重復(fù)處理或遺漏。與前述本發(fā)明一個實(shí)施例分布式消息處理系統(tǒng)相對應(yīng),圖4示出了根據(jù)本發(fā)明一個實(shí)施例的適于在分布式消息處理系統(tǒng)中的消息管理設(shè)備上執(zhí)行的消息管理方法的流程圖。該分布式消息處理系統(tǒng)包括一個或多個如圖2實(shí)施例所描述的消息產(chǎn)生設(shè)備100、一個 或多個如圖2實(shí)施例所描述的消息存儲設(shè)備200、一個或多個如圖2實(shí)施例所描述的消息處理設(shè)備300以及如圖2實(shí)施例所描述的消息管理設(shè)備400。該消息管理方法適于在圖2實(shí)施例所描述的消息管理設(shè)備400上執(zhí)行。該消息管理方法始于步驟S410,在步驟S410中,接收消息處理設(shè)備發(fā)送的消息處理請求,該消息處理請求至少包括所請求處理消息的主題。本步驟可以通過前述消息管理設(shè)備400中的傳輸接口 404來執(zhí)行,相關(guān)的技術(shù)實(shí)現(xiàn)可以參考前述消息管理設(shè)備400中的傳輸接口 404在各實(shí)施例中的相關(guān)描述,此處不再贅述。在步驟S410接收到消息處理請求后,步驟S420在消息管理設(shè)備中查詢與消息處理請求中的主題相對應(yīng)的存儲分區(qū)信息,并將所查詢到的存儲分區(qū)信息發(fā)送給相應(yīng)的消息處理設(shè)備。具體而言,由于消息管理設(shè)備中通常存儲有每個消息存儲設(shè)備中有關(guān)存儲分區(qū)的信息、以及每個存儲分區(qū)中有關(guān)消息處理設(shè)備當(dāng)前要處理的消息的位置信息,因此,在本步驟中,可以根據(jù)消息處理請求中指定的消息的主題,從消息管理設(shè)備中查詢該主題下的消息存儲在哪個或哪些消息存儲設(shè)備的哪個或些存儲分區(qū)上。例如,假定查詢到共有5個存儲分區(qū)存儲該主題的消息,每個存儲分區(qū)用broker_id-pa;rtition_id標(biāo)識,分別是bl-pl,bl-p2,b2-pl,b2-p2,b3_pl,則將查詢到的包含這5個存儲分區(qū)標(biāo)識的存儲分區(qū)信息發(fā)送給相應(yīng)的消息處理設(shè)備。當(dāng)消息管理設(shè)備中還存儲有消息處理設(shè)備所要處理的消息的大小時,還可在查詢有關(guān)存儲分區(qū)信息的同時,查詢相應(yīng)消息處理設(shè)備所要處理的消息的大小,一并發(fā)送給相應(yīng)的消息處理設(shè)備。本步驟可以通過前述消息管理設(shè)備400中的分區(qū)狀態(tài)查詢器406來執(zhí)行,相關(guān)的技術(shù)實(shí)現(xiàn)可以參考前述分區(qū)狀態(tài)查詢器406在各實(shí)施例中的相關(guān)描述,此處不再贅述。通過步驟S420,消息處理設(shè)備已經(jīng)獲得了其要處理的主題下的消息的存儲分區(qū)信息,因此后續(xù)消息處理設(shè)備就會根據(jù)選擇的存儲分區(qū)信息生成消息位置查詢請求,并發(fā)送給消息管理設(shè)備。于是,在步驟S430中處理來自消息處理設(shè)備的消息位置查詢請求。例如,在消息管理設(shè)備中查詢與該消息位置查詢請求中的存儲分區(qū)相對應(yīng)的存儲分區(qū)的當(dāng)前要處理消息的位置信息,然后將查詢到的位置信息發(fā)送給相應(yīng)消息處理設(shè)備。在具體實(shí)現(xiàn)本步驟時可以有多種方式,例如,假定消息處理設(shè)備獲取的存儲分區(qū)共有5個,分別是bl-pl,bl-p2,b2-pl,b2-p2,b3-pl,依次輪流從這5個存儲分區(qū)中選擇一個存儲分區(qū)生成消息位置查詢請求,如果當(dāng)前要查詢bl-pl存儲分區(qū)當(dāng)前要處理的消息的位置信息,則生成包含bl-pl存儲分區(qū)的消息位置查詢請求給消息管理設(shè)備,在步驟S430中從消息管理設(shè)備中相應(yīng)的節(jié)點(diǎn)/consumer/offset/bl-pl查詢到bl-pl存儲分區(qū)當(dāng)前要處理的消息的位置信息offset,并發(fā)送給相應(yīng)的消息處理設(shè)備。如果消息管理設(shè)備中不存在該節(jié)點(diǎn),則將bl-pl存儲分區(qū)當(dāng)前要處理的消息的位置信息的初始值設(shè)為0,并發(fā)送給相應(yīng)的消息處理設(shè)備。另外,也可以將不存在該節(jié)點(diǎn)的信息直接發(fā)送給消息處理設(shè)備,由消息處理設(shè)備將b l-pl存儲分區(qū)當(dāng)前要處理的消息位置信息的初始值設(shè)為O。本步驟可以通過前述消息管理設(shè)備400中的消息位置管理器408來執(zhí)行,相關(guān)的技術(shù)實(shí)現(xiàn)可以參考前述消息位置管理器408在各實(shí)施例中的相關(guān)描述,此處不再贅述。通過步驟S430,消息處理設(shè)備已經(jīng)獲得了所選擇的存儲分區(qū)的當(dāng)前要處理的消息的位置信息,因此可以據(jù)此從消息存儲設(shè)備的相應(yīng)存儲分區(qū)獲取相應(yīng)的消息,并對消息進(jìn)行處理。由于消息處理設(shè)備對消息的處理會導(dǎo)致后續(xù)處理消息的位置信息的變化,因此消息處理設(shè)備會向消息管理設(shè)備發(fā)送消息位置更新請求。具體而言,在步驟S440中,處理來自消息處理設(shè)備的消息位置更新請求,基于消息位置更新請求中的消息大小,更新消息管理設(shè)備中、與消息位置更新請求中的存儲分區(qū)相對應(yīng)的存儲分區(qū)的當(dāng)前要處理消息的位置信息。在更新消息管理設(shè)備中相應(yīng)存儲分區(qū)的當(dāng)前要處理的消息位置信息offset時,消息處理設(shè)備可以在每成功處理完一條消息,就發(fā)送消息位置更新請求更新消息管理設(shè)備中相應(yīng)存儲分區(qū)的offset。例如當(dāng)消息處理設(shè)備成功處理完消息msgl時,消息管理設(shè)備根據(jù)消息處理設(shè)備發(fā)送的包含Ienl的消息位置更新請求,將新的位置信息offset+lenl存入到消息管理設(shè)備的相應(yīng)節(jié)點(diǎn)/consumer/offset/bl-pl中;當(dāng)消息處理設(shè)備成功處理完第二條消息msg2時,消息管理設(shè)備根據(jù)消息處理設(shè)備發(fā)送的包含len2的消息位置更新請求,在新的offset上再加上len2,并更新相應(yīng)消息管理設(shè)備中的內(nèi)容。如果對于對安全性要求不高的主題,可以在消息處理設(shè)備成功處理完多條消息后再更新相應(yīng)消息管理設(shè)備中的offset,例如,在上面的例子中,也可以在消息處理設(shè)備成功處理完三條消息后,消息管理設(shè)備根據(jù)消息處理設(shè)備發(fā)送的包含Ienl+len2+len3的消息位置更新請求,將新的位置信息offset+lenl+len2+len3存入到消息管理設(shè)備的相應(yīng)節(jié)點(diǎn)/consumer/offset/bl-pl中,這樣可以增加一些效率。步驟S430可以通過前述消息管理設(shè)備400中的消息位置管理器408來執(zhí)行,相關(guān)的技術(shù)實(shí)現(xiàn)可以參考前述消息位置管理器408在各實(shí)施例中的相關(guān)描述,此處不再贅述。上述實(shí)施例中,由于在消息管理設(shè)備上存儲有每個消息存儲設(shè)備中有關(guān)存儲分區(qū)的信息、以及每個存儲分區(qū)中有關(guān)消息處理設(shè)備當(dāng)前要處理的消息的位置信息,當(dāng)消息處理設(shè)備獲取要處理的消息時,只需從消息管理設(shè)備查詢消息處理設(shè)備處理的主題下的消息在消息存儲設(shè)備上的存儲分區(qū)信息,以及消息處理設(shè)備在相應(yīng)的存儲分區(qū)的當(dāng)前要處理的消息的位置信息,即可發(fā)送消息獲取請求從消息存儲設(shè)備獲取相應(yīng)的消息進(jìn)行處理,這樣,即使消息處理設(shè)備發(fā)生故障,在消息處理設(shè)備恢復(fù)正常后,仍然可以緊接上次成功處理消息的位置獲取消息進(jìn)行處理,避免了消息的重復(fù)處理或遺漏。與前述本發(fā)明一個實(shí)施例分布式消息處理系統(tǒng)相對應(yīng),圖5不出了根據(jù)本發(fā)明一個實(shí)施例的適于在分布式消息處理系統(tǒng)中的消息處理設(shè)備上執(zhí)行的消息處理方法的流程圖。該分布式消息處理系統(tǒng)包括一個或多個如圖2實(shí)施例所描述的消息產(chǎn)生設(shè)備100、一個或多個如圖2實(shí)施例所描述的消息存儲設(shè)備200、一個或多個如圖2實(shí)施例所描述的消息處理設(shè)備300以及如圖2實(shí)施例所描述的消息管理設(shè)備400。該消息處理方法適于在圖2實(shí)施例所描述的消息處理設(shè)備300上執(zhí)行。該消息處理方法始于步驟S510,在步驟S510中,生成消息處理請求,消息處理請求至少包括所請求處理消息的主題。具體而言,消息處理設(shè)備根據(jù)要處理的消息主題生成消息處理請求。本步驟可以通過前述消息處理設(shè)備300中的存儲信息獲取器302來執(zhí)行,相關(guān)的技術(shù)實(shí)現(xiàn)可以參考前述存儲信息獲取器202在各實(shí)施例中的相關(guān)描述,此處不再贅述。進(jìn)而,在步驟S520中,將步驟S510中生成的消息處理請求發(fā)送給消息管理設(shè)備,并接收消息管理設(shè)備發(fā)送的與消息處理請求中的主題相對應(yīng)的一個或者多個存儲分區(qū)信息。在將消息處理請求發(fā)送給消息管理設(shè)備后,消息管理設(shè)備根據(jù)消息處理請求中指定的主題,查詢出與該主題相對應(yīng)的一個或者多個存儲分區(qū)信息,并發(fā)送給相應(yīng)的消息處理設(shè)備。本步驟可以通過前述消息處理設(shè)備300中的傳輸接口 304來執(zhí)行,相關(guān)的技術(shù)實(shí)現(xiàn)可以參考前述消息處理設(shè)備300中的傳輸接口 304在各實(shí)施例中的相關(guān)描述,此處不再贅述。
此后,在步驟S530中,先從步驟S520獲取的一個或者多個存儲分區(qū)信息中選擇一個存儲分區(qū)信息,然后獲取所選擇的存儲分區(qū)信息對應(yīng)的當(dāng)前要處理消息的位置信息。具體而言,可以通過如下方式實(shí)現(xiàn)從步驟S520獲取的一個或者多個存儲分區(qū)信息中依次選擇一個存儲分區(qū)信息(該步驟可以通過前述的選擇模塊來執(zhí)行)。例如,可以是先從一個或者多個存儲分區(qū)信息中依次隨機(jī)選擇一個存儲分區(qū)信息,也可以是按照消息存儲設(shè)備的編號及在相應(yīng)的消息存儲設(shè)備上的存儲分區(qū)的編號依次選擇一個存儲分區(qū)信息;然后根據(jù)所選擇的存儲分區(qū)信息生成消息位置查詢請求并發(fā)送給消息管理設(shè)備,消息位置查詢請求包括所選擇的存儲分區(qū)信息,以從消息管理設(shè)備中獲取與所選擇的存儲分區(qū)信息對應(yīng)的當(dāng)前要處理消息的位置信息(該步驟可用通過前面的消息位置查詢模塊來執(zhí)行)。步驟S530可以通過前述消息處理設(shè)備300中的消息位置管理器306來執(zhí)行,相關(guān)的技術(shù)實(shí)現(xiàn)可以參考前述消息處理設(shè)備300中的消息位置管理器306在各實(shí)施例中的相關(guān)描述,此處不再贅述。然后,在步驟S540中,根據(jù)步驟S520和S530獲得的存儲分區(qū)信息和相應(yīng)的存儲分區(qū)中當(dāng)前要處理的消息的位置信息生成消息獲取請求,該消息獲取請求包括所請求處理消息的主題、所選擇的存儲分區(qū)、該存儲分區(qū)的當(dāng)前要處理消息的位置信息和所要處理的消息大小。本步驟可以通過前述消息處理設(shè)備300中的消息獲取器308來執(zhí)行,相關(guān)的技術(shù)實(shí)現(xiàn)可以參考前述消息處理設(shè)備300中的消息獲取器器308在各實(shí)施例中的相關(guān)描述,此處不再贅述。最后,在步驟S550中,將步驟S540生成的消息獲取請求發(fā)送給對應(yīng)的存儲分區(qū)所在的消息存儲設(shè)備,以及接收該存儲分區(qū)所在的消息存儲設(shè)備返回的對應(yīng)于該消息獲取請求的消息。本步驟可以通過前述消息處理設(shè)備300中的傳輸接口 304來執(zhí)行,相關(guān)的技術(shù)實(shí)現(xiàn)可以參考前述消息處理設(shè)備300中的傳輸接口 304在各實(shí)施例中的相關(guān)描述,此處不再贅述。此外,需要指出的是,在執(zhí)行步驟S520時,也可以將消息處理請求和消息位置查詢請求同時發(fā)送給消息管理設(shè)備。例如,假定消息管理設(shè)備根據(jù)消息處理請求查詢到共有5個存儲分區(qū)存儲某主題下的消息,消息管理設(shè)備還可以根據(jù)查詢到的結(jié)果,進(jìn)一步查詢這5個存儲分區(qū)當(dāng)前分別要處理的消息位置信息,并將這5個存儲分區(qū)當(dāng)前分別要處理的消息位置信息同時應(yīng)步驟S520的請求返回給消息處理設(shè)備。這樣,步驟S530同樣可以依次輪流從這5個存儲分區(qū)選擇一個存儲分區(qū)及相應(yīng)的存儲分區(qū)中當(dāng)前要處理的消息的位置信息。上述消息處理方法還可以包括以下步驟對接收到的對應(yīng)于消息獲取請求的消息進(jìn)行處理。例如,對消息存儲設(shè)備根據(jù)消息獲取請求返回的相應(yīng)的消息按消息格式進(jìn)行解析,假如解析得到三條消息及其長度分別是msgl, Ienl ;msg2, len2 ;msg3, len3,對這三條消息依次進(jìn)行處理。本步驟可以通過前述消息處理設(shè)備300中的消息處理器來執(zhí)行,相關(guān)的技術(shù)實(shí)現(xiàn)可以參考前述消息處理設(shè)備300中的消息處理器在各實(shí)施例中的相關(guān)描述,此處不再贅述。上述消息處理方法還包括以下步驟生成消息位置更新請求并發(fā)送給消息管理設(shè)備,消息位置更新請求包括最近一次或多次成功處理的消息大小及該消息所在的存儲分區(qū)信息。在本步驟中,可以有多種實(shí)現(xiàn)方式,例如,可以在每成功處理完一條消息,就發(fā)送包含所處理消息大小的消息位置更新請求給消息管理設(shè)備,消息管理設(shè)備更新相應(yīng)存儲分區(qū)的當(dāng)前要處理的消息位置信息offset。例如當(dāng)成功處理完消息msgl時,生成包含msgl 的大小Ienl的消息位置更新請求,并發(fā)送給消息管理設(shè)備,消息管理設(shè)備將新的位置信息offset+lenl存入到相應(yīng)節(jié)點(diǎn)/consumer/offset/bl-pl中;當(dāng)成功處理完第二條消息msg2時,生成包含msg2的大小len2的消息位置更新請求,并發(fā)送給消息管理設(shè)備,消息管理設(shè)備再在新的offset上再加上len2,并更新相應(yīng)節(jié)點(diǎn)/consumer/offset/b I-pi的內(nèi)容。在另一種實(shí)現(xiàn)方式中,如果對于對安全性要求不高的主題,可以在成功處理完多條消息后,再生成消息位置更新請求更新消息管理設(shè)備中相應(yīng)存儲分區(qū)的offset,例如,在上面的例子中,也可在成功處理完三條消息mSgl、mSg2、mSg3后,再生成包含三條消息大小Ienl+len2+len3的消息位置更新請求并發(fā)送給消息管理設(shè)備,消息管理設(shè)備將新的位置信息 offset+lenl+len2+len3 存入到相應(yīng)節(jié)點(diǎn) /consumer/offset/bl-pl 中,對 offset 進(jìn)行更新,這樣可以增加一些效率。本步驟可通過前述消息處理設(shè)備300中的消息位置更新器來執(zhí)行,相關(guān)的技術(shù)實(shí)現(xiàn)可以參考前述消息處理設(shè)備300中的消息位置更新器在各實(shí)施例中的相關(guān)描述,此處不再贅述。上述實(shí)施例中,由于消息管理設(shè)備上存儲有每個消息存儲設(shè)備中有關(guān)存儲分區(qū)的信息、以及每個存儲分區(qū)中有關(guān)消息處理設(shè)備當(dāng)前要處理的消息的位置信息,因此當(dāng)消息處理設(shè)備獲取要處理的消息時,只需從消息管理設(shè)備查詢消息處理設(shè)備處理的主題下的消息在消息存儲設(shè)備上的存儲分區(qū)信息,以及消息處理設(shè)備在相應(yīng)的存儲分區(qū)的當(dāng)前要處理的消息的位置信息,即可發(fā)送消息獲取請求從消息存儲設(shè)備獲取消息進(jìn)行處理,這樣,即使消息處理設(shè)備發(fā)生故障,在消息處理設(shè)備恢復(fù)正常后,仍然可以緊接上次成功處理消息的位置獲取消息進(jìn)行處理,避免了消息的重復(fù)處理或遺漏。在此提供的算法和顯示不與任何特定計算機(jī)、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對特定語言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。在此處所提供的說明書中,說明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對本說明書的理解。類似地,應(yīng)當(dāng)理解,為了精簡本說明書公開并幫助理解各個發(fā)明方面中的一個或多個,在上面對本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個特征有時被一起分組到單個實(shí)施例、圖、或者對其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖即所要求保護(hù)的本發(fā)明要求比在每個權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個實(shí)施例的所有特征。因此,遵循具體實(shí)施方式
的權(quán)利要求書由此明確地并入該具體實(shí)施方式
,其中每個權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。本領(lǐng)域那些技術(shù)人員可以理解,可以對實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們設(shè)置在與該實(shí)施例不同的一個或多個設(shè)備中??梢园褜?shí)施例中的模塊或單元或組件組合成一個模塊或單元或組件,以及此外可以把它們分成多個子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有 特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進(jìn)行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個特征可以由提供相同、等同或相似目的的替代特征來代替。此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來使用。本發(fā)明的各個部件實(shí)施例可以以硬件實(shí)現(xiàn),或者以在一個或者多個處理器上運(yùn)行的軟件模塊實(shí)現(xiàn),或者以它們的組合實(shí)現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實(shí)踐中使用微處理器或者數(shù)字信號處理器(DSP)來實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的設(shè)備中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實(shí)現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計算機(jī)程序和計算機(jī)程序產(chǎn)品)。這樣的實(shí)現(xiàn)本發(fā)明的程序可以存儲在計算機(jī)可讀介質(zhì)上,或者可以具有一個或者多個信號的形式。這樣的信號可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。應(yīng)該注意的是上述實(shí)施例對本發(fā)明進(jìn)行說明而不是對本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計出替換實(shí)施例。在權(quán)利要求中,不應(yīng)將位于括號之間的任何參考符號構(gòu)造成對權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個”不排除存在多個這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計算機(jī)來實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個可以是通過同一個硬件項(xiàng)來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。本申請可以應(yīng)用于計算機(jī)系統(tǒng)/服務(wù)器,其可與眾多其它通用或?qū)S糜嬎阆到y(tǒng)環(huán)境或配置一起操作。適于與計算機(jī)系統(tǒng)/服務(wù)器一起使用的眾所周知的計算系統(tǒng)、環(huán)境和/或配置的例子包括但不限于個人計算機(jī)系統(tǒng)、服務(wù)器計算機(jī)系統(tǒng)、瘦客戶機(jī)、厚客戶機(jī)、手持或膝上設(shè)備、基于微處理器的系統(tǒng)、機(jī)頂盒、可編程消費(fèi)電子產(chǎn)品、網(wǎng)絡(luò)個人電腦、小型計算機(jī)系統(tǒng)、大型計算機(jī)系統(tǒng)和包括上述任何系統(tǒng)的分布式云計算技術(shù)環(huán)境,等等。計算機(jī)系統(tǒng)/服務(wù)器可以在由計算機(jī)系統(tǒng)執(zhí)行的計算機(jī)系統(tǒng)可執(zhí)行指令(諸如程序模塊)的一般語境下描述。通常,程序模塊可以包括例程、程序、目標(biāo)程序、組件、邏輯、數(shù)據(jù)結(jié)構(gòu)等等,它們執(zhí)行特定的任務(wù)或者實(shí)現(xiàn)特定的抽象數(shù)據(jù)類型。計算機(jī)系統(tǒng)/服務(wù)器可以在分布式云計算環(huán)境中實(shí)施,分布式云計算環(huán)境中,任務(wù)是由通過通信網(wǎng)絡(luò)鏈接的遠(yuǎn)程處理設(shè)備執(zhí)行的。 在分布式云計算環(huán)境中,程序模塊可以位于包括存儲設(shè)備的本地或遠(yuǎn)程計算系統(tǒng)存儲介質(zhì)上。
權(quán)利要求
1.一種在分布式消息處理系統(tǒng)中的消息管理設(shè)備,該分布式消息處理系統(tǒng)還包括一個或多個消息存儲設(shè)備和一個或多個消息處理設(shè)備,其中每條消息具有相應(yīng)的主題,所述消息存儲設(shè)備為相應(yīng)主題建立一個或者多個存儲分區(qū),并且根據(jù)消息的主題將消息存儲在相應(yīng)主題的存儲分區(qū)之一中,所述消息管理設(shè)備包括 消息分布狀態(tài)存儲器,被配置為至少存儲每個消息存儲設(shè)備中有關(guān)存儲分區(qū)的信息、以及每個存儲分區(qū)中有關(guān)消息處理設(shè)備當(dāng)前要處理的消息的位置信息; 傳輸接口,被配置為接收消息處理設(shè)備發(fā)送的消息處理請求,所述消息處理請求至少包括所請求處理消息的主題; 分區(qū)狀態(tài)查詢器,被配置為在所述消息分布狀態(tài)存儲器中查詢與所述消息處理請求中的主題相對應(yīng)的存儲分區(qū)信息,并經(jīng)由所述傳輸接口將所查詢到的存儲分區(qū)信息發(fā)送給相應(yīng)消息處理設(shè)備;以及 消息位置管理器,被配置為處理通過所述傳輸接口接收的、來自消息處理設(shè)備的消息位置查詢請求,從所述消息分布狀態(tài)存儲器中獲取與該消息位置查詢請求中的存儲分區(qū)相對應(yīng)的存儲分區(qū)的當(dāng)前要處理消息的位置信息、并經(jīng)由所述傳輸接口發(fā)送給相應(yīng)消息處理設(shè)備;以及被配置為處理通過所述傳輸接口接收的、來自消息處理設(shè)備的消息位置更新請求,基于所述消息位置更新請求中的消息大小,更新所述消息分布狀態(tài)存儲器中、與所述消息位置更新請求中的存儲分區(qū)相對應(yīng)的存儲分區(qū)的當(dāng)前要處理消息的位置信息。
2.如權(quán)利要求I所述的消息管理設(shè)備,其中所述消息分布狀態(tài)存儲器中還存儲有消息處理設(shè)備每次所要處理的消息的大??; 所述分區(qū)狀態(tài)查詢器還被配置為在所述消息分布狀態(tài)存儲器中查詢相應(yīng)消息處理設(shè)備所要處理的消息的大小,并通過所述傳輸接口發(fā)送給相應(yīng)消息處理設(shè)備。
3.—種消息管理方法,該方法適于在分布式消息處理系統(tǒng)中的消息管理設(shè)備上執(zhí)行,該分布式消息處理系統(tǒng)還包括一個或多個消息存儲設(shè)備和一個或多個消息處理設(shè)備,其中每條消息具有相應(yīng)的主題,所述消息存儲設(shè)備為相應(yīng)主題建立一個或者多個存儲分區(qū),并且根據(jù)消息的主題將消息存儲在相應(yīng)主題的存儲分區(qū)之一中,所述消息管理方法包括 接收消息處理設(shè)備發(fā)送的消息處理請求,所述消息處理請求至少包括所請求處理消息的主題; 查詢與所述消息處理請求中的主題相對應(yīng)的存儲分區(qū)信息,并將所查詢到的存儲分區(qū)信息發(fā)送給相應(yīng)消息處理設(shè)備,其中,所述消息管理設(shè)備中至少存儲每個消息存儲設(shè)備中有關(guān)存儲分區(qū)的信息、以及每個存儲分區(qū)中有關(guān)消息處理設(shè)備當(dāng)前要處理的消息的位置信息;以及 處理來自消息處理設(shè)備的消息位置查詢請求,查詢與該消息位置查詢請求中的存儲分區(qū)相對應(yīng)的存儲分區(qū)的當(dāng)前要處理消息的位置信息、并發(fā)送給相應(yīng)消息處理設(shè)備;以及處理來自消息處理設(shè)備的消息位置更新請求,基于所述消息位置更新請求中的消息大小,更新與所述消息位置更新請求中的存儲分區(qū)相對應(yīng)的存儲分區(qū)的當(dāng)前要處理消息的位置信肩、O
4.如權(quán)利要求3所述的消息管理方法,還包括 查詢相應(yīng)消息處理設(shè)備所要處理的消息的大小、并發(fā)送給相應(yīng)消息處理設(shè)備,其中所述消息管理設(shè)備中還存儲有消息處理設(shè)備每次所要處理的消息的大小。
全文摘要
本發(fā)明公開了一種在分布式消息處理系統(tǒng)中的消息管理設(shè)備和方法。其中消息管理方法包括接收消息處理設(shè)備發(fā)送的消息處理請求,所述消息處理請求至少包括所請求處理消息的主題;查詢與所述消息處理請求中的主題相對應(yīng)的存儲分區(qū)信息,并將所查詢到的存儲分區(qū)信息發(fā)送給相應(yīng)消息處理設(shè)備;以及處理來自消息處理設(shè)備的消息位置查詢請求,查詢與該消息位置查詢請求中的存儲分區(qū)相對應(yīng)的存儲分區(qū)的當(dāng)前要處理消息的位置信息、并發(fā)送給相應(yīng)消息處理設(shè)備;以及處理來自消息處理設(shè)備的消息位置更新請求,基于所述消息位置更新請求中的消息大小,更新與所述消息位置更新請求中的存儲分區(qū)相對應(yīng)的存儲分區(qū)的當(dāng)前要處理消息的位置信息。
文檔編號G06F9/50GK102955717SQ20121043638
公開日2013年3月6日 申請日期2012年11月5日 優(yōu)先權(quán)日2012年11月5日
發(fā)明者代兵, 陳超, 桂勇哲, 朱超, 王超 申請人:北京奇虎科技有限公司, 奇智軟件(北京)有限公司