数据库级别的 ActiveMQ 离线消息传输
ActiveMQ offline message transfer on database level
我们是 运行 内部 EAI 系统,使用 ActiveMQ 作为使用 JDBC 持久性的消息代理。
我们有一个冷备用故障转移解决方案,每个解决方案都有自己的数据库模式(由于多种原因)。
现在,如果主节点出现故障并且我们想要启动备份,我们希望将数据库级别的所有未传送消息从一个节点传输到另一个节点。
查看 table "ACTIVEMQ_MSGS" 让我们不确定我们是否可以做到这一点而没有任何缺点或副作用:
- 有一列 "ID" 后面没有任何数据库序列 - 备份代理可以处理这个吗?
- 列 "MSGID_PROD" 包含主服务器的主机名 - 如果消息应由具有不同名称的代理处理,是否存在问题?
- 有一列 "MSGID_SEQ"(似乎一直是“1”)- 这是什么意思?我们可以保留它吗?
谢谢和亲切的问候,
迈克尔
我会对这个想法提出一个大危险信号。嗯,是的,理论上你可以成功,但你不应该逐条触摸 JDBC 数据。
ActiveMQ 有几种不同的 master/slave HA 设置模式。主从都使用共享存储,或者使用复制存储(LevelDB+ZooKeeper)。
甚至可以复制共享 JDBC 存储,但在数据库级别。
好的,所以你想要官方设置之外的其他设置,没问题。有一种方法,但不是使用原始 SQL 命令。
"Primary goes down",我假设您以某种方式假设主数据库仍然存在,可以从中复制数据。美好的。然后准备好 ActiveMQ 的备用安装(在笔记本电脑、辅助服务器或任何安全的地方)。您可以将该实例配置为连接到 "primary database" 并使用“network of brokers”将所有消息发送到辅助节点。在 "spare" 代理中,配置到辅助代理的网络连接,并确保将 "staticBrige" 选项指定为 true。这将使 "spare" 代理将所有未读消息移交给二级代理。一旦备用代理完成,它就可以关闭,辅助代理应该拥有所有消息。这样,您可以在您拥有的任何 ActiveMQ 版本中重用逻辑,而无需担心 ID 序列等。
我们是 运行 内部 EAI 系统,使用 ActiveMQ 作为使用 JDBC 持久性的消息代理。
我们有一个冷备用故障转移解决方案,每个解决方案都有自己的数据库模式(由于多种原因)。
现在,如果主节点出现故障并且我们想要启动备份,我们希望将数据库级别的所有未传送消息从一个节点传输到另一个节点。
查看 table "ACTIVEMQ_MSGS" 让我们不确定我们是否可以做到这一点而没有任何缺点或副作用:
- 有一列 "ID" 后面没有任何数据库序列 - 备份代理可以处理这个吗?
- 列 "MSGID_PROD" 包含主服务器的主机名 - 如果消息应由具有不同名称的代理处理,是否存在问题?
- 有一列 "MSGID_SEQ"(似乎一直是“1”)- 这是什么意思?我们可以保留它吗?
谢谢和亲切的问候,
迈克尔
我会对这个想法提出一个大危险信号。嗯,是的,理论上你可以成功,但你不应该逐条触摸 JDBC 数据。
ActiveMQ 有几种不同的 master/slave HA 设置模式。主从都使用共享存储,或者使用复制存储(LevelDB+ZooKeeper)。
甚至可以复制共享 JDBC 存储,但在数据库级别。
好的,所以你想要官方设置之外的其他设置,没问题。有一种方法,但不是使用原始 SQL 命令。
"Primary goes down",我假设您以某种方式假设主数据库仍然存在,可以从中复制数据。美好的。然后准备好 ActiveMQ 的备用安装(在笔记本电脑、辅助服务器或任何安全的地方)。您可以将该实例配置为连接到 "primary database" 并使用“network of brokers”将所有消息发送到辅助节点。在 "spare" 代理中,配置到辅助代理的网络连接,并确保将 "staticBrige" 选项指定为 true。这将使 "spare" 代理将所有未读消息移交给二级代理。一旦备用代理完成,它就可以关闭,辅助代理应该拥有所有消息。这样,您可以在您拥有的任何 ActiveMQ 版本中重用逻辑,而无需担心 ID 序列等。