ActiveMQ-消息存儲

ActiveMQ不僅支持persistent和non-persistent兩種方式,還支持消息的恢復( recovery )方式

Queue的存儲是很簡單的,就是一個FIFO的Queue
對於持久化訂閱主題,每一個消費者將獲得一個消息的複製。

消息存儲的方式

ActiveMQ提供了一個插件式的消息存儲,類似於消息的多點傳播

AMQ消息存儲

基於文件的存儲方式,是以前的默認消息存儲

KahaDB消息存儲

KahaDB消息存儲-提供了容量的提升和恢復能力,是現在的默認存儲方式
KahaDB是目前默認的存儲方式,可用於任何場景,提高了性能和恢復能力。消息存儲使用一個事務日誌和僅僅用一個索引文件來存儲它所有的地址。
KahaDB是一個專門針對消息持久化的解決方案,它對典型的消息使用模式進行了優化。在Kaha中,數據被追加到data logs中。當不再需要log文件中的數據的時候,log文件會被丟棄。

KahaDB基本配置例子
<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>
KahaDB消息存儲屬性

director:KahaDB存放的路徑,默認值activemq-data
indexWriteBatchSize: 批量寫入磁盤的索引page數量,默認值1000
indexCacheSize:內存中緩存索引page的數量,默認值10000
enableIndexWriteAsync:是否異步寫出索引,默認false
journalMaxFileLength:設置每個消息data log的大小,默認是32MB
enableJournalDiskSyncs:設置是否保證每個沒有事務的內容,被同步寫入磁盤,JMS持久化的時候需要,默認爲true
cleanupInterval:在檢查到不再使用的消息後,在具體刪除消息前的時間,默認30000
checkpointInterval:checkpoint的間隔時間,默認5000
ignoreMissingJournalfiles:是否忽略丟失的消息日誌文件,默認false
checkForCorruptJournalFiles:在啓動的時候,將會驗證消息文件是否損壞,默認false
checksumJournalFiles:是否爲每個消息日誌文件提供checksum,默認false
archiveDataLogs: 是否移動文件到特定的路徑,而不是刪除它們,默認false
directoryArchive:定義消息已經被消費過後,移動data log到的路徑,默認null
:databaseLockedWaitDelay:獲得數據庫鎖的等待時間 (used by shared master/slave),默認10000
maxAsyncJobs:設置最大的可以存儲的異步消息隊列,默認值10000,可以和concurrentMessageProducers 設置成一樣的值
concurrentStoreAndDispatchTransactions:是否分發消息到客戶端,同時事務存儲消息,默認true
concurrentStoreAndDispatchTopics:是否分發Topic消息到客戶端,同時進行存儲,默認true
concurrentStoreAndDispatchQueues:是否分發queue消息到客戶端,同時進行存儲,默認true

JDBC消息存儲

JDBC消息存儲-消息基於JDBC存儲的

<beans>
<broker brokerName="test-broker" persistent=true xmlns="http://activemq.apache.org/schema/core">
<persistenceAdapter>
<jdbcPersistenceAdapter dataSource=“#mysql-ds"/>
          </persistenceAdapter>
    </broker>
<bean name="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName"><value>org.gjt.mm.mysql.Driver</value></property> <property
name="url"><value>jdbc:mysql://192.168.1.100:3306/test?useUnicode=true&amp;characterEncodi ng=UTF-8</value></property>
<property name="username"> <value>root</value> </property>
<property name="password" value="cc"/> </bean>

JDBC Message Store with ActiveMQ Journal
這種方式克服了JDBC Store的不足,使用快速的緩存寫入技術,大大提高了性能

<beans>
<broker brokerName="test-broker" xmlns="http://activemq.apache.org/schema/core">
<persistenceFactory> <journalPersistenceAdapterFactory
journalLogFiles="4" journalLogFileSize="32768" useJournal="true" useQuickJournal="true" dataSource="#derby-ds" dataDirectory="activemq-data" />
</persistenceFactory> </broker>
</beans>

JDBC Store和JDBC Message Store with ActiveMQ Journal的區別
1:Jdbc with journal的性能優於jdbc
2:Jdbc用於master/slave模式的數據庫分享
3:Jdbc with journal不能用於master/slave模式
4:一般情況下,推薦使用jdbc with journal

Memory 消息存儲

Memory 消息存儲-基於內存的消息存儲
內存消息存儲主要是存儲所有的持久化的消息在內存中。這裏沒有動態的緩存存在,所以你必須注意設置你的broker所在的JVM和內存限制

<beans>
<broker brokerName="test-broker" persistent="false" xmlns="http://activemq.apache.org/schema/core">
<transportConnectors>
<transportConnector uri="tcp://localhost:61635"/>
</transportConnectors> </broker>
</beans>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章