日韩成人黄色,透逼一级毛片,狠狠躁天天躁中文字幕,久久久久久亚洲精品不卡,在线看国产美女毛片2019,黄片www.www,一级黄色毛a视频直播

消息處理方法及裝置與流程

文檔序號:11138414閱讀:637來源:國知局
消息處理方法及裝置與制造工藝

本發(fā)明涉及數據處理領域,具體而言,涉及一種消息處理方法及裝置。



背景技術:

流式計算框架相對于批處理計算框架,其解決的問題是對實時數據流的計算。Storm是一個分布式是實時計算系統(tǒng),可以簡單可靠地處理流數據。Storm可以應用在實時分析、在線機器學習、連續(xù)計算、分布式遠程過程調用協(xié)議(Remote Procedure Call Protocol,簡稱為RPC)調用、數據倉庫技術(Extract-Transform-Load,簡稱為ETL)等方面。Storm有可擴展、容錯、數據處理可靠性高等特點。

流式計算中的消息可靠性是指保證從數據源發(fā)出的每個消息(Tuple)都會被完全處理。在Storm里面一個Tuple被完全處理的意思是:這個Tuple以及由這個Tuple所產生的所有的Tuple都被成功處理。而一個Tuple會被認為處理失敗了如果這個消息在timeout所指定的時間內沒有成功處理。

現有的消息可靠性方案主要通過引入Acker組件并通過異或算法保證消息可靠性。具體地,Acker組件的任務就是跟蹤從某個Spout(Spout是指Storm應用(Topology)中的消息源,通常情況下Spout會從外部數據源中讀取數據,然后轉換為Topology內部的源數據)流出的每一個消息Id所綁定的Tuple樹中的所有Tuple的處理情況。如果在用戶設置的最大超時時間內這些Tuple沒有被完全處理,那么Acker會告訴Spout該消息處理失敗,相反則會告知Spout該消息處理成功,它會分別調用Spout中的fail和ack方法。

然而采用Acker組件管理所有組件的消息確認信號,Acker數量無法根據實時數據量進行動態(tài)調整,容易造成Acker閑置或單點故障。另外,在出現差錯的情況下,消息源需要從根節(jié)點對消息重新進行重復處理,消息處理的效率低。



技術實現要素:

本發(fā)明提供了一種消息處理方法及裝置,以至少解決相關技術中在出現差錯的情況下消息處理的效率低的問題。

根據本發(fā)明的一個方面,提供了一種消息處理方法,包括:第一層節(jié)點接收第一消息,并存儲所述第一消息,所述第一層節(jié)點包括一個或者多個第一節(jié)點;所述第一層節(jié)點對所述第一消息進行處理,生成第二消息,并向第二層節(jié)點發(fā)送所述第二消息,其中,所述第二層節(jié)點包括一個或者多個第二節(jié)點,所述第一層節(jié)點中的每個第一節(jié)點對應一 個或者多個第二節(jié)點;所述第二層節(jié)點接收所述第二消息后,對所述第二消息進行處理,并向所述第一層節(jié)點返回處理結果;在所述處理結果為處理失敗的情況下,所述第一層節(jié)點獲取存儲的所述第一消息,并重新對所述第一消息進行處理。

進一步地,在第一層節(jié)點接收第一消息,并存儲所述第一消息之后,所述方法還包括:添加對所述第一消息的記錄;其中,所述第一層節(jié)點獲取存儲的所述第一消息包括:所述第一層節(jié)點查詢所述記錄,獲取存儲的所述第一消息。

進一步地,在第一層節(jié)點接收第一消息,并存儲所述第一消息之前,所述方法還包括:根節(jié)點將接收到的數據封裝成多個所述第一消息,存儲所述多個所述第一消息;所述根節(jié)點添加多個所述第一消息的記錄。

進一步地,所述方法還包括:所述根節(jié)點向所述第一層節(jié)點發(fā)送所述第一消息,啟動定時器開始計時;在所述定時器到期前接收到所述第一層節(jié)點返回的處理成功的消息,則確定所述第一消息處理成功;在接收到所述第一層節(jié)點返回的處理失敗的消息,或者,在所述定時器到期前未接收到所述第一層節(jié)點返回的處理成功的消息,則查詢處理失敗的第一消息的記錄,獲取查詢到的第一消息,重新將向所述第一層節(jié)點發(fā)送獲取到的第一消息。

