数据库级

时间:2015-06-09 07:39:57

标签: jdbc activemq

我们使用ActiveMQ作为使用JDBC持久性的消息代理来运行内部EAI系统。

我们有一个冷备用故障转移解决方案,每个解决方案都有自己的数据库架构(由于多种原因)。

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

查看表格" ACTIVEMQ_MSGS"让我们不确定我们是否可以做到这一点而没有任何缺点或副作用:

  • 有一列" ID"没有任何DB序列 - 备份代理可以处理这个吗?
  • 列" MSGID_PROD"包含主服务器的主机名 - 如果消息应由具有不同名称的代理处理,是否存在问题?
  • 有一列" MSGID_SEQ" (这似乎是#34; 1"所有的时间) - 这是什么意思?我们可以保留它吗?

谢谢和亲切的问候,

迈克尔

1 个答案:

答案 0 :(得分:0)

我会对这个想法提出一个大红旗。嗯,是的,理论上你可以很好地成功,但你不应该一点一点地触摸JDBC数据。

ActiveMQ有一些不同的主/从HA设置模式。为主服务器和从服务器使用共享存储,或使用复制存储(LevelDB + ZooKeeper)。

甚至可以复制共享的JDBC存储,但是在数据库级别上。

好的,所以你想要一个比官方设置更好的设置,好吧。有一种方法,但不使用原始SQL命令。

通过“主要关闭”,我假设您以某种方式假设主数据库仍处于活动状态以从中复制数据。精细。然后准备好备用的ActiveMQ安装(在笔记本电脑上,在辅助服务器上或任何安全的地方)。您可以将该实例配置为连接到“主数据库”,并使用“network of brokers”将所有消息发送到辅助节点。从“备用”代理中,配置与辅助代理的网络连接,并确保将“staticBrige”选项指定为true。这将使“备用”经纪人将所有未读消息移交给二级经纪人。备用代理完成后,可以关闭它,辅助代理应该拥有所有消息。这样,您可以在任何ActiveMQ版本中重用逻辑,而无需担心ID序列等等。