【问题标题】:ActiveMQ offline message transfer on database level数据库级别的 ActiveMQ 离线消息传输
【发布时间】:2015-06-10 04:16:14
【问题描述】:

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

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

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

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

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

感谢和亲切的问候,

迈克尔

【问题讨论】:

    标签: jdbc activemq


    【解决方案1】:

    我会对这个想法提出一个很大的危险信号。嗯,是的,理论上你可以成功,但你不应该一块一块地接触 JDBC 数据。

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

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

    好的,所以您以某种方式想要其他设置而不是官方设置,很好。有一种方法,但不使用原始 SQL 命令。

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

    【讨论】:

    • 谢谢!我设置了一个独立的 ActiveMQ 发行版,为每个 DB 模式运行两个代理,其中一个将所有消息“路由”到另一个。工作正常:)
    猜你喜欢
    • 2015-08-02
    • 2019-10-03
    • 2014-05-22
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 2019-03-08
    相关资源
    最近更新 更多