進一步地,所述第一層節(jié)點重新對所述第一消息進行處理之后,所述方法還包括:重新生成第二消息,并向第二層節(jié)點發(fā)送重新生成的第二消息;其中,在所述重新生成的第二消息的處理結果仍為處理失敗的情況下,所述第一層節(jié)點向所述根節(jié)點返回所述第一消息處理失敗的消息。

進一步地,所述方法還包括:所述第二層節(jié)點存儲所述第二消息;對所述第二消息進行處理,生成第三消息,并向第三層節(jié)點發(fā)送所述第三消息,其中,所述第三層節(jié)點包括一個或者多個第三節(jié)點,所述第二層節(jié)點中的每個第二節(jié)點對應一個或者多個第三節(jié)點;所述第三層節(jié)點接收所述第三消息后,對所述第三消息進行處理,并向所述第二層節(jié)點返回處理結果;在所述第三消息的處理結果為處理失敗的情況下,所述第二層節(jié)點獲取存儲的所述第二消息,并重新對所述第二消息進行處理,重新生成第三消息,向所述第三層節(jié)點發(fā)送重新生成的第三消息。

進一步地,所述方法還包括:在所述重新生成的第三消息的處理結果仍為處理失敗的情況下,所述第二層節(jié)點向所述第一層節(jié)點返回所述第二消息處理失敗的消息。

根據本發(fā)明的另一方面,提供了一種消息處理裝置,包括:第一存儲單元,設置在第一層節(jié)點上,用于接收第一消息,并存儲所述第一消息,所述第一層節(jié)點包括一個或者多個第一節(jié)點;第一處理單元,設置在所述第一層節(jié)點上,用于對所述第一消息進行處理,生成第二消息,并向第二層節(jié)點發(fā)送所述第二消息,其中,所述第二層節(jié)點包括一個或者多個第二節(jié)點,所述第一層節(jié)點中的每個第一節(jié)點對應一個或者多個第二節(jié)點;第二處理單元,設置在所述第二層節(jié)點上,用于接收所述第二消息后,對所述第二消息 進行處理,并向所述第一層節(jié)點返回處理結果;所述第一處理單元還用于在所述處理結果為處理失敗的情況下,獲取存儲的所述第一消息,并重新對所述第一消息進行處理。

進一步地,所述裝置還包括:第一記錄單元,設置在所述第一層節(jié)點上,用于在第一層節(jié)點接收第一消息,并存儲所述第一消息之后,添加對所述第一消息的記錄;其中,所述第一處理單元包括:獲取模塊,用于查詢所述記錄,獲取存儲的所述第一消息。

進一步地,所述裝置還包括:第二存儲單元,設置在根節(jié)點上,用于在第一層節(jié)點接收第一消息,并存儲所述第一消息之前,將接收到的數據封裝成多個所述第一消息,存儲所述多個所述第一消息;第二記錄單元,設置在所述根節(jié)點上,用于添加多個所述第一消息的記錄。

進一步地,所述裝置還包括:發(fā)送單元,設置在所述根節(jié)點上,用于向所述第一層節(jié)點發(fā)送所述第一消息,啟動定時器開始計時;確定單元,設置在所述根節(jié)點上,用于在所述定時器到期前接收到所述第一層節(jié)點返回的處理成功的消息,則確定所述第一消息處理成功;所述發(fā)送單元還用于在接收到所述第一層節(jié)點返回的處理失敗的消息,或者,在所述定時器到期前未接收到所述第一層節(jié)點返回的處理成功的消息,則查詢處理失敗的第一消息的記錄,獲取查詢到的第一消息,重新將向所述第一層節(jié)點發(fā)送獲取到的第一消息。

進一步地,所述第一處理單元還用于在重新對所述第一消息進行處理之后,重新生成第二消息,并向第二層節(jié)點發(fā)送重新生成的第二消息;其中,所述裝置還包括:第一返回單元,設置在所述第一層節(jié)點上,用于在所述重新生成的第二消息的處理結果仍為處理失敗的情況下,向所述根節(jié)點返回所述第一消息處理失敗的消息。

