2016-09-19 165 views
0

我在主从设备配置中设置了ActiveMQ版本5.4.1(机器上的JVM为1.5,无法更新)。有两个AMQ实例I1和I2在两个独立的端口(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); }

在while循环中,如果实例出现故障,另一个出现时,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)

但是它无法重新连接到up实例,并且后面的消息被消耗为null。

如果消费者代码重新运行,failover:(tcp://I1:61616,tcp://I2:61617)?initialReconnectDelay=10000会自动选择启动实例。唯一不会自动重新连接到最上面的实例的时间是消耗,如果一个实例出现故障。

有没有什么,我失踪的故障转移协议自动连接到消费者消费时上行实例?

回答

0

5.4.1中存在一个影响initialReconnectDelay的bug。

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

你应该升级到最新的5.4.3无论如何,以确保你有5.4.x版本

+0

这个工作最修复。谢谢。我结束了使用5.4.3 –

相关问题