2016-09-19 3 views
0

У меня есть настройка ActiveMQ версии 5.4.1 (JVM на машине 1,5 и не может быть обновлена) в конфигурации подчиненного подчиненного устройства. Есть два экземпляра IQ I1 и I2 AMQ, которые работают на двух отдельных портах (61616 и 61617). Они имеют общий KahaDB. Оба экземпляра запускаются вместе и в зависимости от того, что может получить блокировку на KahaDB, становится мастером. Экземпляр подчиненного не получает блокировку на KahaDB и начинает опрос каждые 10 секунд, чтобы проверить, освободил ли мастер блокировку. Это прекрасно работает без каких-либо проблем.ActiveMQ и протокол отказоустойчивости не подключены автоматически

В то время производства и потребления, протокол отказоустойчивого используется и строка соединения используется
failover:(tcp://I1:61616,tcp://I2:61617)?initialReconnectDelay=10000

Код потребителя заключается в следующем

ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("failover:(tcp://I1:61616,tcp://I2:61617)?initialReconnectDelay=10000"); Connection connection = connectionFactory.createConnection(); connection.start(); connection.setExceptionListener(this); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); Destination destination = session.createQueue("TEST.FOO"); MessageConsumer consumer = session.createConsumer(destination); Message message = consumer.receive(10000); while (message != null) { // Process message and read next message = consumer.receive(10000); }

Внутри цикла в то время как выше, если экземпляр отключается, а другой появляется, потребитель AMQ автоматически печатает информационное сообщение, показанное ниже.
Transport failed, attempting to automatically reconnect due to: java.io.EOFException java.io.EOFException at java.io.DataInputStream.readInt(DataInputStream.java:375) at org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:268) at org.apache.activemq.transport.tcp.TcpTransport.readCommand(TcpTransport.java:192) at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:184) at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:172) at java.lang.Thread.run(Thread.java:619)

Однако он не может подключиться к предыдущему экземпляру, и последующие сообщения, которые потребляются, равны нулю.

Если код потребителя повторно запускается, то failover:(tcp://I1:61616,tcp://I2:61617)?initialReconnectDelay=10000 автоматически выбирает экземпляр up. Единственный раз, когда он не будет автоматически подключаться к экземпляру up, должен потребляться, если экземпляр идет вниз.

Есть ли что-то, что мне не хватает для протокола отказоустойчивости, чтобы автоматически подключаться к экземпляру up, пока потребитель потребляет?

ответ

0

Ошибка 5.4.1, которая повлияла на initialReconnectDelay.

AMQ-3049: https://issues.apache.org/jira/browse/AMQ-3049

Вы должны обновить его до последней 5.4.3 в любом случае, чтобы обеспечить вам самые затруднительные для 5.4.x

+0

Это работало. Благодарю. В итоге я использовал 5.4.3 –

Смежные вопросы