進一步地,所述裝置還包括:第三存儲單元,設置在所述第二層節(jié)點上,用于存儲所述第二消息;第三處理單元,設置在所述第二層節(jié)點上,用于對所述第二消息進行處理,生成第三消息,并向第三層節(jié)點發(fā)送所述第三消息,其中,所述第三層節(jié)點包括一個或者多個第三節(jié)點,所述第二層節(jié)點中的每個第二節(jié)點對應一個或者多個第三節(jié)點;第四處理單元,設置在所述第三層節(jié)點上,用于接收所述第三消息后,對所述第三消息進行處理,并向所述第二層節(jié)點返回處理結果;所述第三處理單元還用于在所述第三消息的處理結果為處理失敗的情況下,所述第二層節(jié)點獲取存儲的所述第二消息,并重新對所述第二消息進行處理,重新生成第三消息,向所述第三層節(jié)點發(fā)送重新生成的第三消息。

進一步地,所述裝置還包括:第二返回單元,設置在所述第二層節(jié)點上,用于在所述重新生成的第三消息的處理結果仍為處理失敗的情況下,向所述第一層節(jié)點返回所述第二消息處理失敗的消息。

通過在第二層節(jié)點對第二消息處理失敗的情況下,由第一層節(jié)點獲取預先存儲的第一消息,并重新對第一消息進行處理,以便于重新生成第二消息發(fā)送給第二層節(jié)點,第 二層節(jié)點則可以對重新生成的第二消息進行處理,無需從根節(jié)點對消息重新進行重復處理,解決了在出現差錯的情況下消息處理的效率低的問題,提高了在出現差錯的情況下消息處理的效率。

附圖說明

此處所說明的附圖用來提供對本發(fā)明的進一步理解,構成本申請的一部分,本發(fā)明的示意性實施例及其說明用于解釋本發(fā)明,并不構成對本發(fā)明的不當限定。在附圖中:

圖1是根據本發(fā)明實施例的消息處理方法的流程圖;

圖2是根據本發(fā)明可選實施例的逐層反饋的示意圖;

圖3是根據本發(fā)明可選實施例的差錯重傳的示意圖;

圖4是根據本發(fā)明實施例的消息處理裝置的結構框圖。

具體實施方式

下文中將參考附圖并結合實施例來詳細說明本發(fā)明。需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互組合。

需要說明的是,本發(fā)明的說明書和權利要求書及上述附圖中的術語“第一”、“第二”等是用于區(qū)別類似的對象,而不必用于描述特定的順序或先后次序。

在本實施例中提供了一種消息處理方法,該方法可以用于流式計算框架的消息處理。

圖1是根據本發(fā)明實施例的消息處方法的流程圖,如圖1所示,該流程包括如下步驟:

步驟S102,第一層節(jié)點接收第一消息,并存儲第一消息,第一層節(jié)點包括一個或者多個第一節(jié)點;

步驟S104,第一層節(jié)點對第一消息進行處理,生成第二消息,并向第二層節(jié)點發(fā)送第二消息,其中,第二層節(jié)點包括一個或者多個第二節(jié)點,第一層節(jié)點中的每個第一節(jié)點對應一個或者多個第二節(jié)點;

步驟S106,第二層節(jié)點接收第二消息后,對第二消息進行處理,并向第一層節(jié)點返回處理結果;

步驟S108,在處理結果為處理失敗的情況下,第一層節(jié)點獲取存儲的第一消息,并重新對第一消息進行處理。

第一層節(jié)點和第二層節(jié)點可以是消息處理的中間節(jié)點,其中,第二層節(jié)點是第一層節(jié)點的下游節(jié)點。

通過上述步驟,在第二層節(jié)點對第二消息處理失敗的情況下,由第一層節(jié)點獲取預先存儲的第一消息,并重新對第一消息進行處理,以便于重新生成第二消息發(fā)送給第二層節(jié)點,第二層節(jié)點則可以對重新生成的第二消息進行處理,無需從根節(jié)點對消息重新進行重復處理,解決了在出現差錯的情況下消息處理的效率低的問題,提高了在出現差錯的情況下消息處理的效率。

優(yōu)選地,上述第一節(jié)點和第二節(jié)點,以及后文所提及的第三節(jié)點等等節(jié)點均可以是Bolt,該Bolt是Storm應用中進行消息處理的組件,Bolt可以執(zhí)行過濾、函數操作、合并、寫數據庫等任何操作。

優(yōu)選地,存儲第一消息的可以是設置在第一層節(jié)點上的消息緩存(Buffer),用于緩存已發(fā)送消息,以及用于消息處理失敗重傳。其中,第二層節(jié)點在接收到第二消息時,也可以存儲第二消息,以便于其下游節(jié)點消息處理失敗時,獲取存儲的第二消息。

