我们正在使用ActiveMQ 5.8.0将我们的Java应用程序通过TCP连接到另一个系统。 请求/回复(与回复临时队列同步)与我们的客户及其相应部分正常工作。网络故障后重新连接到ActiveMQ服务器
但是我们不确定如何处理“异常”情况,例如,一个短暂的网络故障。 我们正在测试应用程序是否可以在套接字重新连接后正常继续其工作。
但直到现在我们无法管理,因为客户似乎不会按预期自动重新连接到代理。 我们考虑在自己的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年6月5日14:09:21676 |主要|信号| DEBUG |等待60000 2013年6月5日14:09:30279 | ActiveMQ的InactivityMonitor WriteCheckTimer | AbstractInactivityMonitor | DEBUG | WriteChecker 6666毫秒自上次写入检查后已过去了 。 2013年6月5日14:09:30282 |的ActiveMQ InactivityMonitor工人| AbstractInactivityMonitor | DEBUG |运行 WriteCheck [TCP://192.168.1.29:61616] 2013年6月5日14:09:36945 |的ActiveMQ InactivityMonitor WriteCheckTimer | AbstractInactivityMonitor | DEBUG | WriteChecker 6666 ms 自上次写入检查后已过去。 2013年6月5日14:09:36945 | ActiveMQ的 InactivityMonitor工人| AbstractInactivityMonitor |调试|运行 WriteCheck [TCP://192.168.1.29:61616] 2013年6月5日14:09:40579 | ActiveMQ的 交通: ExecutorService:[email protected]的tcp://test-server/192.168.1.29:61616 @ 54127 | ThreadPoolUtils | DEBUG |关机 关机:true和终止:false消耗:0.000秒。造成者: javax.jms.JMSException:连接重置为 org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport。的java:49) 在 org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1391) 在 org.apache.activemq.ActiveMQSession.syncSendPacket(ActiveMQSession.java:1912) 在 org.apache.activemq .ActiveMQMessageProducer。(ActiveMQMessageProducer.java:125) 在 org.apache.activemq.ActiveMQSession.createProducer(ActiveMQSession.java:956) 在 de.wer.services.activemq.ActiveMqConnectionImpl.sendRequest(ActiveMqConnectionImpl.java:218) ... 4更多2013-06-05 14:09:40,579 | ActiveMQ传输: tcp://test-server/192.168.1.29:61616 @ 54127 | ActiveMQConnection | DEBUG |异步 异常没有异常监听器:java.net.SocketException: 连接重置java.net.SocketException:连接重置在 java.net.SocketInputStream.read(未知源)在 org.apache.activemq.transport.tcp.TcpBufferedInputStream.fill( TcpBufferedInputStream.java:50) 在 org.apache.activemq.transport.tcp.TcpTransport $ 2.填写(TcpTransport.java:604) 在 org.apache.activemq.transport.tcp.TcpBufferedInputStream.read(TcpBufferedInputStream.java :58) 在 org.apache.activemq.transport.tcp.TcpTransport $ 2.read(TcpTransport.java:589) 在java.io.DataInputStream.readInt(来源不明)在 org.apache.activemq.openwire。 OpenWireFormat.unmarshal(OpenWireFormat.java:2 75) 在 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) 在致java.lang.Thread.run(未知来源): java.net.SocketException异常:在 java的连接重置。 net.SocketInputStream.read(Unknown Source)at org.apache.activemq.transport.tcp.TcpBufferedInputStream.fill(TcpBufferedInputStream.java:50) at org.apache.activemq.transport.tcp.TcpTransport $ 2.fill(TcpTransport .java:604) at org.apache.activemq.transport.tcp.TcpBufferedInputStream.read(TcpBufferedInputStream.java:58) 在 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) 在 org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:196) .. 。1更多 2013-06-05 14:09:40,583 |法案iveMQ连接执行程序: tcp://test-server/192.168.1.29:61616 @ 54127 | TcpTransport | DEBUG |正在停止 transport tcp://test-server/192.168.1.29:61616 @ 54127 2013-06-05 14 :09:40583 | ActiveMQ的连接执行人: TCP://test-server/192.168.1.29:61616 @ 54127 | TaskRunnerFactory | DEBUG |使用的ExecutorService初始化 TaskRunnerFactory [ActiveMQ的任务]: [email protected] 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.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport。的java:49) 在 org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1391) 在 org.apache.activemq.ActiveMQSession.syncSendPacket(ActiveMQSession.java:1912) 在 org.apache.activemq .ActiveMQMessageProducer。 <INIT>(ActiveMQMessageProducer.java:125) 在 org.apache.activemq.ActiveMQSession.createProducer(ActiveMQSession.java:956) 在 de.wer.services.activemq.ActiveMqConnectionImpl.sendRequest(ActiveMqConnectionImpl.java:218) ... 4更多原因:java.net.SocketException:连接重置在 java.net.SocketInputStream.read(未知源)在 org.apache.activemq.transport.tcp.TcpBufferedInputStream.fill(TcpBufferedInputStream.java: 50) 在 org.apache.activemq.transport.tcp.TcpTransport $ 2.填写(TcpTransport.java:604) 在 org.apache.activemq.transport.tcp.TcpBufferedInputStream.read(TcpBufferedInpu tStream.java:58) 在 org.apache.activemq.transport.tcp.TcpTransport $ 2.read(TcpTransport.java:589) 在java.io.DataInputStream.readInt(来源不明)在 org.apache.activemq .openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:275) 在 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) ... 1更多2013-06-05 14:09:40,584 | ActiveMQ连接执行程序: tcp://test-server/192.168.1.29:61616 @ 54127 | ThreadPoolUtils | DEBUG |强制 关机的ExecutorService的: [email protected]产生的原因: javax.jms.JMSException异常:在 org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:49)连接复位 在 org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1391) 在 org.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更多原因:java.net.SocketException:连接重置在 java.net.SocketInputStream.read(未知源)在 org .apache.activemq.transport.tcp.TcpBufferedInputStream.fill(TcpBufferedInputStream.java:50) 在 org.apache.activemq.transport.tcp.TcpTransport $ 2.填写(TcpTransport.java:604) 在 org.apache。 activemq.transport.tcp.TcpBufferedInputStream.read(TcpBufferedInputStream.java:58) at org.apache.activemq.transport.tcp.TcpTransport $ 2.read(TcpTransport.java:589) at java.io.DataInputStream.readInt(未知来源)在 org.apache.activemq.openwire .OpenWireFormat.unmarshal(OpenWireFormat.java:275) 在 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) ...1更多2013-06-05 14:09:40,587 | ActiveMQ连接执行程序: tcp://test-server/192.168.1.29:61616 @ 54127 | ActiveMqConnectionImpl | ERROR |生产者收到:java.net.SocketException:连接重置
+1。以下是ActiveMQ的相关参考:[如何支持自动重新连接](http://activemq.apache.org/how-can-i-support-auto-reconnection.html) – brainOverflow
谢谢你们!显然,我错过了ActiveMQ文档中这个简单而重要的部分: - | – Mayoares
使用'vm'运输工具时,这些优点是否也适用?在这里打开一个单独的问题:https://stackoverflow.com/questions/47530980/are-there-any-benefits-in-using-the-failover-protocol-with-the-vm-transpor – nwinkler