一種事務消息的處理方法和裝置的制造方法
【技術領域】
[0001]本申請涉及消息處理的技術領域,特別是涉及一種事務消息的處理方法和一種事務消息的處理裝置。
【背景技術】
[0002]在分布式的網絡環境下,業務系統之間需要進行消息的交互以完成關聯的業務,為了降低業務系統之間的耦合性,通常采用異步可靠消息來進行消息的交互。異步可靠消息一般分為普通消息和事務消息。普通消息與發送結果不綁定。作為發送端的業務系統,在執行本地事務時,不依賴普通消息的發送結果,即使普通消息發送失敗,也可以按照本地事務的業務處理邏輯繼續執行相應的操作。由于不能保證普通消息的發送結果和本地事務的業務處理邏輯的一致性,因此,在對一致性要求嚴格的場景通常選用事務消息。事務消息與發送結果綁定。在執行本地事務時,依賴事務消息的發送結果,即事務消息發送結果和本地事務的業務處理邏輯保持一致。
[0003]在具體實現中,如果發送端發事務消息失敗,則需要回滾本地事務,此外,如果在發送端本地事務執行失敗,也需要回滾事務消息,以保證發送結果和本地事務的業務處理邏輯的一致性。目前事務消息一般采用兩階段提交的方式,并將事務消息的狀態分為未決狀態和已提交狀態。事務消息兩階段提交的方式具體為:
[0004]第一階段,在發送端進行本地事務的處理時操作業務數據庫,并將本地事務于事務消息綁定,在本地事務執行過程中發送未決狀態的事務消息到消息服務器,消息服務器將該事務消息持久化到消息數據庫;
[0005]第二階段,在發送端確定事務消息是提交或者回滾,此時會發送指示提交或回滾的消息到消息服務器,如果是指示回滾的消息,消息服務器會刪除先前持久化到消息數據庫的未決狀態消息,如果是指示提交的消息,消息服務器會將事務消息的狀態從未決狀態更新為已提交狀態,然后再進行投遞。
[0006]如果在第二階段的事務消息發送失敗,消息服務器會回查發送端咨詢事務消息的狀態,消息服務器咨詢該事務消息的狀態后,決定對事務消息是要提交還是回滾。
[0007]由此可知,事務消息的兩階段提交方式的缺點主要有:
[0008]1、消息量倍增。由于事務消息是兩階段提交,而每一個階段都需要發送一條事務消息,這意味著執行本地事務過程中的一次事務消息的發送動實際上需要發送用兩次才能發送,從而使消息量增加了一倍,加重了網絡負載、消息服務器負擔以及消息數據庫的事務消息數。
[0009]2、需要實現回查邏輯。如果第二階段的事務消息未能成功發送到消息服務器,消息服務器需要回查發送端,以決定事務消息的提交或回滾。實現事務消息回查邏輯,實現較為復雜,且需要一定的代價。
[0010]因此,目前需要本領域技術人員迫切解決的一個技術問題就是:提出一種事務消息的處理機制,用以以較小的代價保證事務消息的發送結果和事務的業務處理邏輯的一致性。
[0011]申請內容
[0012]本申請實施例所要解決的技術問題是提供一種事務消息的處理方法,用以以較小的代價保證事務消息的發送結果和事務的業務處理邏輯的一致性。
[0013]相應的,本申請實施例還提供了一種事務消息的處理裝置,用以保證上述方法的實現及應用。
[0014]為了解決上述問題,本申請公開了一種事務消息的處理方法,所述的方法包括:
[0015]生成事務消息;
[0016]針對所述事務消息添加指定的處理狀態標識;
[0017]將所述事務消息發送至消息服務器;所述消息服務器用于依據所述處理狀態標識將所述事務消息進行投遞;
[0018]若成功投遞所述事務消息,則所述消息服務器用于刪除所述事務消息。
[0019]優選地,在針對所述事務消息添加指定的處理狀態標識的步驟之后,還包括:
[0020]將所述具有處理狀態標識的事務消息存儲到預設的數據庫中。
[0021]優選地,所述方法還包括:
[0022]判斷是否將所述具有指定的處理狀態標識的事務消息發送至消息服務器;
[0023]若是,則執行所述將事務消息發送至消息服務器的步驟;
[0024]若否,則刪除所述事務消息。
[0025]本申請實施例還公開了一種事務消息的處理方法,包括:
[0026]接收到發送端發送的具有指定的處理狀態標識的事務消息;
[0027]依據所述處理狀態標識投遞所述事務消息;
[0028]若成功投遞所述事務消息,則接收到針對所述事務消息的通知;
[0029]依據所述通知刪除發送端的事務消息。
[0030]優選地,所述方法還包括:
[0031]若投遞所述事務消息失敗,則生成針對所述事務消息的投遞狀態信息;所述投遞狀態信息包括投遞次數、下次投遞時間和/或接收端的標識。
[0032]優選地,所述方法還包括:
[0033]按照預設時間間隔從所述發送端獲取所述指定的處理狀態標識的事務消息;
[0034]重新嘗試投遞所述事務消息。
[0035]本申請實施例還公開了一種事務消息的處理裝置,所述的裝置包括:
[0036]第一生成模塊,用于生成事務消息,并針對所述事務消息添加指定的處理狀態標識;
[0037]發送模塊,用于將所述事務消息發送至消息服務器;所述消息服務器用于依據所述處理狀態標識將所述事務消息進行投遞;
[0038]第一接收模塊,用于若成功投遞所述事務消息,則所述消息服務器用于刪除所述事務消息。
[0039]優選地,所述裝置還包括:
[0040]存儲模塊,用于將所述具有處理狀態標識的事務消息存儲到預設的數據庫中。[0041 ]優選地,所述裝置還包括:
[0042]判斷模塊,用于判斷是否將所述指定的處理狀態標識的事務消息發送至消息服務器;若是,則調用發送模塊;若否,則刪除所述事務消息。
[0043]本申請實施例還公開了一種事務消息的處理裝置,包括:
[0044]第二接收模塊,用于接收到發送端發送的具有指定的處理狀態標識的事務消息;
[0045]第一投遞模塊,用于依據所述處理狀態標識投遞所述事務消息;
[0046]通知模塊,用于若成功投遞所述事務消息,則接收到針對所述事務消息的通知;
[0047]刪除模塊,用于依據所述通知刪除發送端的事務消息。
[0048]優選地,所述裝置還包括:
[0049]第二生成模塊,用于若投遞所述事務消息失敗,則生成針對所述事務消息的投遞狀態信息;所述投遞狀態信息包括投遞次數、下次投遞時間和/或接收端的標識。
[0050]優選地,所述裝置還包括:
[0051]獲取模塊,用于按照預設時間間隔從所述發送端獲取所述指定的處理狀態標識的事務消息;
[0052]第二投遞模塊,用于重新嘗試投遞所述事務消息。
[0053]與現有技術相比,本申請實施例包括以下優點:
[0054]在本申請實施例中,在本地業務系統執行事務的過程中生成事務消息,并且為該事務消息添加指定的處理狀態標識,當事務消息發送至消息服務器時,消息服務器則可以依據所述處理狀態標識將所述事務消息進行投遞,如果消息服務器成功將事務消息投遞到目標業務系統,則消息服務器接收到目標業務系統發送的通知,并依據該通知刪除事務消息。在傳統的事務消息的處理過程中,由于事務消息是兩階段提交,而每一個階段都需