2.3 Persistence
2.3.1 AMQ Message Store
??? AMQ Message Store是ActiveMQ5.0缺
省的持久化存儲(chǔ)。Message commands被保存到transactional journal(由rolling data
logs組成)。Messages被保存到data logs中,同時(shí)被reference store進(jìn)行索引以提高存取速度。Date
logs由一些單獨(dú)的data log文件組成,缺省的文件大小是32M,如果某個(gè)消息的大小超過(guò)了data
log文件的大小,那么可以修改配置以增加data log文件的大小。如果某個(gè)data log文件中所有的消息都被成功消費(fèi)了,那么這個(gè)data
log文件將會(huì)被標(biāo)記,以便在下一輪的清理中被刪除或者歸檔。以下是其配置的一個(gè)例子:
- < broker ? brokerName = "broker" ? persistent = "true" ? useShutdownHook = "false" > ??
- ??<persistenceAdapter>??
- ?????<amqPersistenceAdapter?directory="${activemq.base}/data"?maxFileLength="32mb"/>??
- ??</persistenceAdapter>??
- </ broker > ??
Property name | Default value | Comments |
directory | activemq-data | the path to the directory to use to store the message store data and log files |
useNIO | true | use NIO to write messages to the data logs |
syncOnWrite | false | sync every write to disk |
maxFileLength | 32mb | a hint to set the maximum size of the message data logs |
persistentIndex | true | use a persistent index for the message logs. If this is false, an in-memory structure is maintained |
maxCheckpointMessageAddSize | 4kb | the maximum number of messages to keep in a transaction before automatically committing |
cleanupInterval | 30000 | time (ms) before checking for a discarding/moving message data logs that are no longer used |
indexBinSize | 1024 | default number of bins used by the index. The bigger the bin size - the better the relative performance of the index |
indexKeySize | 96 | the size of the index key - the key is the message id |
indexPageSize | 16kb | the size of the index page - the bigger the page - the better the write performance of the index |
directoryArchive | archive | the path to the directory to use to store discarded data logs |
archiveDataLogs | false | if true data logs are moved to the archive directory instead of being deleted |
?
2.3.2 Kaha Persistence
??? Kaha Persistence 是一個(gè)專門針對(duì)消息持久化的解決方案。它對(duì)典型的消息使用模式進(jìn)行了優(yōu)化。在Kaha中,數(shù)據(jù)被追加到data logs中。當(dāng)不再需要log文件中的數(shù)據(jù)的時(shí)候,log文件會(huì)被丟棄。以下是其配置的一個(gè)例子:
- < broker ? brokerName = "broker" ? persistent = "true" ? useShutdownHook = "false" > ??
- ??????<persistenceAdapter>??
- ????????<kahaPersistenceAdapter?directory="activemq-data"?maxDataFileLength="33554432"/>??
- ??????</persistenceAdapter>??
- </ broker > ??
?
2.3.3 JDBC Persistence
??? 目前支持的數(shù)據(jù)庫(kù)有Apache Derby, Axion, DB2, HSQL, Informix, MaxDB, MySQL, Oracle, Postgresql, SQLServer, Sybase。
??? 如果你使用的數(shù)據(jù)庫(kù)不被支持,那么可以調(diào)整StatementProvider 來(lái)保證使用正確的SQL方言(flavour of SQL)。通常絕大多數(shù)數(shù)據(jù)庫(kù)支持以下adaptor:
- org.activemq.store.jdbc.adapter.BlobJDBCAdapter
- org.activemq.store.jdbc.adapter.BytesJDBCAdapter
- org.activemq.store.jdbc.adapter.DefaultJDBCAdapter
- org.activemq.store.jdbc.adapter.ImageJDBCAdapter
?? 也可以在配置文件中直接指定JDBC adaptor,例如:
- < jdbcPersistenceAdapter ?? adapterClass = "org.apache.activemq.store.jdbc.adapter.ImageBasedJDBCAdaptor" /> ??
?
- <persistence>??
- ??????<jdbcPersistence?dataSourceRef="?mysql-ds"/>??
- </persistence>??
- ??
- <bean?id="mysql-ds"?class="org.apache.commons.dbcp.BasicDataSource"?destroy-method="close">??
- ??????<property?name="driverClassName"?value="com.mysql.jdbc.Driver"/>??
- ??????<property?name="url"?value="jdbc:mysql://localhost/activemq?relaxAutoCommit=true"/>??
- ??????<property?name="username"?value="activemq"/>??
- ??????<property?name="password"?value="activemq"/>??
- ??????<property?name="poolPreparedStatements"?value="true"/>??
- </bean>??
??? 需要注意的是,如果使用MySQL,那么需要設(shè)置relaxAutoCommit 標(biāo)志為true。
?
2.3.4 Disable Persistence
??? 以下是其配置的一個(gè)例子:
- <broker?persistent="false">??
- </broker>