首页 文章

网络故障后重新连接到ActiveMQ服务器

提问于
浏览
3

我们使用ActiveMQ 5.8.0通过TCP将我们的Java应用程序连接到另一个系统 . 请求/回复(与回复临时队列同步)与我们的客户及其相应部分一起正常工作 .

但我们不确定如何处理“异常”情况,例如短暂的网络故障 . 我们正在测试应用程序是否可以在套接字重新连接后继续正常工作 .

但直到现在我们无法管理,因为客户端似乎没有按预期自动重新连接到代理 . 我们考虑过在自己的TransportListener中自己实现它,但不建议这样做(参见Transport Listener and ActiveMq restart,其中ActiveMQ成员Tim Bish暗示使用故障转移协议) . 但故障转移只是设法切换到另一个经纪人,如果一个人失败,对吧?

目前,我们仅使用TransportListener来监视日志文件中的连接状态,这会导致一些日志条目如下面或类似(在下面的长日志中发布) .

ActiveMQ连接执行程序:... 生产环境 者收到:java.net.SocketException:...

class ConnectionStateMonitor
    implements TransportListener
{
    @Override
    public void onCommand(Object command)
    {
        logInfo("Producer received: " + command);
    }

    @Override
    public void onException(IOException exception)
    {
        logError("Producer received: " + exception);
    }

    @Override
    public void transportInterupted()
    {
        logError("Producer received transport interuption.");
    }

    @Override
    public void transportResumed()
    {
        logInfo("Producer received transport resumption.");
    }
}

对不起,发布下面有堆栈跟踪的长日志摘录,但也许有人会立即看到丢失的内容 .

我们目前正在使用以下设置:

  • wireFormat.maxInactivityDuration = 20000

  • 最大回复等待时间:10000毫秒

任何想法如何解决这个问题(以及如何格式化下面的日志)?

提前致谢!

