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&amp;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.

Другие вопросы по тегам