優(yōu)選地,在第一層節(jié)點接收第一消息,并存儲第一消息之后,方法還包括:添加對第一消息的記錄;其中,第一層節(jié)點獲取存儲的第一消息包括:第一層節(jié)點查詢記錄,獲取存儲的第一消息。

第一層節(jié)點在接收到第一消息,并存儲第一消息之后,可以添加第一消息的記錄,以便于在獲取第一消息時,可以基于該記錄來獲取。進一步優(yōu)選地,可以利用消息確認模塊(Ack模塊)為消息添加記錄。可選地,Ack模塊還可以向上游消息源反饋消息處理情況,接收下游節(jié)點反饋消息。

消息的記錄形式可以是按照預先定義的規(guī)則所設定的身份標識,例如序列號等,這里不做限定。

優(yōu)選地,在第一層節(jié)點接收第一消息,并存儲第一消息之前,方法還包括:根節(jié)點將接收到的數據封裝成多個第一消息,存儲多個第一消息;根節(jié)點添加多個第一消息的記錄。

本實施例中,根節(jié)點可以是Spout,根節(jié)點從消息源讀取數據,生成獨立的消息單元,并將消息轉發(fā)到若干第一層節(jié)點處理,經過第一層節(jié)點處理的消息也可能經過其他若干節(jié)點處理。根節(jié)點可以分別向多個第一層節(jié)點中每一個節(jié)點發(fā)送一個第一消息,并添加相應的記錄,以便于第一層節(jié)點處理失敗時,基于記錄從存儲的消息中獲取相應的消息,重新發(fā)送到該第一層節(jié)點。

優(yōu)選地,方法還包括:根節(jié)點向第一層節(jié)點發(fā)送第一消息,啟動定時器開始計時;在定時器到期前接收到第一層節(jié)點返回的處理成功的消息,則確定第一消息處理成功;在接收到第一層節(jié)點返回的處理失敗的消息,或者,在定時器到期前未接收到第一層節(jié) 點返回的處理成功的消息,則查詢處理失敗的第一消息的記錄,獲取查詢到的第一消息,重新將向第一層節(jié)點發(fā)送獲取到的第一消息。

若根節(jié)點在定時器到期內收到發(fā)出的消息的處理成功的消息,則表明對應消息處理成功。在定時到期時仍未收到發(fā)出消息對應的處理成功的消息或收到處理失敗的消息,則從緩存中恢復源數據進行重傳。

優(yōu)選地,第一層節(jié)點重新對第一消息進行處理之后,方法還包括:重新生成第二消息,并向第二層節(jié)點發(fā)送重新生成的第二消息;其中,在重新生成的第二消息的處理結果仍為處理失敗的情況下,第一層節(jié)點向根節(jié)點返回第一消息處理失敗的消息。

本實施例中,當第二層節(jié)點處理第二消息失敗的情況下,重新生成第二消息并向第二層節(jié)點重新發(fā)送該重新生成的第二消息,以便于第二層節(jié)點對重新進行處理,如果再次處理失敗,則第一層節(jié)點向根節(jié)點返回處理失敗的消息。

優(yōu)選地,方法還包括:第二層節(jié)點存儲第二消息;對第二消息進行處理,生成第三消息,并向第三層節(jié)點發(fā)送第三消息,其中,第三層節(jié)點包括一個或者多個第三節(jié)點,第二層節(jié)點中的每個第二節(jié)點對應一個或者多個第三節(jié)點;第三層節(jié)點接收第三消息后,對第三消息進行處理,并向第二層節(jié)點返回處理結果;在第三消息的處理結果為處理失敗的情況下,第二層節(jié)點獲取存儲的第二消息,并重新對第二消息進行處理,重新生成第三消息,向第三層節(jié)點發(fā)送重新生成的第三消息。

若第二層節(jié)點的下游還包括第三層節(jié)點,那么第二層節(jié)點對第二消息進行處理,并生成第三消息,將其發(fā)送至第三層節(jié)點。在第三層節(jié)點對第三消息處理失敗的情況下,則由第二層節(jié)點獲取第二消息,并重新生成第三消息并重傳,以便于第三層節(jié)點重新處理。這樣,當第三層節(jié)點處理失敗時,無需從根節(jié)點開始重復處理,只需從第二層節(jié)點重新處理第二消息,大大提高了在出現差錯的情況下消息處理的效率。

進一步優(yōu)選地,方法還包括:在重新生成的第三消息的處理結果仍為處理失敗的情況下,第二層節(jié)點向第一層節(jié)點返回第二消息處理失敗的消息。

如果第三消息重新處理第三消息后,處理結果仍為處理失敗,則由第二層節(jié)點向第一層節(jié)點返回處理失敗的消息。這使得在消息處理失敗時,通過層層上報,最終才到根節(jié)點處。

下面以具體的應用來介紹本發(fā)明實施例。

Spout從消息源讀取數據,生成獨立的消息單元,并將消息轉發(fā)到若干Bolt處理,經過Bolt處理的消息也可能經過其他若干Bolt處理。Spout和Bolt都包含Buffer模塊和Ack模塊,在消息處理前會將數據緩存在buffer中,并在Ack模塊中進行記錄。數據處理完成會通過Ack模塊向上游數據源反饋處理結果。

流式處理框架的消息處理方法包括以下步驟:

第一步:

Spout處理源數據,向下游Bolt分發(fā)由源數據生成的消息。將生成的消息存入緩存buffer并啟動定時器,Spout中的Ack模塊為消息添加記錄。

第二步:

Bolt接收上游消息,處理數據。若Bolt仍然有下游模塊,則Ack模塊記錄待發(fā)送消息,并將上游消息存入緩存。反之,則在數據處理完成之后Ack模塊向上游反饋ack_msg消息表明消息處理成功,消息處理失敗則反饋fail_msg消息。

第三步:

Bolt接收到某條消息對應的所有下游Bolt反饋的ack_msg消息后,刪除緩存中的該條消息并向上游Bolt或者Spout反饋ack消息。若接收到fail消息則從緩存中恢復對應的消息,重新處理。

第四步:

若Spout在定時器到期內收到發(fā)出的消息的ack消息,則表明對應消息處理成功。在定時到期時仍未收到發(fā)出消息對應的ack消息或收到fail消息,則從緩存中恢復源數據進行重傳。

具體地,上述步驟可以通過以下方式實現:

對于第一步:

Spout將收集到的數據封裝為若干消息Tuple,如圖2生成id號分別為msg_0,msg_1的消息,發(fā)送Tuple到Bolt,啟動定時器開始計時。

Spout將待發(fā)送的Tuple緩存到自身的buffer,ack為消息添加記錄。記錄格式為(msg_0),(msg_1)。

對于第二步:

Bolt接受來自上游Bolt或者Spout的消息Tuple,序列號為parent_id,緩存數據,并對數據進行處理。處理結果分為兩種情況:生成新的Tuple,或者處理完不生成新的Tuple。

針對第一種情況,在處理來自上游組件的消息成功之后,Bolt中的Ack模塊添加記錄(parent_id,msg_id),并將來自上游的消息存入緩存。其中的parent_id表示上游發(fā)送到Bolt處理的Tuple的id號,Bolt可能由上游Tuple生成多個新的消息,其id號分別為msg_id_1,msg_id_2…msg_id_n。將記錄中的msg_id更新為各消息id號之間的異或值,即msg_id=msg_id_1^msg_id_2…^msg_id_i^…^msg_id_n,msg_id_i為各消息的id號,均為64位隨機序列。消息記錄通常采用HashMap等數據結構實現。

如圖2中Spout下游的兩個Bolt,分別處理id為msg_0、msg_1的消息,生成消息msg_2、msg_3、msg_4,并向各自的緩存中添加記錄(msg_0,msg_2^msg_3),(msg_1,msg_4)。若處理消息失敗則向上游組件反饋處理失敗消息fail_msg,fail_msg中包含了處理失敗的消息的id號。

消息的確認采用異或算法:

上游組件處理id號為parent_id的消息,并由此生成id號分別為msg_id_1,msg_id_2,…,msg_id_n的消息,將生成的消息分發(fā)到下游組件處理,并添加消息記錄(parent_id,msg_id_1^msg_id_2…^msg_id_n)。下游組件對msg_id_i處理完成之后會向上游反饋(parent_id,msg_id_i),上游查找到parent_id對應的記錄msg_id=msg_id_1^msg_id_2…^msg_id_n,將msg_id與msg_id_i進行異或,結果賦給msg_id。所有消息都處理完成之后,異或結果為0,以此判斷parent_id消息產生的消息都被處理。

第二種情況,處理完Tuple不生成新消息的Bolt,會發(fā)送確認消息ack_msg或者失敗消息fail_msg到parent_id的消息源,確認消息數據部分的格式為(parent_id,msg_id)。

