ActiveMQ保持ESTABLISHED连接

时间:2017-04-20 10:41:32

标签: java activemq

我的一个AMQ生产者遇到了问题,我遇到了网络问题,因此无法向Q发送消息。 但是,服务器会打开与Q计算机的连接并保持其完好无损。连接数量增加,Q机器被窒息而无法为其他生产者和消费者服务。

这是我在"糟糕"中遇到的例外情况。生产者:

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

在我的Q服务器上运行netstat命令会从“错误”中找到State ESTABLISHED。生产者,对于每一个失败的请求。

问题:我需要在生产者和/或Q中修改哪个参数才能打破"打破"可配置时间后的那些连接?

1 个答案:

答案 0 :(得分:1)

最佳解决方案是使用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