2015-06-09 40 views
1

我们正在使用ActiveMQ作为使用JDBC持久性的消息代理来运行内部EAI系统。ActiveMQ在数据库级别的离线消息传输

在那里,我们有一个冷备用故障切换解决方案,每个都有自己的数据库模式(由于几个原因)。

现在,如果主服务器出现故障并想启动备份,我们希望将所有未传送的数据库级别消息从一个节点传送到另一个节点。

有一个看表“ACTIVEMQ_MSGS”使我们不能确定,如果我们能做到这一点没有任何缺点或副作用:

  • 有一列“ID”不落后任何DB-序列 - 可以在备份经纪人处理这个?
  • “MSGID_PROD”列包含主服务器的主机名 - 如果消息应由具有不同名称的代理处理,是否会出现问题?
  • 有一列“MSGID_SEQ”(它似乎总是“1”) - 这是什么意思?我们可以保留它吗?

感谢和亲切的问候,

迈克尔

回答

0

我会提高对这个想法大红旗。那么,是的,从理论上讲,你可以很好地成功,但是你不应该一件件地接触JDBC数据。

ActiveMQ有几种不同的主/从HA设置模式。为主控和从属使用共享存储,或使用复制存储(LevelDB + ZooKeeper)。

即使共享的JDBC存储也可以被复制,但在数据库级别上。

好吧,所以你不知何故需要另一个设置比官方的,好。有一种方法,但不使用原始SQL命令。通过“主要下降”,我假设你以某种方式假定主数据库仍然活着以从中复制数据。精细。然后准备好ActiveMQ的备用安装(在笔记本电脑上,辅助服务器上或任何安全的地方)。您可以配置该实例以连接到“主数据库”,并使用“network of brokers”将所有消息发送到辅助节点。从“备用”代理,配置到次要代理的网络连接,并确保将“staticBrige”选项指定为true。这将使“备用”经纪人将所有未读消息转交给次要经纪人。一旦备用经纪人完成,它可以关闭,次要应该有所有的消息。这样,您可以在任何ActiveMQ版本中重复使用该逻辑,而无需担心ID序列等等。

+1

谢谢!我设置了一个独立的ActiveMQ发行版,为每个数据库架构运行两个代理,其中一个将所有消息“路由”到另一个消息。工作正常 :) – m34434