ActiveMQ保持ESTABLISHED连接
问题描述:
我与我的AMQ
生产者之一有问题,我遇到了网络问题,因此无法将消息发送到Q. 但是,服务器打开Q机器的连接并维护它们完整。连接数量增加,Q机器窒息而无法服务于其他生产者和消费者。ActiveMQ保持ESTABLISHED连接
这里是我赶上我的“坏”的制片人例外:
Caused by: javax.jms.JMSException: Wire format negotiation timeout: peer did not send his wire format.
at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:72)
at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1413)
at org.apache.activemq.ActiveMQConnection.ensureConnectionInfoSent(ActiveMQConnection.java:1478)
at org.apache.activemq.ActiveMQConnection.start(ActiveMQConnection.java:527)
at com.queue.service.ActiveMQ.ActiveMQWriter.initSession(ActiveMQWriter.java:163)
... 4 more
Caused by: java.io.IOException: Wire format negotiation timeout: peer did not send his wire format.
at org.apache.activemq.transport.WireFormatNegotiator.oneway(WireFormatNegotiator.java:99)
at org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:68)
at org.apache.activemq.transport.ResponseCorrelator.asyncRequest(ResponseCorrelator.java:81)
at org.apache.activemq.transport.ResponseCorrelator.request(ResponseCorrelator.java:86)
at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1388)
... 7 more
对我的“坏”的制片运行netstat
命令让我State ESTABLISHED
每一个失败的请求。
运行netstat
命令在我的Q服务器上给我State ESTABLISHED
来自“坏”生产者,为每个失败的请求。
问题:我需要在生产者和/或Q中修改哪些参数以便在可配置时间后“断开”这些连接?
答
最好的解决方案是使用failover transport,这样如果第一次尝试失败,您的客户端可以再次尝试连接。
您还可以尝试延长线格式协商期(默认10秒)。
你可以通过使用在客户端的连接URL wireFormat.maxInactivityDurationInitalDelay物业将增加至30秒超时
ActiveMQConnectionFactory cf = new ActiveMQConnectionFactory("failover:(tcp://localhost:61616?wireFormat.maxInactivityDurationInitalDelay=30000)");
尝试已经,没有帮助 – Igor
你能后生产不好和AMQ完全记录日志 –
日志的其余部分是相关的,它是我的添加,我发布的是AMQ日志。大约需要30秒才能退出发送,但该端口仍然保持ESTABLISHED状态 – Igor