如圖2中的最后一層的Bolt,處理消息msg_2,msg_3,msg_4完成之后分別向上游反饋ack_msg消息,表明各自消息處理完成。

對于第三步:

Bolt或Spout接收到來自下游Bolt的確認消息ack_msg后,Ack模塊查詢ack消息中parent_id所對應的記錄,并將記錄與ack_msg的msg_id進行異或。異或結果為0則表示parent_id所對應的消息已經完全處理,繼續(xù)向上游反饋parent_id消息處理完畢。

如圖2中Spout下游Bolt收到確認消息之后,找到消息記錄(msg_0,msg_2^msg_3)將記錄的值msg_2^msg_3與收到的確認消息中的值msg_2,msg_3分別進行異或,得到的結果為0,則表明消息msg_0處理成功,刪除msg_0的緩存。同理將記錄(msg_1,msg_4)中的msg_4與下游ack_msg消息中的值msg_4進行異或,得到結果為0,則表明msg_1處理完成。

若Bolt或Spout接收到來自下游Bolt的處理失敗消息fail_msg,從緩存中恢復處理失敗的消息重新處理重傳。若下游繼續(xù)返回fail_msg,則停止重傳,繼續(xù)向上游反饋fail_msg消息。

具體過程如圖3所示,msg_2處理失敗,發(fā)送fail_msg消息到Bolt,Bolt查詢記錄,從緩存恢復消息msg_0進行重新處理,生成消息msg_2、msg_3并分別進行重發(fā)。下游組件繼續(xù)重新處理msg_2、msg_3,處理成功逐層向上反饋。

對于第四步:

各Bolt組件重復上述過程,不斷向上游反饋處理結果,直到Spout接收到來自下游 Bolt的反饋消息,收到ack_msg則表明消息處理成功。

即圖2中Spout下游的Bolt分別收到所有消息的確認信號之后向Spout發(fā)送ack_msg,Spout收到消息確認消息被處理完畢,刪除緩存。

在等待時間T之內,如果Spout未收到消息的ack_msg,或者接受到下游反饋的fail_msg消息,則表示該消息處理失敗,從buffer中恢復對應的消息進行重傳或者放棄。

通過以上的實施方式的描述,本領域的技術人員可以清楚地了解到根據上述實施例的方法可借助軟件加必需的通用硬件平臺的方式來實現,當然也可以通過硬件,但很多情況下前者是更佳的實施方式?;谶@樣的理解,本發(fā)明的技術方案本質上或者說對現有技術做出貢獻的部分可以以軟件產品的形式體現出來,該計算機軟件產品存儲在一個存儲介質(如ROM/RAM、磁碟、光盤)中,包括若干指令用以使得一臺終端設備(可以是手機,計算機,服務器,或者網絡設備等)執(zhí)行本發(fā)明各個實施例所述的方法。

本實施例與現有方案相比,通過逐層反饋的方式保證消息可靠性,降低了因為確認節(jié)點Acker數量無法動態(tài)調整造成的負載過大或者節(jié)點閑置。同時每層的處理節(jié)點設有緩存,減少了出現差錯的情況下消息重發(fā)和重新處理的次數。提升了網絡效率,降低網絡開銷。

在本實施例中還提供了一種消息處理裝置,該裝置用于實現上述實施例及優(yōu)選實施方式,已經進行過說明的不再贅述。如以下所使用的,術語“單元”、“模塊”可以實現預定功能的軟件和/或硬件的組合。盡管以下實施例所描述的裝置較佳地以軟件來實現,但是硬件,或者軟件和硬件的組合的實現也是可能并被構想的。

圖4是根據本發(fā)明實施例的消息處理裝置的結構框圖,如圖4所示,該裝置包括:第一存儲單元202、第一處理單元204和第二處理單元206。

第一存儲單元202設置在第一層節(jié)點上,用于接收第一消息,并存儲第一消息。第一層節(jié)點包括一個或者多個第一節(jié)點。

第一處理單元204設置在第一層節(jié)點上,用于對第一消息進行處理,生成第二消息,并向第二層節(jié)點發(fā)送第二消息。其中,第二層節(jié)點包括一個或者多個第二節(jié)點,第一層節(jié)點中的每個第一節(jié)點對應一個或者多個第二節(jié)點。

第二處理單元206設置在第二層節(jié)點上,用于接收第二消息后,對第二消息進行處理,并向第一層節(jié)點返回處理結果。

