2.3 Persistence
2.3.1 AMQ Message Store
AMQ Message Store是ActiveMQ5.0缺
省的持久化存储。Message commands被保存到transactional journal(由rolling data
logs组成)。Messages被保存到data logs中,同时被reference store进行索引以提高存取速度。Date
logs由一些单独的data log文件组成,缺省的文件大小是32M,如果某个消息的大小超过了data
log文件的大小,那么可以修改配置以增加data log文件的大小。如果某个data log文件中所有的消息都被成功消费了,那么这个data
log文件将会被标记,以便在下一轮的清理中被删除或者归档。以下是其配置的一个例子:
-
<
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 是一个专门针对消息持久化的解决方案。它对典型的消息使用模式进行了优化。在Kaha中,数据被追加到data logs中。当不再需要log文件中的数据的时候,log文件会被丢弃。以下是其配置的一个例子:
-
<
broker
brokerName
=
"broker"
persistent
=
"true"
useShutdownHook
=
"false"
>
-
<persistenceAdapter>
-
<kahaPersistenceAdapter directory="activemq-data" maxDataFileLength="33554432"/>
-
</persistenceAdapter>
-
</
broker
>
2.3.3 JDBC Persistence
目前支持的数据库有Apache Derby, Axion, DB2, HSQL, Informix, MaxDB, MySQL, Oracle, Postgresql, SQLServer, Sybase。
如果你使用的数据库不被支持,那么可以调整StatementProvider 来保证使用正确的SQL方言(flavour of SQL)。通常绝大多数数据库支持以下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,那么需要设置relaxAutoCommit 标志为true。
2.3.4 Disable Persistence
以下是其配置的一个例子:
- <broker persistent="false">
- </broker>