我们正在使用 ActiveMQ 5.8.0 通过 TCP 将我们的 Java 应用程序连接到另一个系统。请求/回复(与对临时队列的回复同步)与我们的客户端及其相应部分配合良好。
但我们不确定如何处理“异常”情况,例如短暂的网络故障。我们正在测试套接字重新连接后应用程序是否可以继续正常工作。
但是直到现在我们都无法做到这一点,因为客户端似乎没有像预期的那样自动重新连接到代理。我们曾考虑在自己的 TransportListener 中实现它,但不建议这样做(请参阅Transport Listener 和 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.");
}
}
抱歉,在下面发布了带有堆栈跟踪的长日志摘录,但也许有人会立即看到缺少的内容。
我们目前正在使用以下设置:
- 线格式.maxInactivityDuration=20000
- 回复的最大等待时间:10000 毫秒
任何想法如何解决这个问题(以及如何格式化下面的日志)?
提前致谢!
2013-06-05 14:09:21,676|main |Signal |DEBUG|Wait For 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 传输:tcp:// test-server/192.168.1.29:61616@54127|ThreadPoolUtils|DEBUG|ExecutorService 关闭:java.util.concurrent。ThreadPoolExecutor@13e0aba 已关闭:true 并终止:false 耗时: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) 在 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: