我正在管理使用我们的程序员编写的应用程序运行 tomcat6 的服务器。它使用 ActiveMQ。应用程序将 ActiveMQ 队列数据保存在 $JAVA_TEMP/activemq-data 中。Debian Squeeze 上的 Tomcat6 在每次重新启动时都会清除 $JAVA_TEMP(默认为 /tmp/tomcat6-temp)。程序员说,这些数据在服务重启之间必须是持久的。java servlet 保存持久数据的合适位置是什么?恕我直言,它不是 $JAVA_TEMP 目录。或者可能是程序员是对的,我应该改变默认的 Debian tomcat 行为?
2 回答
ActiveMQ 提供持久性适配器来存储服务器重启所需的消息。持久化消息有不同的策略。
基于文件的持久性存储:在此策略中,消息存储到文件存储中。您可以在 ActiveMQ 配置中指定目录。看下面的例子,更多配置请参考:http ://activemq.apache.org/amq-message-store.html
<broker brokerName="broker" persistent="true" useShutdownHook="false">
<persistenceAdapter>
<amqPersistenceAdapter directory="activemq-data" maxFileLength="32mb"/>
</persistenceAdapter>
<transportConnectors>
<transportConnector uri="tcp://localhost:61616"/>
</transportConnectors>
</broker>
基于数据库的持久性存储:在此策略中,消息存储在数据库中,如果您的消息很关键,请使用此策略。有关配置 JDBC - 数据库持久性的信息,请参阅http://activemq.apache.org/jdbc-support.html
当谈到 java servlet 的存储时,会想到可伸缩性。通常,Java servlet 被构建和设计为可同时部署在多个服务器(tomcat 实例等)上,以实现垂直扩展。因此,经验法则是尽可能使用数据库存储。在您的特定情况下,您似乎运行单个服务器,您可以使用文件系统上您想要的任何位置。也许您想将数据存储在 NAS/SAN 上。
ActiveMQ 可以通过持久性适配器处理大多数存储选项。
此链接描述了 ActiveMQ 如何处理持久性以及如何配置它。这是一个丰富的领域,它取决于很多要求以及您喜欢如何进行设置。