我是 Apache ActiveMQ 的新手,在 ActiveMQ 中发送和存储大量大消息(最大的大约 100mb)时遇到了一些麻烦。消息是持久的,所以据我所知它们存储在硬盘驱动器上,而不是内存中。但奇怪的是,当数据库大小(KahaDB 文件夹)达到 2.8Gb(4Gb jvm 堆的 70%)时,ActiveMQ 崩溃了。似乎 ActiveMQ 仍然将所有消息存储在内存中。我需要首先存储所有消息,然后我将全部使用它们。
我的配置 activemq.xml
<policyEntry queue=">" producerFlowControl="false" memoryLimit="100MB">
<pendingQueuePolicy>
<fileQueueCursor />
</pendingQueuePolicy>
</policyEntry>
...
<systemUsage>
<systemUsage>
<memoryUsage>
<memoryUsage percentOfJvmHeap="70" />
</memoryUsage>
<storeUsage>
<storeUsage limit="100 gb"/>
</storeUsage>
<tempUsage>
<tempUsage limit="50 gb"/>
</tempUsage>
</systemUsage>
</systemUsage>
...
<transportConnectors>
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=204857600"/>
</transportConnectors>
这就是我如何用 java 发送消息。Try-with-resources 关闭所有。
try (Connection conn = queueConnFactory.createConnection();
Session session = conn.createSession(true, Session.AUTO_ACKNOWLEDGE);
MessageProducer producer = session.createProducer(getTargetQueue())) {
ObjectMessage message = session.createObjectMessage(transferMessage);
producer.send(message);
}
慕仙森
相关分类