2017-04-20 2 views
1

Ich habe ein Problem mit einem meiner AMQ Produzenten, ich habe Probleme mit dem Netzwerk, folglich sendet es keine Nachrichten an die Q. Allerdings öffnet der Server eine Verbindung zu der Q-Maschine und pflegen sie intakt. Die Anzahl der Verbindungen erhöht sich, die Q-Maschine ist erstickt und kann den Rest ihrer Produzenten und Verbraucher nicht bedienen. HierActiveMQ hält ESTABLISHED Verbindungen

ist die Ausnahme, die ich in meinem „schlecht“ Produzenten Fang:

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 

Lauf netstat Befehl auf meinem „schlecht“ Produzenten gibt mir State ESTABLISHED für jede fehlgeschlagene Anfrage.

Laufen netstat Befehl auf meinem Q-Server gibt mir State ESTABLISHED vom "schlechten" Hersteller, für jede fehlgeschlagene Anfrage.

Frage: Welchen Parameter muss ich im Producer und/oder Q ändern, um diese Verbindungen nach einer konfigurierbaren Zeit zu "brechen"?

Antwort

1

Die beste Lösung ist, failover transport zu verwenden, damit Ihre Clients versuchen können, erneut zu verbinden, wenn der erste Versuch fehlschlägt.

Sie können auch versuchen, die Aushandlung des Kabelformats zu verlängern (Standard 10 Sek.).

Sie können mit wireFormat.maxInactivityDurationInitalDelay Eigenschaft auf der Verbindungs-URL in Ihrem Client zu erhöhen, um 30 Sekunden Timeout

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

versucht zu tun, dass das schon nicht geholfen, – Igor

+0

Können Sie schlecht Produzenten schreiben und AMQ loggt vollständig mit der Zeit –

+0

der Rest des Protokolls ist relevant, es ist mein Addieren, was ich gepostet wurde, ist das AMQ-Protokoll. Es dauert ~ 30 Sekunden, um das Senden zu beenden, aber der Port blieb ESTABLISHED länger – Igor