2

我正在使用 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() 完成。

是否可以在不启用持久性的情况下设置临时存储?

4

0 回答 0