2017-04-20 216 views
1

我與我的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中修改哪些參數以便在可配置時間後「斷開」這些連接?

回答

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

+0

嘗試已經,沒有幫助 – Igor

+0

你能後生產不好和AMQ完全記錄日誌 –

+0

日誌的其餘部分是相關的,它是我的添加,我發佈的是AMQ日誌。大約需要30秒才能退出發送,但該端口仍然保持ESTABLISHED狀態 – Igor