非持久化消息数据容量设置
持久化消息存在文件中,非持久化消息存在内存中。能够存储的最大消息数据,取决于activemq安装目录下conf/activemq.xml文件中的broker标签下的systemUsage节点配置。SystemUsage配置设置了一些系统内存和硬盘容量
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}">
<!--省略其他配置-->
<systemUsage>
<memoryUsage>
<!-- 该标记设置整个ActiveMQ节点的"可用内存限制"。这个值不能超过ActiveMQ本身设置的足底啊内存大小-->
<!-- 其中的percentOfJvmHeap属性标识百分比。占用70%的堆内存 -->
<memoryUsage percentOfJvmHeap="70" />
</memoryUsage>
<storeUsage>
<!-- 该标记设置整个ActiveMQ节点,用于存储"持久化消息"的可用磁盘空间。该标记的limit属性必须要进行设置 -->
<storeUsage limit="100 gb"/>
</storeUsage>
<tempUsage>
<!--ActiveMQ对存储做的优化。一旦ActiveMQ服务节点存储的消息达到了memoryUsage的限制-->
<!--非持久化消息就会被转储到temp store区域,虽然我们说过非持久化消息不进行持久化存储-->
<!--但是ActiveMQ为了防止"数据洪峰"出现时非持久化消息大量堆积致使内存耗尽的情况出现,-->
<!--还是会将非持久化消息写入到磁盘的临时区域temp store。这个字标记就是为了设置这个-->
<!--temp store区域的"可用磁盘空间限制" -->
<tempUsage limit="50 gb"/>
</tempUsage>
</systemUsage>
<!-- 省略其他配置 -->
</broker>
总结:
从上面的配置,我们需要get到一个结论。当非持久化消息堆积到一定程度的时候,也就是内存超过指定的设置阈值时,ActiveMQ会将内存中的非持久化消息写入到临时文件,以便腾出内存但是它和持久化消息的区别是,重启之后,持久化消息会从文件中恢复,非持久化的临时文件会被直接删除。