2015-05-25 78 views
3

當我們使用ActiveMQ時,我們可以信任ActiveMQ服務器的可靠性。例如,在開發非實時軟件時(不需要立即發送數據,但應該發送)。我們可以信任activeMQ作爲確認郵件傳遞的可靠來源嗎?例如,我從製作人發送一個XML文件。發送該文件到ActiveMQ確認ActiveMQ交付。那我能信任ActiveMQ並刪除xml的本地副本嗎?ActiveMQ保證消息傳遞嗎?

編輯

當郵件到達服務器的ActiveMQ它的可靠。我們如何確保生產者服務器鏈接的可靠性。在生產者是java SE應用程序的情況下。 ActiveMQ客戶端如何處理這些場景

  • 在準備發送數據時強制關閉應用程序。
  • 發送消息時發生網絡故障。

enter image description here

回答

2

如果您使用事務和持久傳遞發送到ActiveMQ的(幾乎是默認的,如果你去通過JMS),交易成功提交 - 是的。然後ActiveMQ已經在永久存儲上保存了消息(通常是磁盤)。

然後,當然,磁盤可能會崩潰,人爲錯誤和地震可能會打你,但否則,信息是好的。

+0

感謝@Petter經紀人消費者連接是可靠的。我們如何確保生產者在這種情況下保證可靠性[生產者和客戶之間的網絡故障,客戶端應用程序在準備發送消息時停止。 – Burusothman

+0

根據您的客戶端/框架,您將在發送過程中的某個時間進行提交。如果成功,您的信息是安全的,您可以繼續並刪除舊數據。 –

0

我建議生產者不能丟棄XML消息,直到客戶端確認它已收到消息。僅僅確認它已被ActiveMQ服務器接收是不夠的,因爲消息在客戶端收到它之前沒有任何價值。

所以,爲了達到這個目的,我會找到某種確認接受是一種很好的方法。簡化的系統可能工作是這樣的......

初始設置

首先,創建兩個主題:「信息」和「郵件回執」。

接下來,將Producer設置爲發佈到'messages'主題,並訂閱'message-receipts'主題。生產者還應該能夠維護所有已發送消息的列表,但尚未確認。

此外,您的客戶將訂閱「消息」主題,併發布到「消息收據」主題。

發佈消息

要發佈的消息,生產者將首先生成一個XML消息,並給它一個唯一的ID可以識別的信息。然後它將在「消息」主題上發佈它。

然後,客戶端將在「消息」主題上看到消息。它必須轉而發佈一個'message-receipts'響應,它將包含收到的消息的ID。

最後,製片人會看到「郵件回執」消息,可以確認的消息已經被消息收據ID與列表進行比較送往尚未得到證實的消息。一旦確認,該消息將從「已發送但尚未驗證」列表中刪除。

處理未接收到的消息

生產者可以重新發送一條消息,如果已經發生了一段時間沒有收據。

2

的ActiveMQ被綁定到JMS規範,該規範規定任一JMS提供者必須,默認情況下,「持續性」的消息的保障傳遞。這種擔保確實會帶來沉重的性能價格,因爲經紀人必須在將消息確認給製作人之前,將其消息安全地保留在其消息存儲中。本次擔保不需要本地JMS交易,但可用於將消息分批發給經紀商,這是克服高性價比的一種方式。