第一處理單元204還用于在處理結果為處理失敗的情況下,獲取存儲的第一消息,并重新對第一消息進行處理。

第一層節(jié)點包含的第一節(jié)點和第二層節(jié)點包含的第二節(jié)點可以是消息處理的中間節(jié)點,其中,第二層節(jié)點是第一層節(jié)點的下游節(jié)點。

通過上述步驟,在第二層節(jié)點對第二消息處理失敗的情況下,由第一層節(jié)點獲取預先存儲的第一消息,并重新對第一消息進行處理,以便于重新生成第二消息發(fā)送給第二層節(jié)點,第二層節(jié)點則可以對重新生成的第二消息進行處理,無需從根節(jié)點對消息重新進行重復處理,解決了在出現差錯的情況下消息處理的效率低的問題,提高了在出現差錯的情況下消息處理的效率。

優(yōu)選地,上述第一層節(jié)點和第二層節(jié)點,以及后文所提及的第三層節(jié)點等等節(jié)點均可以是Bolt,該Bolt是Storm應用中進行消息處理的組件,Bolt可以執(zhí)行過濾、函數操作、合并、寫數據庫等任何操作。

優(yōu)選地,裝置還包括:第一記錄單元,設置在第一層節(jié)點上,用于在第一層節(jié)點接收第一消息,并存儲第一消息之后,添加對第一消息的記錄;其中,第一處理單元包括:獲取模塊,用于查詢記錄,獲取存儲的第一消息。

第一層節(jié)點在接收到第一消息,并存儲第一消息之后,可以添加第一消息的記錄,以便于在獲取第一消息時,可以基于該記錄來獲取。第一記錄單元可以是消息確認模塊(Ack模塊),用于為消息添加記錄。消息的記錄形式可以是按照預先定義的規(guī)則所設定的身份標識,例如序列號等,這里不做限定。

優(yōu)選地,裝置還包括:第二存儲單元,設置在根節(jié)點上,用于在第一層節(jié)點接收第一消息,并存儲第一消息之前,將接收到的數據封裝成多個第一消息,存儲多個第一消息;第二記錄單元,設置在根節(jié)點上,用于添加多個第一消息的記錄。

本實施例中,根節(jié)點可以是Spout,根節(jié)點從消息源讀取數據,生成獨立的消息單元,并將消息轉發(fā)到若干第一層節(jié)點處理,經過第一層節(jié)點處理的消息也可能經過其他若干節(jié)點處理。根節(jié)點可以分別向多個第一層節(jié)點中每一個節(jié)點發(fā)送一個第一消息,并添加相應的記錄,以便于第一層節(jié)點處理失敗時,基于記錄從存儲的消息中獲取相應的消息,重新發(fā)送到該第一層節(jié)點。

優(yōu)選地,裝置還包括:發(fā)送單元,設置在根節(jié)點上,用于向第一層節(jié)點發(fā)送第一消息,啟動定時器開始計時;確定單元,設置在根節(jié)點上,用于在定時器到期前接收到第一層節(jié)點返回的處理成功的消息,則確定第一消息處理成功;發(fā)送單元還用于在接收到第一層節(jié)點返回的處理失敗的消息,或者,在定時器到期前未接收到第一層節(jié)點返回的處理成功的消息,則查詢處理失敗的第一消息的記錄,獲取查詢到的第一消息,重新將向第一層節(jié)點發(fā)送獲取到的第一消息。

若根節(jié)點在定時器到期內收到發(fā)出的消息的處理成功的消息,則表明對應消息處理成功。在定時到期時仍未收到發(fā)出消息對應的處理成功的消息或收到處理失敗的消息,則從緩存中恢復源數據進行重傳。

優(yōu)選地,第一處理單元還用于在重新對第一消息進行處理之后,重新生成第二消息, 并向第二層節(jié)點發(fā)送重新生成的第二消息;其中,裝置還包括:第一返回單元,設置在第一層節(jié)點上,用于在重新生成的第二消息的處理結果仍為處理失敗的情況下,向根節(jié)點返回第一消息處理失敗的消息。

本實施例中,當第二層節(jié)點處理第二消息失敗的情況下,重新生成第二消息并向第二層節(jié)點重新發(fā)送該重新生成的第二消息,以便于第二層節(jié)點對重新進行處理,如果再次處理失敗,則第一層節(jié)點向根節(jié)點返回處理失敗的消息。

