阅读ActiveMQ文档(我们使用的是5.3版本),我找到了一个关于在ActiveMQ中使用JDBC持久性适配器的可能性的部分。
有什么好处?它是否提供了性能或可靠性的任何增益?我什么时候应该使用它?
答案 0 :(得分:9)
在我看来,如果您想拥有故障转移代理并且无法使用文件系统,则可以使用JDBC持久性。 JDBC持久性(在我们的测试期间)明显慢于对文件系统的日志记录。对于单个代理,最好使用日志文件系统。
如果您在主动/被动故障转移中运行两个代理,则两个代理必须能够访问同一个日志/数据存储,以便被动代理可以检测并接管主服务器是否发生故障。如果您使用的是日志文件系统,那么这些文件必须位于某种共享网络驱动器上,使用NFS,WinShare,iSCSI等。如果您想要消除文件共享,通常需要更高端的NAS设备。单点故障。
另一个选择是您可以将两个代理指向数据库,大多数应用程序已经可以访问该数据库。权衡价格通常是简单的,因为我们的测试中记录的JDBC持久性较慢。
我们在主动/被动代理对中运行ActiveMQ,并通过NFS挂载到专用NAS设备,并通过日志持久性,它对我们非常有效。我们能够通过我们的系统处理超过600 msgs / sec,没有任何问题。
答案 1 :(得分:2)
嘿,使用日志JDBC似乎比使用JDBC持久性更好,因为日志记录比JDBC持久性快得多。它比仅仅记录持久性更好cos'你在db中有一个额外的消息备份。 Journalled JDBC的另一个优点是日志中的相同数据会在以后持久保存到db中,开发人员可以在需要时访问它!
但是,当您使用带有记录的JDBC的主/从ActiveMQ拓扑时,您可能最终会丢失消息,因为您可能在日志中有尚未进入数据库的消息!
答案 2 :(得分:1)
如果您具有重新传递插件策略并使用主/从设置,则调度程序将用于重新传递。
截至今天,调度程序只能在文件数据库上设置,而不能在JDBC上设置。如果您不注意这一点,您将把所有正在重新发送的消息从HA场景中取出并放在代理本地。
https://issues.apache.org/jira/browse/AMQ-5238是Apache问题跟踪器中的一个问题,它要求为schedulerdb提供JDBC持久性适配器。您可以对其进行投票以实现它。
实际上,即使在最顶级的AMQ HA解决方案LevelDB + ZooKeeper上,调度程序也会从游戏中删除并记录下来以创建问题(页面末尾为http://activemq.apache.org/replicated-leveldb-store.html)。
在JDBC方案中,因此可以认为它不安全且不受支持,但至少没有明确记录,如何为重新传递策略设置数据存储区。