私は 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-May-09 17:40:12.963 PDT DEBUG [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% のメモリ使用量で呼び出されることに気付きましたが、「store」メンバーが null であるため、コードは実行されません。
永続性を有効にすると、ストアは null ではなく、flushToDisk() が完了します。
永続性を有効にせずに一時ストアを設定することはできますか?