優(yōu)選地,裝置還包括:第三存儲單元,設置在第二層節(jié)點上,用于存儲第二消息;第三處理單元,設置在第二層節(jié)點上,用于對第二消息進行處理,生成第三消息,并向第三層節(jié)點發(fā)送第三消息;第四處理單元,設置在第三層節(jié)點上,用于接收第三消息后,對第三消息進行處理,并向第二層節(jié)點返回處理結果;第三處理單元還用于在第三消息的處理結果為處理失敗的情況下,第二層節(jié)點獲取存儲的第二消息,并重新對第二消息進行處理,重新生成第三消息,向第三層節(jié)點發(fā)送重新生成的第三消息。

若第二層節(jié)點的下游還包括第三層節(jié)點,那么第二層節(jié)點對第二消息進行處理,并生成第三消息,將其發(fā)送至第三層節(jié)點。在第三層節(jié)點對第三消息處理失敗的情況下,則由第二層節(jié)點獲取第二消息,并重新生成第三消息并重傳,以便于第三層節(jié)點重新處理。這樣,當第三層節(jié)點處理失敗時,無需從根節(jié)點開始重復處理,只需從第二層節(jié)點重新處理第二消息,大大提高了在出現差錯的情況下消息處理的效率。

優(yōu)選地,裝置還包括:第二返回單元,設置在第二層節(jié)點上,用于在重新生成的第三消息的處理結果仍為處理失敗的情況下,向第一層節(jié)點返回第二消息處理失敗的消息。

如果第三消息重新處理第三消息后,處理結果仍為處理失敗,則由第二層節(jié)點向第一層節(jié)點返回處理失敗的消息。這使得在消息處理失敗時,通過層層上報,最終才到根節(jié)點處。

本發(fā)明的實施例還提供了一種存儲介質??蛇x地,在本實施例中,上述存儲介質可以被設置為存儲用于執(zhí)行以下步驟的程序代碼:

步驟S1,第一層節(jié)點接收第一消息,并存儲第一消息;

步驟S2,第一層節(jié)點對第一消息進行處理,生成第二消息,并向第二層節(jié)點發(fā)送第二消息;

步驟S3,第二層節(jié)點接收第二消息后,對第二消息進行處理,并向第一層節(jié)點返回處理結果;

步驟S4,在處理結果為處理失敗的情況下,第一層節(jié)點獲取存儲的第一消息,并重新對第一消息進行處理。

通過上述代碼,在第二層節(jié)點對第二消息處理失敗的情況下,由第一層節(jié)點獲取預 先存儲的第一消息,并重新對第一消息進行處理,以便于重新生成第二消息發(fā)送給第二層節(jié)點,第二層節(jié)點則可以對重新生成的第二消息進行處理,無需從根節(jié)點對消息重新進行重復處理,解決了在出現差錯的情況下消息處理的效率低的問題,提高了在出現差錯的情況下消息處理的效率。

可選地,在本實施例中,上述存儲介質可以包括但不限于:U盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、移動硬盤、磁碟或者光盤等各種可以存儲程序代碼的介質。

可選地,在本實施例中,處理器根據存儲介質中已存儲的程序代碼執(zhí)行:第一層節(jié)點接收第一消息,并存儲第一消息;第一層節(jié)點對第一消息進行處理,生成第二消息,并向第二層節(jié)點發(fā)送第二消息;第二層節(jié)點接收第二消息后,對第二消息進行處理,并向第一層節(jié)點返回處理結果;在處理結果為處理失敗的情況下,第一層節(jié)點獲取存儲的第一消息,并重新對第一消息進行處理。

可選地,本實施例中的具體示例可以參考上述實施例及可選實施方式中所描述的示例,本實施例在此不再贅述。

顯然,本領域的技術人員應該明白,上述的本發(fā)明的各模塊或各步驟可以用通用的計算裝置來實現,它們可以集中在單個的計算裝置上,或者分布在多個計算裝置所組成的網絡上,可選地,它們可以用計算裝置可執(zhí)行的程序代碼來實現,從而,可以將它們存儲在存儲裝置中由計算裝置來執(zhí)行,并且在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟,或者將它們分別制作成各個集成電路模塊,或者將它們中的多個模塊或步驟制作成單個集成電路模塊來實現。這樣,本發(fā)明不限制于任何特定的硬件和軟件結合。

以上所述僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領域的技術人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內。

當前第1頁1 2 3 
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1