2009-12-03 60 views

回答

9

在我看来,如果你想拥有一个故障转移代理并且你不能使用该文件系统,你将使用JDBC持久性。 JDBC持久性(在我们的测试期间)明显比日志记录到文件系统慢。对于单个代理,日志文件系统是最好的。

如果在主动/被动故障转移中运行两个代理,则两个代理必须有权访问相同的日记/数据存储,以便被动代理可以在主服务器出现故障时检测并接管。如果您使用的是日志文件系统,那么这些文件必须位于某种共享网络驱动器上,使用NFS,WinShare,iSCSI等。如果您想消除文件共享,通常需要更高端的NAS设备单点故障。

另一种选择是您可以将两个经纪人指向数据库,大多数应用程序已有权访问该数据库。在性能价格方面,权衡通常是简单的,因为在我们的测试中日志记录的JDBC持久性较慢。

我们在一个主动/被动代理对中运行ActiveMQ,并通过NFS挂载到专用NAS设备进行日志记录,并且它对我们非常有用。我们能够通过我们的系统处理超过600个信息/秒,没有问题。

+0

Yeap,那正是我的经验。 在我们的测试中,JDBC持久性比日志选项慢了许多倍。 谢谢 – 2009-12-03 17:53:35

2

嘿,使用日志JDBC似乎比使用JDBC持久性更好,因为日志记录比JDBC持久性要快得多。这比仅仅支持持久性要好,因为你有额外的db中的消息备份。已编辑的JDBC具有的额外优点是,日志中的相同数据稍后会保存到数据库中,并且可以在需要时由开发人员访问!

但是,当您使用带有日记的JDBC的主/从ActiveMQ拓扑时,最终可能会丢失消息,因为日记中可能还有尚未进入数据库的消息!

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场景中,因此它可以被认为是不安全和不受支持的,但至少没有明确记录,如何为重新传输策略设置数据存储。