Ich habe ein Thread-Problem und sehe folgendes in meinem Thread-Dump:
%Vor% Nach diesen zwei artices: ( hier und hier ), meine JBoss App hat auf Socket.read()
eine Blockierung E / A-Operation, die für eine abgeschlossene Antwort von einem nachgelagerten Dienstleister wartet (in meinem Fall, ActiveMQ). Nach diesen Artikeln ist der Schuldige einer der folgenden 3 Punkte:
Ich versuche herauszufinden, welcher der drei Fälle der Fall ist. Gibt es irgendetwas in diesem Thread-Dump, um anzuzeigen, welcher es ist? Mein Verständnis (nach diesen Artikeln zu lesen) ist, dass die real hängt, ist die Tatsache, dass die Client-Seite (Blockierung) Sockel hat gerade nicht alle empfangenen Bytes es muss berücksichtigen die Antwort ist abgeschlossen; Das bedeutet, dass es keine any -Antwort von ActiveMQ erhalten hat oder keine vollständige Antwort erhalten hat.
Also frage ich:
Ich denke, ich komme hier näher auf eine Lösung zu sprechen, aber ich stecke fest und habe Schwierigkeiten, den Wald zwischen den Bäumen zu sehen. Vielen Dank im Voraus!
Ich habe etwas Erfahrung mit JBoss (und Glassfish) und ActiveMQ, aber ich habe Camel nie zuvor benutzt (aber ich bin vertraut mit Mule, die ich lese ist ähnlich).
Ihr Stack-Trace sieht aus, als ob Camel versucht, ActiveMQ (JMS-Zeug am Ende des Trace) mit einem Web-Endpunkt (HTTP-Zeug oben auf dem Trace) zu verknüpfen.
Ich bin ein wenig verwirrt, wo Camel läuft (der CamelContext). Sie haben gesagt, dass Sie zwei virtuelle Maschinen haben, eine für JBoss und eine für ActiveMQ. In meinem Fall betreiben wir Mule ESB auf der Maschine mit unserem ActiveMQ. Wo läuft dein Kamel?
Ihr Stack-Trace erscheint am häufigsten wie Problem Nr. 1 aus dem ersten Post. Es ist, als ob der Camel-Teil den Web-Endpunkt nicht "sehen" kann. Stellen Sie sicher, dass Ihre WAR-Datei ordnungsgemäß bereitgestellt wird und dass der Webendpunkt (WSDL) von beiden virtuellen Maschinen aus sichtbar ist. Überprüfen Sie Ihre Endpunkte; vielleicht ist man auf localhost oder so eingestellt, was es nicht erlaubt, auf einen anderen Rechner zu gelangen.
Es ist ein bisschen schwierig zu sagen, ob es sich um einen unvollständigen Lesevorgang oder eine komplette Unfähigkeit zu lesen handelt. Werden irgendwelche Daten durchkommen? Es ist möglich, dass der Webserver langsam überlastet wird und nicht mit Anfragen Schritt halten kann (und einige Threads wie in Ihrem Fehler verhungern). Socket Timeouts werden wichtig, wenn Sie langsame Antworten oder viele Anfragen haben; Wenn Sie einen Test erstellen können, der einfach ist (schnell und mit wenigen Anfragen), können Sie zumindest überprüfen, ob Sie eine grundlegende Verbindung haben. Welche Dateneingabe (Test) hat diesen Fehler verursacht?
Ich werde gerne versuchen, diese Antwort mit mehr Input zu verbessern. (Es tut mir leid, dass ich versucht hätte, Ihre Frage zu kommentieren, aber ich glaube nicht, dass ich dafür noch den Vertreter habe ...)
Tags und Links java multithreading sockets jboss activemq