持久性
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 中,引入了 复制 LevelDB 存储。它处理使用 Apache ZooKeeper 从一组配置为复制单个 LevelDB 存储的代理节点集中选择主节点。然后将所有从属 LevelDB 存储与主节点同步,并通过将所有更新复制到主节点来保持它们最新。它可能成为未来首选的 主从 配置。
ActiveMQ Classic V5.8
在 ActiveMQ Classic 5.8 中,引入了 LevelDB 存储。LevelDB 存储是一个基于文件的持久性数据库。它经过优化,可以提供比 KahaDB 更快的持久性。虽然它还不是默认的消息存储,但我们预计此存储实现将在未来版本中成为默认存储。
ActiveMQ Classic V5.3
从 5.3 开始,我们建议您使用 KahaDB,它比 AMQ 消息存储 提供了更好的可扩展性和恢复能力。
AMQ 消息存储 虽然比 KahaDB 快,但它不像 KahaDB 那样可扩展,恢复时间也更长。
ActiveMQ Classic V4
对于长期持久性,我们建议使用 JDBC 结合我们高性能日志。如果您愿意,可以使用 JDBC,但速度相当慢。
我们开箱即用的默认配置使用 Apache Derby 作为默认数据库,该数据库易于嵌入,但我们支持所有 主要的 SQL 数据库,只需在 XML 配置 中重新配置 JDBC 配置即可。
高性能日志 - ActiveMQ Classic 4.x
为了在 ActiveMQ Classic V4.x 中实现持久性消息的高性能,我们强烈建议您使用我们的高性能日志,该日志默认启用。它有点像数据库;消息(以及事务提交/回滚和消息确认)尽可能快地写入日志,然后在间隔中将日志检查点到长期持久性存储(在本例中为 JDBC)。
例如,在使用队列时,消息通常在发布后不久就被消费;因此,您可能会发布 10,000 条消息,而只有几条消息未完成;因此,当我们将检查点写入 JDBC 数据库时,我们通常只需要将少量消息实际写入 JDBC。即使我们必须将所有消息写入 JDBC,我们仍然可以通过日志获得性能提升,因为我们可以使用大型事务批处理将消息插入 JDBC 数据库以提高 JDBC 端的性能。
我们的日志基于 Howl 项目中大量出色的工作;我们与 Howl 社区保持密切联系。但是,由于 ActiveMQ Classic 必须处理任意大的消息大小,因此我们不得不让我们的日志处理任何大小的消息,因此我们没有使用 Howl 使用的固定大小记录模型。
配置持久性
有关配置的完整显式控制,请查看 XML 配置。但是,设置要使用哪个持久性适配器的快捷方式是将以下系统属性设置为 PersistenceAdapter 实现的类名。
activemq.persistenceAdapter
从命令行运行代理时,我们会查找类路径上的 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.apache.org/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.apache.org/schema/core
https://activemq.apache.org/schema/core/activemq-core.xsd">
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>
<broker useJmx="true" xmlns="https://activemq.apache.org/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 持久性,我们需要将消息代理的默认持久性配置从
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 要求的人员,我们有各种选项可以提供 复制消息存储,以在发生重大数据中心故障时允许完全故障转移。
禁用持久性
如果您根本不希望持久性,可以通过 XML 配置 轻松禁用它。例如:
<broker persistent="false"> </broker>
这将使代理使用 [