2013-06-05 14:09:21,676 | main | Signal | DEBUG |等待60000 2013-06-05 14:09:30,279 | ActiveMQ InactivityMonitor WriteCheckTimer | AbstractInactivityMonitor | DEBUG | WriteChecker自上次写入检查后经过6666 ms . 2013-06-05 14:09:30,282 | ActiveMQ InactivityMonitor Worker | AbstractInactivityMonitor | DEBUG |运行WriteCheck [tcp://192.168.1.29:61616] 2013-06-05 14:09:36,945 | ActiveMQ InactivityMonitor WriteCheckTimer | AbstractInactivityMonitor | DEBUG | WriteChecker自上次写入检查后经过6666毫秒 . 2013-06-05 14:09:36,945 | ActiveMQ InactivityMonitor Worker | AbstractInactivityMonitor | DEBUG |运行WriteCheck [tcp://192.168.1.29:61616] 2013-06-05 14:09:40,579 | ActiveMQ Transport:tcp:// test-server / 192.168.1.29:61616 @ 54127 | ThreadPoolUtils | DEBUG |关闭ExecutorService:java.util.concurrent.ThreadPoolExecutor@13e0aba是shutdown:true并终止:false take:0.000秒 . 引发者:javax.jms.JMSException:在org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1391)的org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:49)处重置连接 . apache.activemq.ActiveMQSession.syncSendPacket(ActiveMQSession.java:1912)位于org.apache.activemq.ActiveMQMessageProducer . (ActiveMQMessageProducer.java:125)at org.apache.activemq.ActiveMQSession.createProducer(ActiveMQSession.java:956)at de . wer.services.activemq.ActiveMqConnectionImpl.sendRequest(ActiveMqConnectionImpl.java:218)... 4更多2013-06-05 14:09:40,579 | ActiveMQ Transport:tcp://test-server/192.168.1.29:61616 @ 54127 | ActiveMQConnection | DEBUG |没有异常侦听器的异步异常:java.net.SocketException:连接重置java.net.SocketException:在org.apache.activemq.transport.tcp的java.net.SocketInputStream.read(未知源)处重置连接org.apache.activemq.transport.tcp中的.TcpBufferedInputStream.fill(TcpBufferedInputStream.java:50) . 位于org.apache.activemq.transport.tcp.TcpBufferedInputStream.read(TcpBufferedInputStream.java:58)的tcpTransport $ 2.fill(TcpTransport.java:604)位于org.apache.activemq.transport.tcp.TcpTransport $ 2.read(TcpTransport . java:589)java.io.DataInputStream.readInt(Unknown Source)at org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:275)at org.apache.activemq.transport.tcp.TcpTransport.readCommand( TcpTransport.java:221)org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:213)at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:196)at java .lang.Thread.run(Unknown Source)由以下引起:java.net.SocketException:在org.apache.activemq.transport.tcp.TcpBufferedInputStream.fill(TcpBufferedInputStream . )的java.net.SocketInputStream.read(未知源)上重置连接 . java:50)atg.apache.activemq.transport.tcp.TcpTransport $ 2.fill(TcpTransport.java:604)at org.apache.activemq.transport.tcp.TcpBufferedInputStream.read(TcpBufferedInputStr eam.java:58)在org.apache.activemq.transport.tcp.TcpTransport $ 2.read(TcpTransport.java:589)at at位于org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:275)的java.io.DataInputStream.readInt(未知来源)org.apache.activemq.transport.tcp.TcpTransport.readCommand(TcpTransport.java:221) )org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:213)org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:196)... 1 more 2013- 06-05 14:09:40,583 | ActiveMQ连接执行程序:tcp://test-server/192.168.1.29:61616 @ 54127 | TcpTransport | DEBUG |停止传输tcp://test-server/192.168.1.29:61616 @ 54127 2013-06-05 14:09:40,583 | ActiveMQ连接执行程序:tcp://test-server/192.168.1.29:61616 @ 54127 | TaskRunnerFactory | DEBUG |使用ExecutorService初始化TaskRunnerFactory [ActiveMQ任务]:java.util.concurrent . ThreadPoolExecutor @ 186f247 2013-06-05 14:09:40,584 | ActiveMQ Task-1 | TcpTransport | DEBUG |关闭套接字套接字[addr = test-server / 192.168.1.29,port = 61616,localport = 54127]引起:javax . jms.JMSException:org.apach中的连接重置e.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:49)org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1391)org.apache.activemq.ActiveMQSession.syncSendPacket(ActiveMQSession.java:1912) at org.apache.activemq.ActiveMQMessageProducer . <init>(ActiveMQMessageProducer.java:125)atg.apache.activemq.ActiveMQSession.createProducer(ActiveMQSession.java:956)at dewer.services.activemq.ActiveMqConnectionImpl.sendRequest(ActiveMqConnectionImpl .java:218)... 4更多引起:java.net.SocketException:在org.apache.activemq.transport.tcp.TcpBufferedInputStream.fill(TcpBufferedInputStream . )的java.net.SocketInputStream.read(未知源)上重置连接 . java:50)atg.apache.activemq.transport.tcp.TcpTransport $ 2.fill(TcpTransport.java:604)org.apache.activemq.transport.tcp.TcpBufferedInputStream.read(TcpBufferedInputStream.java:58)at org . java.io.DataInputStream中的apache.activemq.transport.tcp.TcpTransport $ 2.read(TcpTransport.java:589)位于org.apache的org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:275)的.readInt(未知来源)org.apache.activeMq.transport.tcp.TcpTransport.readCommand(TcpTransport.java:221) .activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:213)at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:196)... 1更多2013-06-05 14: 09:40,584 | ActiveMQ连接执行程序:tcp://test-server/192.168.1.29:61616 @ 54127 | ThreadPoolUtils | DEBUG |强制关闭ExecutorService:java.util.concurrent.ThreadPoolExecutor@186f247引起:javax.jms.JMSException :在org.apache.activemq.ActiveMQSession.syncSendPacket的org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1391)的org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:49)处重置连接 . ActiveMQSession.java:1912)org.apache.activemq.ActiveMQMessageProducer . (ActiveMQMessageProducer.java:125)org.apache.activemq.ActiveMQSession.createProduc呃(ActiveMQSession.java:956)在de.wer.services.activemq.ActiveMqConnectionImpl.sendRequest(ActiveMqConnectionImpl.java:218)... 4更多引起:java.net.SocketException:java.net.SocketInputStream中的连接重置 . 在Org.apache.activemq.transport.tcp.TcpBufferedInputStream.fill(TcpBufferedInputStream.java:50)的org.apache.activemq.transport.tcp.TcpTransport $ 2.fill(TcpTransport.java:604)的org读取(未知来源)位于org.apache.activemq.transport.tcp.TcpTransport $ 2.read(TcpTransport.java:589)的.apache.activemq.transport.tcp.TcpBufferedInputStream.read(TcpBufferedInputStream.java:58)at java.io.DataInputStream.readInt( org.apache.activemq上的org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:275)org.apache.activemq.transport.tcp.TcpTransport.readCommand(TcpTransport.java:221)中的未知来源 . transport.tcp.TcpTransport.doRun(TcpTransport.java:213)at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:196)... 1更多2013-06-05 14:09:40 , 587 | ActiveMQ连接执行程序:tcp://test-server/192.168.1.29:61616 @ 54127 | ActiveMqConnectionImpl | ERROR | 生产环境 者收到:java.net.SocketException:连接重置

1 回答

  • 12

    听起来像故障转移肯定是你想要使用的东西 . 您不需要故障转移到另一个代理 - URI只是指示客户端库重新连接,因此您可以执行以下操作:

    failover:(tcp://myBroker:61616)
    

相关问题