非持久化化消息存储
正常情况下,非持久化消息是存储在内存中的,持久化消息是存储在文件中的。能够存储的最大消息数据在${PMQ_HOME}/conf/pmq.xml文件中的systemUsage节点,SystemUsage配置设置了一些系统内存和硬盘容量。
<systemUsage>
<systemUsage>
<memoryUsage>
<!--
设置整个Primeton MQ节点的“可用内存限制”。
这个值不能超过Primeton MQ本身设置的最大内存大小。
其中的percentOfJvmHeap属性表示百分比。占用70%的堆内存-->
<memoryUsage percentOfJvmHeap="70" />
</memoryUsage>
<storeUsage>
<!--
该标记设置整个Primeton MQ节点,用于存储“持久化消息”的“可用磁盘空间”。
该子标记的limit属性必须要进行设置-->
<storeUsage limit="100 gb"/>
</storeUsage>
<tempUsage>
<!--
一旦Primeton MQ服务节点存储的消息达到了memoryUsage的限制,
非持久化消息就会被转储到temp store区域,
虽然非持久化消息不进行持久化存储,但是Primeton MQ为了防止“数据洪峰”
出现时非持久化消息大量堆积致使内存耗尽的情况出现,
还是会将非持久化消息写入到磁盘的临时区域——temp store。
这个子标记就是为了设置这个temp store区域的“可用磁盘空间限制”
-->
<tempUsage limit="50 gb"/>
</tempUsage>
</systemUsage>
</systemUsage>
从上面的配置一个结论,当非持久化消息堆积到一定程度的时候,也就是内存超过指定的设置阀值时,Primeton MQ会将内存中的非持久化消息写入到临时文件,以便腾出内存。但是它和持久化消息的区别是,重启之后,持久化消息会从文件中恢复,非持久化的临时文件会直接删除。