Activemq 使用Oracle的主/从系统

Activemq 使用Oracle的主/从系统,activemq,Activemq,我们在Oracle DB中使用了所谓的JDBC主从架构。我们有2个节点,每个节点都启动了一个代理。我们启动Broker1(在node1上),它将成为获取表锁的主服务器。然后我们在节点2上启动Broker2,这个作为从节点启动。我们可以在Slave broker的日志中看到,它试图每10秒获取一次锁,但失败了: 2013-06-12 19:32:38,714 | INFO | Default failed to acquire lease. Sleeping for 10000 milli(s

我们在Oracle DB中使用了所谓的JDBC主从架构。我们有2个节点,每个节点都启动了一个代理。我们启动Broker1(在node1上),它将成为获取表锁的主服务器。然后我们在节点2上启动Broker2,这个作为从节点启动。我们可以在Slave broker的日志中看到,它试图每10秒获取一次锁,但失败了:

2013-06-12 19:32:38,714 | INFO  | Default failed to acquire lease.  Sleeping for 10000 milli(s) before trying again... | org.apache.activemq.store.jdbc.LeaseDatabaseLocker | main
2013-06-12 19:32:48,720 | INFO  | Default Lease held by Default till Wed Jun 12 19:32:57 UTC 2013 | org.apache.activemq.store.jdbc.LeaseDatabaseLocker | main
一切正常,然后在奴隶日志中的一瞬间,我们看到它突然变成了主人:

2013-06-13 00:38:11,262 | INFO  | Default Lease held by Default till Thu Jun 13 00:38:17 UTC 2013 | org.apache.activemq.store.jdbc.LeaseDatabaseLocker | main
2013-06-13 00:38:11,262 | INFO  | Default failed to acquire lease.  Sleeping for 10000 milli(s) before trying again... | org.apache.activemq.store.jdbc.LeaseDatabaseLocker | main
...
2013-06-13 00:38:21,314 | INFO  | Default, becoming the master on dataSource: org.apache.commons.dbcp.BasicDataSource@9c6a99d | org.apache.activemq.store.jdbc.LeaseDatabaseLocker | main
2013-06-13 00:38:21,576 | INFO  | Apache ActiveMQ 5.8.0 (Default, ID:corerec3-49774-1371083901328-0:1) is starting | org.apache.activemq.broker.BrokerService | main
2013-06-13 00:38:21,692 | WARN  | Failed to start jmx connector: Cannot bind to URL [rmi://localhost:1616/jmxrmi]: javax.naming.NameAlreadyBoundException: jmxrmi [Root exception is java.rmi.AlreadyBoundException: jmxrmi]. Will restart management to re-create jmx connector, trying to remedy this issue. | org.apache.activemq.broker.jmx.ManagementContext | JMX connector
2013-06-13 00:38:21,700 | INFO  | Listening for connections at: tcp://corerec3:61617?transport.closeAsync=false | org.apache.activemq.transport.TransportServerThreadSupport | main
2013-06-13 00:38:21,700 | INFO  | Connector openwire Started | org.apache.activemq.broker.TransportConnector | main
2013-06-13 00:38:21,701 | INFO  | Apache ActiveMQ 5.8.0 (Default, ID:corerec3-49774-1371083901328-0:1) started | org.apache.activemq.broker.BrokerService | main
2013-06-13 00:38:21,701 | INFO  | For help or more information please see: http://activemq.apache.org | org.apache.activemq.broker.BrokerService | main
2013-06-13 00:38:21,701 | ERROR | Memory Usage for the Broker (512 mb) is more than the maximum available for the JVM: 245 mb | org.apache.activemq.broker.BrokerService | main
2013-06-13 00:38:22,157 | INFO  | Web console type: embedded | org.apache.activemq.web.WebConsoleStarter | main
2013-06-13 00:38:22,292 | INFO  | ActiveMQ WebConsole initialized. | org.apache.activemq.web.WebConsoleStarter | main
2013-06-13 00:38:22,353 | INFO  | Initializing Spring FrameworkServlet 'dispatcher' | /admin | main
虽然主日志显示它通常输出的内容没有变化

因此,似乎从机以某种方式获得了锁(由于hmm…例如主服务器和数据库之间的连接丢失),但是如果我们不重新启动代理,我们就开始丢失消息

问题是,在生产者日志中,我们可以看到它成功地将消息发送到QueueX,但我们看不到消费者将消息从队列中取出。。。 如果我们转到DB并查询_ACTIVEMQ_MSGS_表,我们会看到消息未经处理。 看起来好像代理(生产者连接到)拥有锁,并将消息插入数据库,而客户端使用的代理没有锁,无法查询表

我不知道这一切是否有意义,但我确实希望有人能对这件事有所了解


我不想让帖子充斥配置细节,但如果您需要故障切换配置、IP、端口等特定细节,我会发布…

不确定锁问题,但您可能希望修复此问题:
2013-06-13 00:38:21701 |错误|代理的内存使用率(512 mb)超过了JVM的最大可用容量:245 mb | org.apache.activemq.broker.BrokerService | main
我怀疑这会导致从服务器变为主机的问题,但我们肯定要解决这个问题:)thanksProb。不是,但是内存问题有一个坏习惯,它会在任何软件中导致任何类型的错误。顺便说一句,看看在再现错误时是否可以进行一些调试级别的日志记录。它可能会给你更多的信息来追踪这个问题