मुझे वेबस्केट मैसेजिंग पर STOMP का उपयोग करके स्प्रिंग के साथ कार्यान्वित एक वेब एप्लिकेशन प्राप्त हुआ, जैसा कि here (बैकएंड पर RabbitMQ के साथ) का वर्णन किया गया है। यह टॉमकैट पर चलता है, और मैं नियमित यूआरएल (उदाहरण के लिए http://host/server/
) का उपयोग कर एप्लिकेशन से कनेक्ट कर सकता हूं। मुझे डेमो क्लाइंट भी दिया गया - एक जेएसपीएक्स पेज, जो मॉडर्नइज़र वेबसाकेट्स और सॉकजेएस का उपयोग करता है। डेमो क्लाइंट में कनेक्शन कोड इस तरह दिखता है:जावा क्लाइंट से स्प्रिंग 4 का उपयोग करके लागू वेबस्केट पर स्टॉम्प से कनेक्ट करना
if (Modernizr.websockets) {
socket = new WebSocket('ws://host/server/endpointx');
}
else {
socket = new SockJS('/server/endpointy');
}
stompClient = Stomp.over(socket);
stompClient.connect(headers, function(frame) { ... });
....
डेमो ग्राहक ठीक काम करता है (जब मैं ब्राउज़र में JSPX पृष्ठ लोड, मैं सर्वर से कनेक्ट कर सकते हैं)। लेकिन मेरा लक्ष्य कुछ जावा STOMP लाइब्रेरी का उपयोग कर उसी सर्वर से कनेक्ट करना है। समस्या यह है, पुस्तकालयों मैंने कोशिश की, मेजबान और कनेक्शन पैरामीटर के रूप में बंदरगाह आवश्यकता होती है: उदाहरण के लिए ActiveMQ Stomp library साथ: यदि मैं port
61613
के रूप में, कनेक्शन सफल होता है निर्दिष्ट
StompConnection connection = new StompConnection();
connection.open("host", port);
connection.connect(new HashMap<String, String>());
, लेकिन मैं RabbitMQ सीधे मारा, नहीं मेरी सर्वर (यह वही नहीं है जो मैं चाहता हूं)। अगर मैं 8080
(या 80
) निर्दिष्ट करें, कनेक्शन पर मैं org.apache.activemq.transport.stomp पर java.io.DataInputStream.readByte (अज्ञात स्रोत) में एक त्रुटि
java.io.EOFException मिल .StompWireFormat.unmarshal (StompWireFormat.java:137) org.apache.activemq.transport.stomp.StompConnection.receive (StompConnection.java:77) पर org.apache.activemq.transport.stomp.StompConnection.receive पर (StompConnection .java: 68) org.apache.activemq.transport.stomp.StompConnection.connect (StompConnection.java:139) पर .... stomp.impl.activemq.ActiveMQStompDriver.connect (ActiveMQStompDriver.java:39) ... 25 अधिक
और ट्रेस पता चलता है कि इस वजह से CONNECT
फ्रेम कभी नहीं प्राप्त करता है एक उम्मीद CONNECTED
फ्रेम (वास्तव में, यह कुछ भी वापस प्राप्त नहीं होता है)।
तो मैं परेशान हूं: क्या मैं गलत बंदरगाह का उपयोग कर रहा हूं? या कुछ पुस्तकालय असंगतता से निपटने? या मुझे किसी भी तरह टोमकैट को इंगित करने की ज़रूरत है कि मैं upgrade HTTP connection to WebSockets करना चाहता हूं?
यदि उपरोक्त प्रश्न का उत्तर देना मुश्किल है, तो यह एक समान रूप से उपयोगी है: मैं जावा का उपयोग कर टॉमकैट पर चल रहे वेबसाकेट मैसेजिंग चैनल पर STOMP के साथ स्प्रिंग एप्लिकेशन से कैसे कनेक्ट करूं?