ActiveMQ 持久化配置之AMQ Message Store

  ActiveMQ不仅支持persistent和non-persistent两种方式,而其ActiveMQ还支持消息的recovery(恢复)方式。

  消息发送到Queue和Topic的存储原理和结构是不同的,ActiveMQ主要支持以下几种方式:

  · AMQ消息存储-默认的消息存储。

  · KahaDB消息存储-提供了容量的提升和恢复能力。

​  · JDBC消息存储-消息基于JDBC存储。

  · Memory消息存储-基于内存的消息存储。

  AMQ Message Store

  AMQ Message Store是ActiveMQ5.0及以上版本缺省的持久化存储。它是一个基于文件、事务存储设计为快速消息存储结构。AMQ消息存储是一种可嵌入的事务性消息存储解决方案,具有极高的速度和可靠性。消息命令被写入事务日志(包含滚动数据日志),这意味着写入速度非常快,并且存储状态很容易恢复。
在这里插入图片描述
  Message被保存到data logs中,data logs由多个日志文件data log组成,通常大小为32MB,若某消息大小超过32MB,可以修改配置增加data log的大小。在Message写入data logs时,同时会被Reference Store Indexes索引,以增加日志查询速度。Message被消费时,data log内条目会被标记,若data log内所有消息均被消费,data log整体被标记。

  AMQ配置:

  使用AMQ Message Store需修改activemq.xml中broker内persistenceAdapter节点:

<broker brokerName="broker" persistent="true" useShutdownHook="false">
    <persistenceAdapter>
		<amqPersistenceAdapter 
			directory="${activemq.base}/activemq-data" 
			maxFileLength="32mb"/>
    </persistenceAdapter>
    <transportConnectors>
		<transportConnector uri="tcp://localhost:61616"/>
    </transportConnectors>
</broker>

  除了在配置文件中配置外,还可以通过编码方式配置AMQ:

BrokerService broker = new BrokerService();
PersistenceAdapterFactory persistenceFactory = new AMQPersistenceAdapterFactory();
persistenceFactory.setMaxFileLength(1024*16);
persistenceFactory.setPersistentIndex(true);
persistenceFactory.setCleanupInterval(10000);
broker.setPersistenceFactory(persistenceFactory);
broker.addConnector("tcp://localhost:61616");
broker.start();

  amqPersistenceAdapter节点属性:

属性名 默认值 注释
directory activemq-data 用于指定消息存储日志文件的目录。
useNIO true 使用NIO将消息写入日志。
syncOnWrite false 同步每次写入磁盘。
maxFileLength 32mb 日志文件的最大大小。
persistentIndex true 对消息日志使用持久索引。如果设置为false,使用内存维护结构。
maxCheckpointMessageAddSize 4kb 自动提交之前保留在事务中的最大消息数。
cleanupInterval 30000 检查丢弃/移动消息数据日志之前的等待时间(毫秒)。
indexBinSize 1024 索引使用的默认位数,位数越大,性能越好。
indexKeySize 96 索引键大小-键是消息ID。
indexPageSize 16kb 索引页大小,索引页越大,性能越好。
directoryArchive archive 用于存储丢弃的数据日志的目录的路径
archiveDataLogs false 如果将真实的数据日志移至归档目录而不是被删除

  AMQ数据结构:
在这里插入图片描述

  · broker name:消息代理的名称用于区分其消息数据目录。默认情况下,代理名称是本地主机。

  · archive:消息日志数据移除后会存储在此,这个目录只有在archiveDataLogs=true才存在。

  · journal:消息日志数据会存储在此。如果某些消息长时间不适用,将会被移除或存档。

  · kr-store:主要存储AMQ Message Store的映射部分。它默认用Kaha数据库去索引和映射消息在journal目录中。

  · data:用于消息日志数据索引存储、在journal目录中用于映射消息的集合。

  · state:用于存储持久化订阅的消息日志,以便日后恢复使用。

  · tmp-storage:用于保存临时消息的数据文件,这些消息可以存储在磁盘上以减轻内存消耗,例如,非持久性主题消息,等待传递给活动但速度较慢的订户。

猜你喜欢

转载自blog.csdn.net/securitit/article/details/106653645