持久性
ActiveMQ Classic V5.14.2 / V5.17.0
ActiveMQ Classic 5.14.2 是在宣布 LevelDB 棄用後的第一個版本。該實作已在 5.17.0 中移除。我們再次建議您使用 KahaDB。
ActiveMQ Classic V5.9
在 ActiveMQ Classic 5.9 中,引入了Replicated LevelDB Store。它處理使用 Apache ZooKeeper 從一組配置為複製單一 LevelDB Store 的 Broker 節點中選取一個主節點。然後將所有從屬 LevelDB Store 與主節點同步,並透過複製所有對主節點的更新來保持它們的最新狀態。它可能已成為未來首選的 Master Slave 配置。
ActiveMQ Classic V5.8
在 ActiveMQ Classic 5.8 中,引入了 LevelDB Store。LevelDB Store 是一個基於檔案的持久性資料庫。它經過優化,可提供比 KahaDB 更快的持久性。雖然還不是預設的訊息儲存,我們預期此儲存實作會在未來的版本中成為預設值。
ActiveMQ Classic V5.3
從 5.3 開始 - 我們建議您使用 KahaDB - 它比 AMQ Message Store 提供更好的可擴展性和可恢復性。
AMQ Message Store 雖然比 KahaDB 快 - 但其擴展性不如 KahaDB,且恢復時間較長。
ActiveMQ Classic V4
對於長期持久性,我們建議將 JDBC 與我們的高效能日誌結合使用。如果您願意,您可以使用 JDBC,但速度相當慢。
我們的預設配置使用 Apache Derby 作為預設資料庫,它很容易嵌入 - 但我們支援所有主要的 SQL 資料庫 - 只需在 Xml Configuration 中重新配置您的 JDBC 配置即可。
高效能日誌 - ActiveMQ Classic 4.x
為了在 ActiveMQ Classic V4.x 中實現耐用訊息的高效能,我們強烈建議您使用我們的高效能日誌 - 預設為啟用。它的工作原理很像資料庫;訊息(以及交易提交/回滾和訊息確認)會以最快速度寫入日誌 - 然後我們會定期將日誌檢查點寫入長期持久性儲存(在本例中為 JDBC)。
例如,當使用佇列時,訊息通常會在發布後很快被取用;因此您可以發布 10,000 條訊息,而只有少數訊息未處理 - 因此當我們將檢查點寫入 JDBC 資料庫時,通常只有少量訊息要實際寫入 JDBC。即使我們必須將所有訊息寫入 JDBC,我們仍然可以透過日誌獲得效能提升,因為我們可以使用大型交易批次將訊息插入 JDBC 資料庫,以提升 JDBC 端的效能。
我們的日誌基於 Howl 專案中的許多偉大工作;我們與 Howl 社群保持密切聯繫。然而,由於 ActiveMQ Classic 必須處理任意大小的訊息,我們必須讓我們的日誌處理任何大小的訊息,因此我們不使用 Howl 使用的固定大小記錄模型。
配置持久性
如需完全明確控制配置,請查看 Xml Configuration。但是,設定要使用的持久性配接器的一種快速方法是將以下系統屬性設定為 PersistenceAdapter 實作的類別名稱。
activemq.persistenceAdapter
從命令列執行 Broker 時,我們會在類別路徑上尋找 activemq.xml,除非您指定要使用的檔案。例如:
AMQ 4.x
activemq xbean:file:myconfig.xml
AMQ 3.x
activemq myconfig.xml
或僅
AMQ3.x/AMQ4.x
activemq
以下是一個範例 XML 配置,展示如何配置日誌和 JDBC 持久性。
AMQ 5.x
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:amq="https://activemq.dev.org.tw/schema/core"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
https://activemq.dev.org.tw/schema/core
https://activemq.dev.org.tw/schema/core/activemq-core.xsd">
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>
<broker useJmx="true" xmlns="https://activemq.dev.org.tw/schema/core">
<networkConnectors>
<!-- <networkConnector uri="multicast://default?initialReconnectDelay=100" /> <networkConnector uri="static://(tcp://127.0.0.1:61616)" /> -->
</networkConnectors>
<persistenceFactory>
<journalPersistenceAdapterFactory journalLogFiles="5" dataDirectory="${basedir}/target" />
<!-- To use a different dataSource, use the following syntax : -->
<!-- <journalPersistenceAdapterFactory journalLogFiles="5" dataDirectory="${basedir}/activemq-data" dataSource="#mysql-ds"/> -->
</persistenceFactory>
<transportConnectors>
<transportConnector uri="tcp://127.0.0.1:61636" />
</transportConnectors>
</broker>
<!-- MySql DataSource Sample Setup -->
<!--
<bean id="mysql-ds" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1/activemq?relaxAutoCommit=true"/>
<property name="username" value="activemq"/>
<property name="password" value="activemq"/>
<property name="poolPreparedStatements" value="true"/>
</bean>
-->
</beans>
如需更多詳細資訊,請參閱初始配置指南。
不使用日誌的 JDBC 持久性
若要在不使用日誌的情況下啟用 JMS 訊息的 JDBC 持久性,我們需要將訊息 Broker 的預設持久性配置從
AMQ 4.x
<persistenceAdapter>
<journaledJDBC journalLogFiles="5" dataDirectory="../activemq-data"/>
</persistenceAdapter>
變更為
<persistenceAdapter>
<jdbcPersistenceAdapter dataSource="#my-ds"/>
</persistenceAdapter>
對於 AMQ 3.x
<persistence>
<journalPersistence directory="../var/journal">
<jdbcPersistence dataSourceRef="derby-ds"/>
</journalPersistence>
</persistence>
變更為
<persistence>
<jdbcPersistence dataSourceRef="derby-ds"/>
</persistence>
請務必傳送耐用訊息,以便在等待用戶端取用時將其持久化到資料庫伺服器中。如需有關配置 JDBC 持久性的更多資訊,請參閱 JDBC 支援
災難復原選項
對於具有高 DR 要求的用戶,我們有各種選項可以提供 Replicated Message Store,以便在重大資料中心故障時實現完全容錯移轉。
停用持久性
如果您完全不需要持久性,您可以透過 Xml Configuration 輕鬆停用它。例如:
<broker persistent="false"> </broker>
這將使 Broker 使用 [