Oracle DBでは、いわゆるJDBC マスター スレーブアーキテクチャを使用しています。2 つのノードがあり、それぞれに 1 つの Broker が開始されています。Broker1 を (ノード 1 で) 開始すると、テーブルのロックを取得する MASTER になります。次に、Broker2 を node2 で開始すると、これが SLAVE として開始されます。スレーブ ブローカのログで、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
すべて正常に動作し、SLAVE のログを見ると、突然 MASTER になっていることがわかります。
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
MASTERのログは、通常出力されるものから変化を示していません...
そのため、何らかの形で SLAVE がロックを取得しているように見えますが (うーん...たとえば、マスターと DB 間の接続が失われたため)、ブローカーを再起動しないと、メッセージが失われ始めます...
問題は、プロデューサーのログで、メッセージがQueueXに正常に送信されたことを確認できますが、コンシューマーがメッセージをキューから取得していないことがわかります... DB に移動して _ACTIVEMQ_MSGS_ テーブルをクエリすると、メッセージが未処理であること。ブローカー (プロデューサーが接続されている) がロックを持っていて、メッセージを DB に挿入し、クライアントが消費しているブローカーにはロックがなく、テーブルを参照できないように見えます...
これがすべて理にかなっているのかどうかはわかりませんが、誰かがこれに光を当ててくれることを願っています...
構成の詳細で投稿を飽和させたくありませんでしたが、フェイルオーバー構成、IP、ポートなどの特定の詳細が必要な場合は投稿します...