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