ActiveMQ Pure Master / Slave - не синхронизировано
- Что у меня есть: 1 главный брокер и 1 подчиненный брокер в ActiveMQ 5.4.0 - Что я использую: waitForSlave на главной стороне и URI аварийного переключения на ведомой стороне (в URI главного соединителя) 
- Что я хочу сделать: я хочу подождать некоторую задержку (например, 5 секунд) в случае крошечных сбоев сети между ведущим и ведомым, прежде чем запускать ведомые соединители транспортера 
 
Так что я положил это в конфиге ведомого:
<broker xmlns="http://activemq.apache.org/schema/core" 
 brokerName="slave" 
 dataDirectory="${activemq.base}/data" 
 useJmx="true" 
 persistent="true" 
 populateJMSXUserID="true"
 masterConnectorURI="failover://(tcp://master:61616)?initialReconnectDelay=1000&maxReconnectDelay=30000"
 shutdownOnMasterFailure="false"
 advisorySupport="false">
Кажется, что это работает, но после зависания сети между ведущим и ведомым, ведомое устройство успешно восстанавливает соединение, и затем ведущий регистрирует много:
2010-10-18 17:08:44,421 | ERROR | Slave Failed | org.apache.activemq.broker.ft.MasterBroker | ActiveMQ Task
java.lang.IllegalStateException: Cannot lookup a connection that had not been registered: ID:master-1040-634226732611718750-0:0
 at org.apache.activemq.broker.MapTransportConnectionStateRegister.lookupConnectionState(MapTransportConnectionStateRegister.java:93)
 at org.apache.activemq.broker.TransportConnection.lookupConnectionState(TransportConnection.java:1412)
 at org.apache.activemq.broker.TransportConnection.processRemoveConsumer(TransportConnection.java:561)
 at org.apache.activemq.command.RemoveInfo.visit(RemoveInfo.java:76)
 at org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:309)
 at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:185)
 at org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:116)
 at org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:69)
 at org.apache.activemq.transport.vm.VMTransport.iterate(VMTransport.java:218)
 at org.apache.activemq.thread.DedicatedTaskRunner.runTask(DedicatedTaskRunner.java:98)
 at org.apache.activemq.thread.DedicatedTaskRunner$1.run(DedicatedTaskRunner.java:36)
С рабской стороны все хорошо. Поэтому после этого я попытался остановить мастер, чтобы увидеть, способен ли подчиненный стать мастером после этих "зависаний сети".
Хозяину потребовалось много времени для выключения (10 секунд), а затем в журналах ведомых устройств появляется сообщение об ошибке:
2010-10-18 17:09:32,915 | WARN  | Async error occurred: java.lang.IllegalStateException: Cannot lookup a connection that had not been registered: ID:master-1049-634226732657812500-0:3 | org.apache.activemq.broker.TransportConnection.Service | VMTransport: vm://slave#5
java.lang.IllegalStateException: Cannot lookup a connection that had not been registered: ID:master-1049-634226732657812500-0:3
 at org.apache.activemq.broker.MapTransportConnectionStateRegister.lookupConnectionState(MapTransportConnectionStateRegister.java:93)
 at org.apache.activemq.broker.TransportConnection.lookupConnectionState(TransportConnection.java:1412)
 at org.apache.activemq.broker.TransportConnection.processRemoveSession(TransportConnection.java:600)
 at org.apache.activemq.command.RemoveInfo.visit(RemoveInfo.java:74)
 at org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:309)
 at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:185)
 at org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:116)
 at org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:69)
 at org.apache.activemq.transport.vm.VMTransport.iterate(VMTransport.java:218)
 at org.apache.activemq.thread.DedicatedTaskRunner.runTask(DedicatedTaskRunner.java:98)
 at org.apache.activemq.thread.DedicatedTaskRunner$1.run(DedicatedTaskRunner.java:36)
Есть ли способы синхронизировать мои магазины кахи (это отдельные магазины)? Основная проблема заключается в том, что ведомый никогда не поворачивает мастер после отказа мастера, он остается заблокированным в этом сообщении:
2010-10-18 17:09:33,681 | WARN  | Transport (master/172.21.60.61:61616) failed to tcp://master:61616 , attempting to automatically reconnect due to: java.net.SocketException: Software caused connection abort: socket write error | org.apache.activemq.transport.failover.FailoverTransport | ActiveMQ Transport: tcp://master/172.21.60.61:61616
Я полностью застрял с этими проблемами синхронизации, любая помощь приветствуется!
С уважением
1 ответ
После многих тестов кажется, что с нашей текущей инфраструктурой / средой невозможно выполнить то, что я хочу.
Это будет работать с общим хранилищем данных, но с уникальным хранилищем данных для каждого брокера, я всегда unsynchro.