我的一个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中修改哪个参数才能打破"打破"可配置时间后的那些连接?
答案 0 :(得分:1)
最佳解决方案是使用failover transport,以便您的客户端可以在第一次尝试失败时再次尝试连接。
您还可以尝试延长有线格式协商期(默认为10秒)。
您可以通过在客户端的连接URL上使用wireFormat.maxInactivityDurationInitalDelay属性来增加到30秒超时
ActiveMQConnectionFactory cf = new ActiveMQConnectionFactory("failover:(tcp://localhost:61616?wireFormat.maxInactivityDurationInitalDelay=30000)");