2016-09-19 250 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 –