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)"); 

http://activemq.apache.org/javaxjmsjmsexception-wire-format-negociation-timeout-peer-did-not-send-his-wire-format.html

+0

尝试已经,没有帮助 – Igor

+0

你能后生产不好和AMQ完全记录日志 –

+0

日志的其余部分是相关的,它是我的添加,我发布的是AMQ日志。大约需要30秒才能退出发送,但该端口仍然保持ESTABLISHED状态 – Igor