我正在使用ActiveMQ 5.7.0,并且如果队列目标达到某个内存阈值,则希望fileQueueCursor溢出到临时存储中。我不想启用持久性。
我已配置了destinationPolicy:
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue=">">
<pendingQueuePolicy>
<fileQueueCursor />
</pendingQueuePolicy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
我还配置了具有低内存使用量的systemUsage进行测试:
<systemUsage>
<systemUsage>
<memoryUsage>
<memoryUsage limit="5 mb" />
</memoryUsage>
<tempUsage>
<tempUsage limit="32 mb" />
</tempUsage>
</systemUsage>
</systemUsage>
我的调试器中运行了一些代码,它们会将消息插入队列。在运行时,我可以看到有关内存使用量增加的消息:
2013-May-09 17:40:12.963 PDT DEBUG [ActiveMQ Transport:tcp:///127.0.0.1:63223 @ 61616] [org.apache.activemq.usage.Usage:fireEvent] [Usage.java: 245] [] [] [] - 默认值:内存:queue:// testReq:内存:使用率从:可用内存的69%变为:可用内存的70%
我注意到AMQ的FilePendingMessageCursor.flushToDisk()在大约70%的内存使用率下被调用,但因为'store'成员为null,所以代码不会被执行。
当我启用持久性时,存储不为null,flushToDisk()完成。
是否可以在不启用持久性的情况下设置临时存储?