将消息存储在内存上而不是JVM-ActiveMQ上


Store message on memory instead of JVM- ActiveMQ

我正在研究ActiveMQ,其中生产者在PHP中,消费者在JAVA中。我正在使用STOMP将PHP连接到AMQ。总共发送了 10,000 条消息。考虑 JAVA 订阅者关闭的情况,即没有使用者可以使用消息。在我的本地系统上尝试这种情况时,在 3000 条消息之后,ActiveMQ 会抛出 Java.MemoryOutOfBound 异常。

所以我正在考虑一些解决方案:1. ActiveMQ有什么方法可以将消息存储在KahaDB上而不是内存中?2.我可以尝试任何系统调整(已经尝试将Java堆大小增加到3GB,我能够发送9000条消息,但在相同的错误之后),任何可以启用或禁用的ActiveMQ选项都可以提供帮助。3.有什么比我想到的解决方案更好的解决方案吗?

查看 ActiveMQ 文档,您可以将代理切换到使用 KahaDB 购买配置持久化

<broker brokerName="broker" ... >
 <persistenceAdapter>
  <kahaDB directory="activemq-data" journalMaxFileLength="32mb"/>
 </persistenceAdapter>
 ...
</broker>

您可以根据自己的情况应用许多选项进行调整,请查看

http://activemq.apache.org/kahadb.html