AMQ 訊息儲存

功能 > 持久性 > AMQ 訊息儲存

基本概念

這是 AcitveMQ 5 及以上版本的預設儲存方式。AMQ 訊息儲存是一個可嵌入的交易訊息儲存解決方案,它非常快速且可靠。
訊息命令會寫入到一個交易日誌中 - 該日誌由滾動資料日誌組成 - 這表示寫入速度非常快,且儲存的狀態很容易恢復。

訊息本身會持久儲存在日誌的資料日誌中 - 並由參考儲存 (預設為 Kaha) 持有其位置的參考,以便快速檢索。

訊息的參考會保存在記憶體中,並定期插入參考儲存以提升效能。

訊息會儲存在資料日誌中,而資料日誌是個別檔案,通常大小為 32mb (雖然這是可設定的,如果訊息大小大於檔案大小,則檔案可能會更大)。當資料日誌中的所有訊息都已成功使用後,該資料日誌檔案會標記為已準備好刪除 - 或封存 - 這會在下一個清理期間發生。

組態

預設情況下,ActiveMQ Classic 將會使用 AMQ 儲存及其預設設定。但是,您可以透過明確定義其持久性配接器 (amqPersistenceAdapter) 來設定 AMQ 儲存的屬性。

 <broker brokerName="broker" persistent="true" useShutdownHook="false">
    <persistenceAdapter>
      <amqPersistenceAdapter directory="${activemq.base}/activemq-data" maxFileLength="32mb"/>
    </persistenceAdapter>
    <transportConnectors>
      <transportConnector uri="tcp://127.0.0.1:61616"/>
    </transportConnectors>
  </broker>

上述顯示了透過 amqPersistenceAdapter 設定 AMQ 儲存所需的組態 - 以及明確設定 directory 和 maxFileLength 屬性。

AMQ 儲存屬性

屬性名稱 預設值 註解
directory activemq-data 用於儲存訊息儲存資料和日誌檔案的目錄路徑
useNIO true 使用 NIO 將訊息寫入到資料日誌
syncOnWrite false 將每次寫入同步到磁碟
maxFileLength 32mb 設定訊息資料日誌最大大小的提示
persistentIndex true 使用訊息日誌的持久性索引。如果此值為 false,則會維護一個記憶體中的結構
maxCheckpointMessageAddSize 4kb 在自動提交之前,交易中要保留的最大訊息數量
cleanupInterval 30000 檢查是否要捨棄/移動不再使用的訊息資料日誌的時間 (毫秒)
indexBinSize 1024 索引使用的預設 bin 數量。bin 大小越大 - 索引的相對效能就越好
indexKeySize 96 索引鍵的大小 - 索引鍵是訊息 ID
indexPageSize 16kb 索引頁面的大小 - 頁面越大 - 索引的寫入效能越好
directoryArchive archive 用於儲存已捨棄的資料日誌的目錄路徑
archiveDataLogs false 如果為 true,則資料日誌會移動到封存目錄,而不是被刪除

資料結構

在為 AMQ 儲存定義的資料目錄中,具有以下目錄結構

頂層

訊息代理的名稱用於區分其訊息資料目錄。預設情況下,代理名稱為本機主機。
在此頂層目錄下方是以下子目錄

archive

訊息資料日誌在捨棄時會移動到此處。
注意:僅當啟用屬性 archiveDataLogs 時,此目錄才會存在

journal

用於保存訊息資料日誌

kr-store

Kaha 參考儲存的目錄結構 (如果使用)

data

用於參考日誌中訊息資料日誌的索引,以便快速檢索

state

儲存的狀態 - 即持久訂閱者的名稱 - 其原因在 復原 中說明

tmp-storage

用於保存可能儲存在磁碟上的暫時訊息的資料檔案,以減輕記憶體消耗 - 例如,等待傳遞給作用中但速度較慢的訂閱者的非持久主題訊息。

復原

如果訊息代理未正確關閉,則會清除參考儲存索引,並重新執行訊息資料檔案 (其中包含訊息/確認和交易界限) 以重新建立訊息儲存狀態。如果使用 Kaha 參考儲存 (預設),則可以透過刪除 kr-store/state/ 目錄來強制自動復原。

Apache、ActiveMQ、Apache ActiveMQ、Apache 羽毛標誌和 Apache ActiveMQ 專案標誌是 Apache 軟體基金會的商標。Copyright © 2024, The Apache Software Foundation. 根據 Apache License 2.0 授權。