一種消息處理的方法和裝置的制造方法
【專利說明】
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機應(yīng)用技術(shù)領(lǐng)域,特別涉及一種消息處理的方法和裝置。
【【背景技術(shù)】】
[0002]現(xiàn)今,越來越多的企業(yè)面臨著各種各樣的數(shù)據(jù)集成和系統(tǒng)整合,消息中間件技術(shù)應(yīng)運而生。消息中間件指的是利用高效可靠的消息傳遞機制,進行平臺無關(guān)的數(shù)據(jù)交流,并可以基于數(shù)據(jù)通信進行分布式系統(tǒng)的集成。具體地,消息中間件基于消息的異步處理模型,消息發(fā)送者將消息發(fā)送給消息中間件(也稱為消息服務(wù)器),消息中間件在合適的使用再將消息轉(zhuǎn)發(fā)給消息接收者。發(fā)送和接收是異步的,消息發(fā)送者無需等待,消息發(fā)送者和消息接收者的生命周期可以不必相同,并且消息發(fā)送者可以將消息間接轉(zhuǎn)發(fā)給多個接收者,大大提高了整個消息系統(tǒng)的性能、可擴展性和健壯性。
[0003]目前消息中間件在處理消息時,將消息發(fā)送者的消息寫入消息隊列,然后在合適的時機從消息隊列中讀取消息并轉(zhuǎn)發(fā)給消息接收者。然而,這種方式一旦消息寫入消息隊列失敗,則可能會造成消息丟失,消息投遞失敗,可靠性難以保證。
【
【發(fā)明內(nèi)容】
】
[0004]有鑒于此,本發(fā)明提供了一種消息處理的方法和裝置,以便于提高消息中間件在處理消息過程中的可靠性。
[0005]具體技術(shù)方案如下:
[0006]本發(fā)明提供了一種消息處理的方法,該方法包括:
[0007]消息中間件接收到消息時,將消息寫入消息隊列和持久化存儲;
[0008]若消息寫入消息隊列和持久化存儲均失敗,則將所述消息寫入本地磁盤。
[0009]根據(jù)本發(fā)明一優(yōu)選實施方式,所述將消息寫入消息隊列和持久化存儲包括:
[0010]采用雙寫的方式將所述消息寫入消息隊列和持久化存儲;或者,
[0011 ]將消息寫入消息隊列,若寫入失敗,則將所述消息寫入持久化存儲;或者,
[0012]將消息寫入持久化存儲,若寫入失敗,則將所述消息寫入消息隊列。
[0013]根據(jù)本發(fā)明一優(yōu)選實施方式,若消息寫入持久化存儲失敗,寫入消息隊列成功,該方法還包括:
[0014]將所述消息從消息隊列回調(diào)并重新寫入持久化存儲。
[0015]根據(jù)本發(fā)明一優(yōu)選實施方式,該方法還包括:
[0016]若重新寫入持久化存儲失敗,則將所述消息寫入本地磁盤。
[0017]根據(jù)本發(fā)明一優(yōu)選實施方式,該方法還包括:
[0018]將消息從本地磁盤回調(diào)并重新寫入持久化存儲。
[0019 ]根據(jù)本發(fā)明一優(yōu)選實施方式,該方法還包括:
[0020]采用兩個推送進程以競爭模式分別從消息隊列和持久化存儲讀取消息,并將讀取到的消息推送至消息接收者;
[0021]所述競爭模式保證對于相同的消息而言,只有一個推送進程能夠讀取到該消息。
[0022]根據(jù)本發(fā)明一優(yōu)選實施方式,所述采用兩個推送進程以競爭模式分別從寫入隊列和持久化存儲讀取消息包括:
[0023]推送進程從寫入隊列或持久化存儲中讀取消息時,判斷該消息的被處理狀態(tài),若該消息正在被處理,或者已被處理成功,則不再對該消息進行處理;若該消息未被處理,或者被處理失敗,則從該推送進程對應(yīng)的寫入隊列或持久化存儲中讀取消息,并更新該消息的被處理狀態(tài)為正在被處理。
[0024]根據(jù)本發(fā)明一優(yōu)選實施方式,該方法還包括:
[0025]若推送進程推送消息至消息接收者成功,則更新該消息的被處理狀態(tài)為已被處理成功;
[0026]若推送進程讀取消息或推送消息至消息接收者失敗,則更新該消息的被處理狀態(tài)為被處理失敗。
[0027]根據(jù)本發(fā)明一優(yōu)選實施方式,持久化存儲對應(yīng)的推送進程若從持久化存儲中讀取消息或推送消息至消息接收者失敗,則按照預(yù)設(shè)的重試間隔,重新從所述持久化存儲中讀取消息并推送至消息接收者,直至推送消息至消息接收者成功或達到預(yù)設(shè)的重試次數(shù)。
[0028]根據(jù)本發(fā)明一優(yōu)選實施方式,若持久化存儲中未處理的消息數(shù)量或者處理失敗的消息數(shù)量超過預(yù)設(shè)閾值,則所述持久化存儲對應(yīng)的推送進程進行告警。
[0029]本發(fā)明還提供了一種消息處理的裝置,設(shè)置于消息中間件,該裝置包括:
[0030]接收單元,用于接收消息;
[0031]第一寫入單元,用于將所述接收單元接收到的消息寫入消息隊列和持久化存儲;
[0032]第二寫入單元,用于若消息寫入消息隊列和持久化存儲均失敗,則將該消息寫入本地磁盤。
[0033]根據(jù)本發(fā)明一優(yōu)選實施方式,所述第一寫入單元,具體用于:
[0034]采用雙寫的方式將所述消息寫入消息隊列和持久化存儲;或者,
[0035]將消息寫入消息隊列,若寫入失敗,則將所述消息寫入持久化存儲;或者,
[0036]將消息寫入持久化存儲,若寫入失敗,則將所述消息寫入消息隊列。
[0037]根據(jù)本發(fā)明一優(yōu)選實施方式,該裝置還包括:
[0038]第三寫入單元,用于若所述第一寫入單元寫入持久化存儲失敗,寫入消息隊列成功,則將所述消息從消息隊列回調(diào)并重新寫入持久化存儲。
[0039]根據(jù)本發(fā)明一優(yōu)選實施方式,所述第二寫入單元,還用于在所述第三寫入單元重新寫入持久化存儲失敗時,將所述消息寫入本地磁盤。
[0040]根據(jù)本發(fā)明一優(yōu)選實施方式,該裝置還包括:
[0041]第四寫入單元,用于將消息從本地磁盤回調(diào)并重新寫入持久化存儲。
[0042 ]根據(jù)本發(fā)明一優(yōu)選實施方式,該裝置還包括:第一推送單元和第二推送單元;
[0043]所述第一推送單元和第二推送單元以競爭模式分別從消息隊列和持久化存儲讀取消息,并將讀取到的消息推送至消息接收者;
[0044]所述競爭模式保證對于相同的消息而言,只有一個推送單元能夠讀取到該消息。
[0045]根據(jù)本發(fā)明一優(yōu)選實施方式,所述第一推送單元和所述第二推送單元在分別從寫入隊列或持久化存儲中讀取消息時,具體執(zhí)行:
[0046]判斷該消息的被處理狀態(tài),若該消息正在被處理,或者已被處理成功,則不再對該消息進行處理;若該消息未被處理,或者被處理失敗,則從該推送單元對應(yīng)的寫入隊列或持久化存儲中讀取消息,并更新該消息的被處理狀態(tài)為正在被處理。
[0047]根據(jù)本發(fā)明一優(yōu)選實施方式,所述第一推送單元和所述第二推送單元,還用于:
[0048]若推送消息至消息接收者成功,則更新該消息的被處理狀態(tài)為已被處理成功;
[0049]若讀取消息或推送消息至消息接收者失敗,則更新該消息的被處理狀態(tài)為被處理失敗。
[0050]根據(jù)本發(fā)明一優(yōu)選實施方式,所述第二推送單元,還用于若從持久化存儲中讀取消息或推送消息至消息接收者失敗,則按照預(yù)設(shè)的重試間隔,重新從所述持久化存儲中讀取消息并推送至消息接收者,直至推送消息至消息接收者成功或達到預(yù)設(shè)的重試次數(shù)。[0051 ]根據(jù)本發(fā)明一優(yōu)選實施方式,所述第二推送單元,還用于若持久化存儲中未處理的消息數(shù)量或者處理失敗的消息數(shù)量超過預(yù)設(shè)閾值,則進行告警。
[